2017-08-08 115 views
0

問題:進口部分表從遠程數據庫到本地Microsoft Access數據庫

我試圖導入從遠程的Informix數據庫表的部分到Access 2016數據庫。要部分導入的表包含帳戶信息,並且大於2 GB(據我所知它是訪問數據庫的最大大小)。

我只需要過去一年的信息,遠遠少於2 GB,但必須在每天結束時更新信息。

兩個解決方案,我已經在網上看到有:

(A)鏈接表:

我不願意做有兩個原因如下:

1)我不知道每次訪問數據庫的最終用戶運行報表時,都希望在服務器上安裝額外的負載。

2)我不想在訪問數據庫進行任何更改,結轉到現場的Informix DB(這絕對是cruical)

(B)通過訪問GUI,在整個表複製

我不認爲這是由於以下原因,一個可行的解決方案:

1)該表是超過2GB

2)報告必須在表上每天可以跑了每日更新信息。這需要每天將整個informix表拉入存取狀態。

工作至今:

我已經通過創建爲Informix數據庫一個DSN succefully連接到Informix數據庫從接入。

我也成功地通過VBA導入一個較小的表從Informix服務器用下面的代碼:

DoCmd.TransferDatabase acImport, "ODBC Database", "ODBC;DSN=My_DSN_Name;UID=odbc;PWD=My_PWD;LANGUAGE=us_english;" & "DATABASE = My_DB_Name", acTable, "My_Destination_Tbl_Name", "TestTableImport", False, True 

我的理想的解決方案將看到Access數據庫機的終端用戶一個按鈕,更新本地接入副本的數據庫,以及自上次更新以來對informix數據庫所做的所有更改。

我對訪問和VBA的經驗有限,所以我真的很感謝任何關於如何進行的指針。也許我忽略了一些簡單的東西?

感謝您的閱讀,你可以提供什麼建議,

約翰

回答

0

Ummmm ....表中的假設數據是靜態的,你可以做(​​列數據,只是新行沒有更新)就像在Access中導入任何需要的數據子集一樣,然後每次單擊按鈕時都會運行一個宏來檢查訪問表中最新的行。 使用該信息僅從ODBC源中選擇新行並將它們插入訪問表中。

我想這與Access 2013:

Sub test() 
    Dim cnDB As New ADODB.Connection 
    Dim rsRecords As New ADODB.Recordset 

    ' find last row 

    Set db = CurrentDb 
    strSQL = "SELECT TOP 1 empno As lastemp FROM informix_employee ORDER BY empno DESC" 
    Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot) 
    lastemp = rs("lastemp") 
    rs.Close 

    ' get new rows from odbc source 
    DoCmd.SetWarnings False 
    cnDB.Open "DSN=ids1210;uid=informix;pwd=password" 
    rsRecords.Open "Select * from employee where empno>" & lastemp, cnDB 
    Do While Not rsRecords.EOF 
     strNaam = rsRecords.Fields(0).Value 
     rsRecords.MoveNext 

     ' update access table 
     DoCmd.RunSQL ("insert into informix_employee (empno) values ('" + strNaam + "')") 
    Loop 

    rsRecords.Close 
    Set rsRecords = Nothing 
    cnDB.Close 
    Set cnDB = Nothing 
    db.Close 

End Sub 

這是一個基本的例子,但應該給你如何做到這一點的想法。 上面的代碼每行只插入一列(empno),您將需要通過您的表並執行插入所有列(基本上爲您創建插入.............語句表)

'informix_employee'是Access表。

'employee'是Informix表。

此外,您需要引用ADO,例如, 'Microsoft ActiveX Data Objects 6.1'讓它工作,否則它會失敗,因爲ADODB對象不會在那裏。因爲什麼都沒有(IDS/ODBC/Access)能夠告訴你哪些行被更新而沒有獲得數據並且比較它們將會是相當困難的,如果Informix表沒有得到一些列更新(不僅僅是新行)它與以前的設置。

+0

非常感謝您的幫助。 –

相關問題