2017-08-08 8 views
0

問題:インポート部分テーブル

私がアクセス2016データベースにリモートのInformix DBからテーブルの部分をインポートしようとしています。部分的にインポートされるテーブルにはアカウント情報が含まれていますが、> 2 GBです(これはアクセスデータベースの最大サイズです)。

昨年の情報は2GB未満である必要がありますが、情報は毎日の最後に更新する必要があります。私がオンラインに見てきた

つの解決策は以下のとおりです。

(A)のリンクテーブル:私は二つの理由のためにこれを行うには消極的だ

1)私にはありませんアクセスDBのエンドユーザーがレポートを実行するたびに、サーバーに追加の負荷がかかるようにします。

2)私は、これは)絶対にcruicalである(ライブのInformix DBに繰り越すために、アクセスDBで行われるすべての変更をしたくない

(B)のアクセスGUIを経由して、テーブル全体をコピー

私は、これは次の理由のために実行可能な解決策だとは思わない:

1)テーブルが2GB

2以上である)のレポートは毎日更新して、日常のテーブル上で実行する必要があります情報。これは、informix表全体を毎日アクセスに引き込む必要があります。これまでのところ

仕事:

私はsuccefullyのInformix DB用のDSNを作成経由でのアクセスからInformixのDBに接続されています。

私もsucessfully次のコードで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 

私の理想的なソリューションは、アクセスDBプレスのエンドユーザーローカルアクセスコピーを更新ボタンが表示されます最後の更新以降、informix dbに加えられたすべての変更が加えられました。

私はアクセスとVBAでの経験が限られているので、どのように進むべきかについての指針を本当に感謝しています。おそらく私は何かを見落としてしまったでしょうか?読書とあなたが提供することができます任意のアドバイスを

おかげで、

ジョン

答えて

0

Ummmm ....テーブル内のデータを仮定すると、あなたが行うことができます(列のデータ、ちょうど新しい行にノー更新)静的ですAccessに必要なデータのサブセットをインポートし、ボタンをクリックするたびにマクロを実行して、アクセステーブルの最新の行が何であるかを確認するようなものです。 この情報を使用して、ODBCソースから新しい行のみを選択し、アクセステーブルに挿入します。

私はアクセス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)ごとに1つの列しか挿入しないため、テーブルを通過してすべての列を挿入する必要があります(基本的にinsert .............ステートメントを作成しますテーブル)

'informix_employee'はAccessテーブルです。

'employee'はInformixテーブルです。

また、ADOを参照する必要があります。 'Microsoft ActiveX Data Objects 6.1'が動作するようにしてください。それ以外の場合はADODBオブジェクトが存在しないため失敗します。

Informixテーブルが新しい行だけでなく一部の列の更新を取得した場合、データを取得せずに更新された行を何も知らない(IDS/ODBC/Access)ことができないため、以前のセットと同じです。

+0

ありがとうございました。 –

関連する問題