VBA - MS访问外部SQL Server

时间:2016-11-13 15:55:48

标签: sql-server vba ms-access

我在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?

2 个答案:

答案 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表。