VBA - MS访问外部SQL服务器
问题描述:
我有这个指令在VBA,试图从外部SQL Server数据库导入数据到本地的MS Access数据库的一个问题:VBA - MS访问外部SQL服务器
Conectar = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\VENTAS\VENTAS.mdb;" _
& "Persist Security Info=False;"
cn.ConnectionString = Conectar
cn.Open
SQL= "insert into PRO (COD_PRO,DESC_PRO) " & _
"select COD_ARTICU,DESCRIPCIO " & _
"FROM OPENDATASOURCE ('SQLNCLI', 'Data Source=VAIO\SQLEXPRESS;User" & _
"ID=XXX;Password=XXX;').ACPE.dbo.STA11 where perfil<>'N';"
cn.Execute Sql
错误
“在FROM clases语法错误”
看来,我不能用OPENDATASOUCE
从访问的SQL服务器?
答
OPENDATASOURCE是T-Sql语句,在SQL Server中不是从Access中使用的,所以你会得到这个错误。
插入来自PRO表位于你可以在SQL Server数据:
在VENTAS.mdb到SQL Server表 “PRO”
或者
创建通过创建一个链接表查询到VENTAS.mdb中的Sql Server Pro表。
答
您需要反转查询参考。 OPENDATASOURCE
是SQL Server TSQL命令,不是MS Access SQL命令。考虑运行存储查询的ODBC在线:
SQL(保存为存储的查询或脚本VBA字符串)
INSERT INTO PRO (COD_PRO, DESC_PRO)
SELECT COD_ARTICU, DESCRIPCIO
FROM [ODBC;DRIVER={SQL Server};server=VAIO\SQLEXPRESS;database=ACPE;UID=XX;PWD=XXXX].STA11;
VBA
DoCmd.OpenQuery "queryName"
' OR CurrentDb.Execute strSQL
或者,创建一个链接表,然后运行追加查询作为链接表可以与本地表进行交互:
DoCmd.TransferDatabase acLink, "ODBC Database", _
"ODBC;DRIVER={SQL Server};server=VAIO\SQLEXPRESS;database=ACPE;UID=XX;PWD=XXXX;", _
acTable, "STA11", "STA11"
strSQL = "INSERT INTO PRO (COD_PRO, DESC_PRO)
SELECT COD_ARTICU, DESCRIPCIO
FROM STA11;"
CurrentDb.Execute strSQL
传递查询是否会识别本地Access数据库中的表? –
@Zev,是的,传递查询可以访问任何ODBC连接,包括odbc到访问数据库。在OP中,您将在VENTAS.mdb中创建传递查询到SQL服务器。 –
在查询远程SQL Server中的表的同时,传递查询是否会识别**本地Access数据库**中的表? –