[AccessD] Modifying a query

A.D.TEJPAL adtp at airtelbroadband.in
Wed Jun 7 12:55:44 CDT 2006


Rocky,

    Apparently, you wish to modify a saved query as per desired criteria string. You could consider the simple alternative of setting up a wrapper saved query whose Where clause could be modified as required from time to time. 

    The original query would be a plain one, without any Where clause. This approach should suit most situations unless it is a case of Totals query where criteria needs to be applied before the Group By clause.

    Function Fn_PutQueryFilter() as given below, will create the required wrapper query (or modify suitably if such a query is already existing). It takes the name of original query and the criteria string as its arguments.

    For example, if original query is named "Q_A", a new one called "Q_A_Filtered" will get created, duly incorporating the desired criteria in its Where clause. (Query "Q_A" is a plain one, with no Where clause).  If "Q_A_Filtered" is already existing, it will get suitably modified.

    Typical statement for calling this function is given below:

    Call Fn_PutQueryFilter(OriginalQueryName,  _
                                            DesiredCriteriaString)

Best wishes,
A.D.Tejpal
---------------

======================================
Function Fn_PutQueryFilter(ByVal QueryName As String, _
            Optional ByVal CriteriaString As Variant) As Long
    ' Creates new saved query named QueryName_Filtered
    ' based upon saved query named QueryName and returns
    ' 1 if successful, otherwise 0
    On Error GoTo ExitPoint
    Dim Status As Long, Qst As String
    Dim NewQueryName As String, Rtv As Variant
    Dim db As DAO.Database
    
    Status = 0   ' Default
    NewQueryName = QueryName & "_Filtered"
    If IsMissing(CriteriaString) Or _
                            Len(Nz(CriteriaString, "")) = 0 Then
        Qst = "Select * From " & QueryName & ";"
    Else
        Qst = "Select * From " & QueryName & _
            " Where " & CriteriaString & ";"
    End If
    
    Set db = CurrentDb
    On Error Resume Next
    Rtv = db.QueryDefs(NewQueryName).Name
    If Err.Number = 0 Then
        db.QueryDefs(NewQueryName).SQL = Qst
    Else
        db.CreateQueryDef NewQueryName, Qst
    End If
    Err.Clear
    
    db.QueryDefs.Refresh
    
   Status = 1
   
ExitPoint:
   Fn_PutQueryFilter = Status
   On Error GoTo 0
End Function
======================================

  ----- Original Message ----- 
  From: Rocky Smolin - Beach Access Software 
  To: Access Developers discussion and problem solving 
  Sent: Wednesday, June 07, 2006 05:49
  Subject: [AccessD] Modifying a query


  Dear List:

  Can you modify the criteria in an existing query through code?  Usually I just construct the query as a SQL statement and use db.execute to run it.  But this time I think it would be better to leave the query where it is and modify the criterion based on a selection by the user.  The query is part of a predefined set of queries that were embedded in a macro by the user.

  MTIA,

  Rocky


More information about the AccessD mailing list