2017-07-31 69 views
0

我有一個SQL Server數據庫與ODBC連接。我想能夠從sqlserver導入到訪問數據庫的表。從ODBC導出表到另一個訪問文件從ODBC

我已經能夠將表導入訪問,然後將其導出到另一個訪問文件。

像這樣:

DoCmd.TransferDatabase acImport, "ODBC Database", _ 
    "ODBC connectionstring" _ 
    , acTable, "SOURCE1", "DEST1", False, True 

DoCmd.TransferDatabase acExport, "Microsoft Access", _ 
    "P:\Main-Copy.accdb" _ 
    , acTable, "DEST1", "DEST2" 

有沒有可能做一個步驟,而不是兩個?

回答

1

即使是在同一個操作查詢中連接到SQL Server數據庫和遠程Access數據庫的純SQL解決方案。以下示例假設MSSQL和MS Office安裝在相同的位版本(32/64位)上,以通過DAO進行適當的連接。

追加查詢(假設所有字段這兩個表之間對齊,否則選擇特定列)

INSERT INTO [P:\Main-Copy.accdb].DEST2 
SELECT * 
FROM [ODBC;DRIVER={SQL Server};Server=INSTANCE\myServer;database=dbName;UID=XX;PWD=***].SOURCE1; 

表查詢(假定沒有現有表存在,否則需要DROP TABLE ...

SELECT * 
INTO [P:\Main-Copy.accdb].DEST2 
FROM [ODBC;DRIVER={SQL Server};Server=INSTANCE\myServer;database=dbName;UID=XX;PWD=***].SOURCE1; 
+0

謝謝你100%是我想要的 –

0

Robert,

是否要複製數據?如果沒有,只需將表格附加到第二個數據庫(在您的示例中)一個選項?在這種情況下,數據永遠不會移入Access數據庫,而是在請求時提取(即雙擊數據庫容器中的表)。如果表格附加在第二個數據庫中,那麼您可以運行「製作表格」查詢以將數據帶到本地,這將是單步驟。

您還可以將數據從SQL Server推送到數據庫,假定SQL Server有權訪問正確的數據庫路徑。

+0

是的,我需要的數據 –

0

我有點在第一數據庫有關的方式圓

有了這個工作的這一點。哪個調用外部數據庫中的一個子對象

Set appAccess = CreateObject("Access.Application")  
appAccess.OpenCurrentDatabase "DATABASE PATH", False  
appAccess.Run "ImportTableToExternalDB", "Clients"  
Set appAccess = Nothing 

和這個方法在外部數據庫中。這不實際傳輸

Public Sub ImportTableToExternalDB(TableName As String) 

    DoCmd.TransferDatabase acImport, "ODBC Database", _ 
     "ODBC Connection String" _ 
     , acTable, TableName, TableName, False, True 

End Sub 

謝謝大家的幫助

編輯:我已經決定去與芭菲的答案,因爲它是在各方面都更簡單,更高效。

+0

這仍然感覺像兩個步驟,可能更多的開銷通過COM調用一個Access對象。 – Parfait

+0

它肯定比我想要的更圓潤,但這樣它保持I/O下降,這是我的最終目標 –

+0

再次,您將啓動一個單獨的Access對象,然後調用一個有運行時異常機會的宏,並且必須從內存釋放對象。這一切都是按照原來的步驟完成的,只需一行「DoCmd.TransferDatabase」。 – Parfait