如何使用混合连接将数据从SQL Server转储到MS Access表中



我需要使用查询从SQL server中提取数据,其中SQL server的语句存储在MS访问表中,并将数据转储到另一个表中。

共有两个表,01-MyStoredSQLs02-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"

最新更新