通过访问表单

时间:2016-05-02 12:49:24

标签: sql sql-server ms-access access-vba

我的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的新手,请帮忙!

2 个答案:

答案 0 :(得分:1)

您在逻辑上无法引用passthru查询中的Access对象 所以你的sql应该传递控件的value,而不是引用控件本身 如果idlong

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