我在VBA中尝试将数据从外部SQL Server数据库导入本地MS Access DB时遇到问题:
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
错误
&#34; FROM clases&#34;
中的语法错误
似乎我无法从Access中使用OPENDATASOUCE
到SQL Server?
答案 0 :(得分:1)
您需要撤消查询引用。 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
答案 1 :(得分:0)
OPENDATASOURCE是T-Sql语句,在SQL Server中使用而不是从Access中使用,因此您会收到此错误。
要从位于sql server中的PRO表插入数据,您可以:
在VENTAS.mdb中创建一个链接表到Sql server表&#34; PRO&#34;
或
在VENTAS.mdb中创建传递查询到Sql Server Pro表。