2016-11-13 181 views
2

我有这个指令在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服务器?

回答

0

OPENDATASOURCE是T-Sql语句,在SQL Server中不是从Access中使用的,所以你会得到这个错误。

插入来自PRO表位于你可以在SQL Server数据:

在VENTAS.mdb到SQL Server表 “PRO”

或者

创建通过创建一个链接表查询到VENTAS.mdb中的Sql Server Pro表。

+0

传递查询是否会识别本地Access数据库中的表? –

+0

@Zev,是的,传递查询可以访问任何ODBC连接,包括odbc到访问数据库。在OP中,您将在VENTAS.mdb中创建传递查询到SQL服务器。 –

+0

在查询远程SQL Server中的表的同时,传递查询是否会识别**本地Access数据库**中的表? –

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