我需要使用查询从SQL server中提取数据,其中SQL server的语句存储在MS访问表中,并将数据转储到另一个表中。
共有两个表,01-MyStoredSQLs
和02-tmpTableData
问题是还有2个连接。这就是为什么我称之为混合动力车。
我的最终结果是从SQL Server到tmpTableData
的数据(查询的结果,其语句存储在MyStoredSQLs表中(
Public Sub DumpSQLServerData()
Dim conn As ADODB.Connection
On Error GoTo errMSG
Set conn = New ADODB.Connection
conn.ConnectionString = "DSN=myDSN; UID=MyID;Pwd=MyPWd"
conn.Open
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
'Retrieving the SQL Statment that is stored in the MyStoredSQLs table
Set rs = db.OpenRecordset("SELECT [Statement] FROM MyStoredSQLs WHERE ID=1")
Dim tmpSQL As String
Dim tmpINTOSQL As String
tmpSQL = rs(0)
'Hybrid statement
tmpINTOSQL = "INSERT INTO tmpTableData" & tmpSQL
conn.Execute (tmpINTOSQL), dbFailOnError
conn.Close
rs.Close
db.Close
Set conn = Nothing
Set rs = Nothing
Set db = Nothing
errMSG:
Debug.Print Err.Description
End Sub
您不能指望SQL server能够神奇地访问存储在其他地方的表。
在Access中执行查询,并使用链接表,或指定表的位置,例如
INSERT INTO tmpTableData SELECT Something FROM [ODBC;DSN=myDSN;UID=MyID;Pwd=MyPWd].Schema.TableInSQLServer
如果要在SQL server而不是Microsoft Access上执行查询,则SQL server需要能够访问Access数据库文件,并使用OPENROWSET
查询Access表。
作为替代方案,您可以创建一个直通查询,并使用它来复制表:
Dim qd As DAO.QueryDef
Set qd = db.CreateQueryDef("~tmpQuery")
qd.Connect = "ODBC;DSN=myDSN;UID=MyID;Pwd=MyPWd"
qd.ReturnsRecords = True
qd.SQL = tmpSQL
Set qd = Nothing
db.Execute "INSERT INTO tmpTable SELECT * FROM [~tmpQuery]"
db.QueryDefs.Delete "~tmpQuery"