Mik*_*ike 9 sql-server ms-access vba access-vba
我们最近创建了Access数据库后端并将其迁移到SQL Server.我正在尝试使用VBA代码创建与SQL Server后端的连接,并运行存储在VB记录集中的结果的直通查询.当我尝试这个时,查询不会通过.
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strConnect As String
strConnect = "DRIVER=SQL Server;SERVER=55.55.55.55 SQLExpress;UID=UserName;PWD=Password"
Set db = OpenDatabase("DBName", dbDriverNoPrompt, True, strConnect)
Set rs = db.OpenRecordset("SELECT GetDate() AS qryTest", dbOpenDynaset)
MsgBox rs!qryTest
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
Run Code Online (Sandbox Code Playgroud)
我得到的问题是完全合适的GetDate()SQL Server函数返回运行时错误3085"表达式中的用户定义函数'GetDate'".如果我在MS-Access查询生成器中创建相同的查询作为直通,在VBA代码之外,它运行正常并返回服务器日期和时间,只在代码中它没有正确通过.
Gor*_*son 19
您需要使用QueryDef对象来创建Pass-Through查询,然后通过.OpenRecordsetQueryDef 的方法打开Recordset .以下代码适用于我:
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;Driver=SQL Server;Server=.\SQLEXPRESS;Trusted_Connection=Yes;"
qdf.SQL = "SELECT GetDate() AS qryTest"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset
Debug.Print rst!qryTest
rst.Close
Set rst = Nothing
Set qdf = Nothing
Run Code Online (Sandbox Code Playgroud)