访问 VBA 查询
Posted
技术标签:
【中文标题】访问 VBA 查询【英文标题】:Access VBA Query 【发布时间】:2013-09-23 16:54:52 【问题描述】:我一直在网上搜索如何使用 VBA 和 SQL 在 Access 中运行查询并想出这个。一般的想法是,从组合框中选择的值应该运行基于 ID Selected 的查询,例如。用户选择公司表中 ID 为 5 的公司。然后用相关数据填充下面的文本框。我还有另一个包含员工数据的表,其中与使用 CompanyID 作为主键的公司表有关系,如果员工公司 id = 5,他们在这种情况下为 asda 工作。出于某种原因,在运行此查询时,我收到一条错误消息,指出可能存在评估函数的错误
Public Function DataLookup()
Dim CompDetailSQL As String
Dim rst As DAO.Recordset
Dim CompID As String
CompID = Me.lstBoxCompanyName.Value
CompDetailSQL = "SELECT Companies.CompanyID, Companies.CompanyName, Companies.AddressNo, Companies.AddressLine1, Companies.AddressLine2, Companies.AddressLine3, Companies.AddressPostcode, Companies.AddressCounty, Link_Table.FirstName, Link_Table.LastName FROM Companies INNER JOIN Link_Table ON Companies.CompanyID = Link_Table.CompanyID WHERE " = CompID
Set rst = CurrentDb.OpenRecordset(CompDetailSQL, dbOpenSnapshot)
Me.lblAddressLine1.Value = rst!Companies.AddressLine1
Me.lblAddressLine2.Value = rst!Companies.AddressLine2
Me.lblAddressLine3.Value = rst!Companies.AddressLine3
Me.lblAddressPostcode.Value = rst!Companies.AddressPostcode
Me.lblAddressCounty.Value = rst!Companies.AddressCounty
rst.Close
Set rst = Nothing
End Function
【问题讨论】:
【参考方案1】:你这里可能有问题...
CompDetailSQL = "SELECT ... WHERE " = CompID
不管它是否抛出错误,我怀疑WHERE
子句不会做你需要的。
给自己一个检查代码创建的完整 SQL 语句的机会。在CompDetailSQL = ...
之后加入这一行
Debug.Print CompDetailSQL
之后,运行代码并转到即时窗口 (Ctrl+g) 以查看输出。您可以复制语句文本,然后将其粘贴到新 Access 查询的 SQL 视图中进行测试。
当您有您需要的查询时,然后按字段名称引用记录集字段...不符合源表的名称。
'rst!Companies.AddressLine1
rst!AddressLine1
你说填充文本框。如果lblAddressLine1
真的是一个文本框,这应该可以工作......
Me.lblAddressLine1.Value = rst!AddressLine1
但是,如果lblAddressLine1
实际上是一个标签控件,请设置它的.Caption
而不是.Value
属性。
Me.lblAddressLine1.Caption = rst!AddressLine1
【讨论】:
即时窗口显示假?这意味着查询没有返回数据? 我同意 Hans 的建议,但除此之外,我认为您已经错过了 compID 列的任何内容,因此不要说“Where ComputerID =” & compID,您只需“Where =” & compID 当然!抱歉我没有早点发现。您的代码询问 VBA “SELECT ...”是否等于CompID
。但是字符串不等于那个数字,所以那个表达式的结果是False
,然后它被转换为一个文本值并存储在CompDetailSQL
中。
bamie91 是对的。修复您的代码以构建您需要的 SQL 语句。这是您必须解决的第一个问题。坚持下去,直到Debug.Print
向您显示一条 SQL 语句,当您将其作为新的 Access 查询进行测试时,该语句可以正常工作。
我已经按上述方式运行了调试器,但调试器声明为 false。玩弄了代码,并将其更改为仅对单个表执行查询,并且它完成而没有错误。错误似乎是在对两个表执行查询时。【参考方案2】:
大家好,问题解决了。 SQL 查询本身不会在访问查询设计下运行。
CompDetailSQL = "SELECT Companies.CompanyID,
Companies.CompanyName,
Companies.AddressNo,
Companies.AddressLine1,
Companies.AddressLine2,
Companies.AddressLine3,
Companies.AddressPostcode,
Companies.AddressCounty,
Link_Table.FirstName,
Link_Table.LastName
FROM Companies
INNER JOIN
Link_Table ON Companies.CompanyID = Link_Table.CompanyID
WHERE Companies.CompanyID = " & Me.lstBoxCompanyName.Value
但是上面的查询确实有效,但我似乎错过了Companies.CompanyID
问题已解决,现在又产生了一个新问题。但一个完全不同的问题。谢谢你的帮助@hansUp @bamie9l
【讨论】:
不客气 :) 我认为您可以接受自己的答案以上是关于访问 VBA 查询的主要内容,如果未能解决你的问题,请参考以下文章