因此,在几个月前,只有使用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子句,因此导出只需要获取所有数据。
修改已保存的查询以进行过滤通常既不需要也不实用。
你做的是将过滤器应用于表单:
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
如上所述