Forms 在ms access 2007 vba中运行select query并将结果值分配给文本框

Forms 在ms access 2007 vba中运行select query并将结果值分配给文本框,forms,sql-server-2005,ms-access,vba,ms-access-2007,Forms,Sql Server 2005,Ms Access,Vba,Ms Access 2007,我需要运行一个sql查询,结果值被分配给表单中的一个文本框。 我正在使用docmd.runsql运行此查询 Private Sub Form_Current() Dim SQL As String Dim db As Database Dim rs As DAO.Recordset If IsNull(Me.txtInstalledQuantity) Then SQL = "select count(tblequipmentbase.id)AS CountInstalledQuantity F

我需要运行一个sql查询,结果值被分配给表单中的一个文本框。 我正在使用docmd.runsql运行此查询

Private Sub Form_Current()
Dim SQL As String
Dim db As Database
Dim rs As DAO.Recordset

If IsNull(Me.txtInstalledQuantity) Then
SQL = "select count(tblequipmentbase.id)AS CountInstalledQuantity FROM (tblequipmentbase INNER JOIN     tblequipmentparts ON tblequipmentbase.id=tblequipmentparts.idconnect) INNER JOIN tblparts ON tblequipmentparts.idpart=tblparts.id where tblparts.id= " & txtQueryID.Value & ";"
Set db = CurrentDb
Set rs = db.OpenRecordset(SQL)
DoCmd.RunSQL SQL
Me.txtInstalledQuantity = rs!CountInstalledQuantity
Set rs = Nothing
Set db = Nothing
End If
End Sub

错误在runsql命令中。

我建议您创建一个查询,我们称之为设备:

 SELECT eb.id 
 FROM (tblequipmentbase eb
 INNER JOIN tblequipmentparts ep
 ON eb.id=ep.idconnect) 
 INNER JOIN tblparts p
 ON ep.idpart=p.id 
然后可以通过多种方式使用此查询,例如,可以将textbox控件源设置为:

= DCount("eb.id","Equipment","p.ID=" & txtQueryID)
更多信息:


我建议您创建一个查询,我们称之为设备:

 SELECT eb.id 
 FROM (tblequipmentbase eb
 INNER JOIN tblequipmentparts ep
 ON eb.id=ep.idconnect) 
 INNER JOIN tblparts p
 ON ep.idpart=p.id 
然后可以通过多种方式使用此查询,例如,可以将textbox控件源设置为:

= DCount("eb.id","Equipment","p.ID=" & txtQueryID)
更多信息:

试试这个:

Set db = CurrentDb
Set rs = db.OpenRecordset(SQL)
Me.txtInstalledQuantity = rs.Fields("CountInstalledQuantity").Value
试试这个:

Set db = CurrentDb
Set rs = db.OpenRecordset(SQL)
Me.txtInstalledQuantity = rs.Fields("CountInstalledQuantity").Value


不太清楚为什么要执行RunSQL()调用?从.OpenRecordset命令中,您应该已经拥有了所需的数据。即使我删除了Docmd.RunSQL,它也不起作用。不太清楚为什么要执行RunSQL()调用?从.OpenRecordset命令中,您应该已经拥有了所需的数据。即使我删除了Docmd.RunSQL,它也不起作用。我无法在控制源中使用表达式,因为此文本框是可编辑的。用户可以输入数据,然后将其保存在数据库中。首先,创建查询并检查其是否有效,接下来,确保Me.txtQueryID有一个值。最好说什么是不工作的、错误消息等。txtQueryID是一个标签,而不是一个文本框吗?因为如果是,则需要标题才能获取内容。txtQueryID是一个文本框。我不能传递一个变量而不是文本框值吗?是的,可以,但您遇到了问题,只引用文本框更简单。您可以添加断点并检查字符串s以确保其正确,您还可以使用debug.print打印到即时窗口,并在查询设计窗口中测试字符串,以确保返回记录。我无法在控制源中使用表达式,因为此文本框是可编辑的。用户可以输入数据,然后将其保存在数据库中。首先,创建查询并检查其是否有效,接下来,确保Me.txtQueryID有一个值。最好说什么是不工作的、错误消息等。txtQueryID是一个标签,而不是一个文本框吗?因为如果是,则需要标题才能获取内容。txtQueryID是一个文本框。我不能传递一个变量而不是文本框值吗?是的,可以,但您遇到了问题,只引用文本框更简单。您可以添加断点并检查字符串以确保其正确性,也可以使用debug.print打印即时窗口,并在查询设计窗口中测试字符串以确保返回记录。我从未发现有必要在记录集中包含引用字段的值。rs!fieldname是常用的。完全同意Remou。我总是喜欢显式,尤其是在处理.Value之类的默认属性时。我想这取决于你的风格/代码标准属于子窗体。txtQueryID是同一窗体上的文本框,但其值来自mainform。我创建了一个公共变量以从mainform获取此值,并将其分配给一个公共函数,该函数返回一个字符串。如果我删除form_Current()中的代码,此代码将正常工作子窗体的。即使子窗体在mainform之前加载,它也应至少从mainform获取值。此外,如果我给出的是直接值而不是&Me.txtQueryID,则它会工作。我不明白为什么放在一起什么都不起作用。我从未发现有必要在记录集中包含引用字段的值。rs!fieldname是常用的。完全同意Remou。我总是喜欢显式,尤其是在处理.Value之类的默认属性时。我想这取决于你的风格/代码标准属于子窗体。txtQueryID是同一窗体上的文本框,但其值来自mainform。我创建了一个公共变量以从mainform获取此值,并将其分配给一个公共函数,该函数返回一个字符串。如果我删除form_Current()中的代码,此代码将正常工作子窗体的。即使子窗体在mainform之前加载,它也应至少从mainform获取值。此外,如果我给出的是直接值而不是&Me.txtQueryID,则它会工作。我不明白为什么放在一起什么都不管用。