2016-11-13 104 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