基于表单控件使用VBA更改WHERE子句

问题描述 投票:0回答:1

因此,在几个月前,只有使用VBA才能获得访问并且只使用VBA,因此有很多命令我绝对不知道如何使用/正确编写语法。

问题:我有一个保存的查询(qry_ExcelExport),目前只是:

SELECT '*' FROM tbl_Contacts

我想要做的是使用VBA基于用户表单控件添加/更改WHERE子句。

就像是:

If me.txt_Flag = "DP Delegate" then 'WHERE [DP-DEL] = True' (or = -1)
Elseif me.txt_Flag = "DP Sponsor" then 'WHERE [DP-SPON] = True' (or = -1)

等等。 (我知道上面的语法是100%不正确的,这正是我希望实现的)

利用互联网的力量,我设法遇到了这个代码:

    ‘To change the Where clause in a saved query  
    Dim qdf as QueryDef
    Dim db as Database
    Set db = CurrentDB
    Set qdf = db.QueryDefs("YourQueryName")
    qdf.SQL = ReplaceWhereClause(qdf.SQL, strYourNewWhereClause)
    set qdf = Nothing
    set db = Nothing

    Public Function ReplaceWhereClause(strSQL As Variant, strNewWHERE As Variant)
    On Error GoTo Error_Handler

    ‘This subroutine accepts a valid SQL string and Where clause, and
    ‘returns the same SQL statement with the original Where clause (if any)
    ‘replaced by the passed in Where clause.
    ‘
    ‘INPUT:
    ‘ strSQL valid SQL string to change
    ‘OUTPUT:
    ‘ strNewWHERE New WHERE clause to insert into SQL statement
    ‘
        Dim strSELECT As String, strWhere As String
        Dim strOrderBy As String, strGROUPBY As String, strHAVING As String

        Call ParseSQL(strSQL, strSELECT, strWhere, strOrderBy, _
            strGROUPBY, strHAVING)

        ReplaceWhereClause = strSELECT &""& strNewWHERE &""_
            & strGROUPBY &""& strHAVING &""& strOrderBy

        Exit_Procedure:
            Exit Function

        Error_Handler:
            MsgBox (Err.Number & ": " & Err.Description)
            Resume Exit_Procedure

    End Function

第一行......第一行“要更改已保存查询中的Where子句”表示这是我所需要的。

但是,没有直接或逐步的初学者指南来理解这些代码,语法或者更重要的是如何将它与表单控件联系起来并且它不是我以前曾经使用或听过的。

编辑:保存的查询查询Excel导出用于导出数据的函数

Call exportTable("qry_ExportExcel")

我在哪里打电话

Public Sub exportTable(tName As String)
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, tName, saveFileAs, True
End Sub

我需要能够修改where,以便在我导出时包含该子句,因为目前没有WHERE子句,因此导出只需要获取所有数据。

vba ms-access access-vba
1个回答
3
投票

修改已保存的查询以进行过滤通常既不需要也不实用。

你做的是将过滤器应用于表单:

If me.txt_Flag = "DP Delegate" then 
    strFilter = "[DP-DEL] = True"
Elseif me.txt_Flag = "DP Sponsor" then 
    strFilter = "[DP-SPON] = True"
Else
    strFilter = ""
End If

Me.Filter = strFilter
Me.FilterOn = (strFilter <> "")

或者,如果您需要查询其他内容,可以将过滤器应用于查询。

Set rs = DB.OpenRecordset("Select * From MySavedQuery Where " & strFilter)

编辑

如果查询用于导出,则实际上是少数情况之一,其中修改查询很有用。

如果查询与您的问题一样简单,您只需设置完整的SQL:

strSql = "SELECT * FROM tbl_Contacts WHERE " & strFilter
db.QueryDefs("qry_ExportExcel").SQL = strSql
Call exportTable("qry_ExportExcel")

或者如果基本查询更复杂,请使用两个查询:常量查询(qry_ExportExcel_Base)和动态查询(qry_ExportExcel)

strSql = "SELECT * FROM qry_ExportExcel_Base WHERE " & strFilter

如上所述

© www.soinside.com 2019 - 2024. All rights reserved.