gpt4 book ai didi

vba - 编辑 SQL 查询

转载 作者:行者123 更新时间:2023-12-02 08:59:38 29 4
gpt4 key购买 nike

我有一个包含单个查询的 Access 数据库。我目前可以使用 DoCmd.CopyObject 通过 VBA 复制查询。但是,我需要能够在每个查询实例中单独编辑 SQL。然而,我看到的所有示例都涉及记录集,这是我没有使用的东西。

有什么想法吗?

最佳答案

我经常做这种事!我已经使用 VBA 重写了 Access 查询以及“传递”到 MySQL 数据库的查询。在 VBA 中重写查询取决于您想要变得多复杂。

我一直使用 DAO这是较旧的技术(有关 DAO 与 ADO 的说明,请参阅下面的评论),但在本例中它对我有用。您需要在 VBA 中添加对 DAO 的引用,方法是转到“工具”>“引用”,然后添加“Microsoft DAO 3.6 对象库”。

您可以编写如下所示的过程:

Sub RewriteQuerySQL(strQueryName As String, strParameter As String)
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb()
Set qdf = db.QueryDefs(strQueryName)

qdf.SQL = "SELECT [Table].Field1, [Table].Field2 " & vbCrLf & _
"FROM [Table] " & vbCrLf & _
"WHERE ([Table].Field1 = " & chr(34) & strParameter & chr(34) & ");"
End Sub

上面的代码将更改您在 VBA 代码中使用查询 SQL 指定的查询的 SQL,并在 SQL 查询中嵌入 strParameter

这是另一种方法。这是我在销售报告应用程序中使用的代码,用于根据销售人员的编号重写查询:

Sub rewriteAccountsBySalesRepSortSQL(lngSalesRep As Long)
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSQL As String
Dim strOriginal As String
Dim strReplacePart As String
Dim strSQLReplace As String
Dim lngLocSalesperson As Long
Dim lngLocMyRoundUp As Long
Dim lngLocParen As Long
Dim lngLocEndParen As Long

Set db = CurrentDb()
Set qdf = db.QueryDefs("qryS Accounts by Sales Rep Sorted by Diff DESC")
strSQL = qdf.SQL

lngLocSalesperson = InStr(strSQL, "Salesperson1)=")
lngLocEndParen = InStr(lngLocSalesperson + 14, strSQL, ")")
strOriginal = Mid(strSQL, lngLocSalesperson, lngLocEndParen - lngLocSalesperson)
'lngLocParen = InStrRev(strSQL, "(", lngLocSalesperson)

strReplacePart = "Salesperson1)=" & lngSalesRep

strSQLReplace = Replace(strSQL, strOriginal, strReplacePart)
qdf.SQL = strSQLReplace
End Sub

代码没有写出整个查询,而是简单地找到当前的销售代表编号并将其替换为新编号。我实际上更喜欢后一种方法。后一种方法用于直接向 MySQL 发送查询,因此与 Access 查询的语法可能略有不同。

关于vba - 编辑 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2251345/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com