繁体   English   中英

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

[英]How to dump data from SQL Server into MS Access table using hybrid connections

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

有 2 个表, 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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM