我的Access前端由后端的SQL Server提供支持。
我制作了一个需要用户输入的表单,根据输入它应该运行遍历查询,并且应该在子表单中显示结果。我已经在互联网上阅读了这不能通过sql命令完成,它需要将sql编码包装在VBA编码中。
我已经制作了这样的代码:
Private Sub id_AfterUpdate()
Dim MyDb As Database, MyQry As QueryDef
Set MyDb = CurrentDb()
Set MyQry = MyDb.CreateQueryDef("")
MyQry.Connect = "ODBC;DSN=mikecollections;UID=***;PWD=****;DATABASE=mikecollections;"
MyQry.SQL = "select currency.tb_coins.id,documenttype,documentsubtype,documentname" & _
"from currency.tb_coins" & _
"inner join collectibles.tb_documents on tb_coins.id=collectibles.tb_documents.prodid" & _
"where currency.tb_coins.id=[forms]![test_form]![id]"
End Sub
我在表单中的id字段中输入值后会触发此代码,但没有任何反应。我不知道如何使这段代码工作。我是SQL和VBA的新手,请帮忙!
答案 0 :(得分:1)
您在逻辑上无法引用passthru查询中的Access对象
所以你的sql应该传递控件的value
,而不是引用控件本身
如果id
是long
:
MyQry.SQL = "select currency.tb_coins.id,documenttype,documentsubtype,documentname" & _
"from currency.tb_coins" & _
"inner join collectibles.tb_documents on tb_coins.id=collectibles.tb_documents.prodid" & _
"where currency.tb_coins.id= " & [forms]![test_form]![id]
然后,您需要添加代码以将querydef
分配给recordset
,以便阅读它。类似的东西:
set rs = myQry.OpenRecordset
如果您愿意,还可以为queryDef命名。它将像任何其他查询一样可用:
Set MyQry = MyDb.CreateQueryDef("someName")
'''specify all properties here...
doCmd.OpenQuery "someName"
答案 1 :(得分:1)
我在sql server中创建了storedprocedure并在访问时创建了参数并传递到sql server并使其正常工作。感谢Hansup和iDevlop提供的所有帮助。
Private Sub userinput_AfterUpdate()
Dim qrypass As DAO.QueryDef
Dim rst As DAO.Recordset
Set qrypass = CurrentDb.QueryDefs("qu_test")
qrypass.SQL = "exec collectibles.sp_coinsvsdocuments" & " " & "@userinput" & "=" & Forms!test_form!userinput
End Sub