代码之家  ›  专栏  ›  技术社区  ›  Mr. Trooper

将部分表从远程数据库导入本地microsoft access数据库

  •  0
  • Mr. Trooper  · 技术社区  · 7 年前

    问题:

    将表从远程informix db导入access 2016数据库。要部分导入的表包含帐户信息,并且为>2 GB(据我所知,这是访问数据库的最大大小)。

    我只需要去年的信息,这是远远低于2 GB,但信息必须在每天结束时更新。

    1) 我不希望每次access db的最终用户运行报告时都在服务器上施加额外的负载。

    (B) 通过access GUI复制整个表

    1) 桌子超过2GB

    迄今为止的工作:

    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 db的最终用户按下一个按钮,使用自上次更新以来对informix db所做的所有更改来更新db的本地访问副本。

    我在access和VBA方面的经验有限,因此如果能给我一些建议,我将不胜感激。也许我忽略了一些简单的事情?

    感谢您的阅读和提供的任何建议,

    1 回复  |  直到 7 年前
        1
  •  0
  •   jsagrera    7 年前

    嗯……假设表中的数据是静态的(不更新列数据,只更新新行),您可以执行一些操作,例如导入Access中需要的任何数据子集,然后每次单击按钮时运行宏以检查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
    

    “informix_employee”是访问表。

    “employee”是Informix表。

    如果Informix表确实得到了一些列更新(不仅仅是新行),这将是相当困难的,因为任何东西(ID/ODBC/Access)都无法告诉您哪些行被更新了,而不需要获取数据并将其与之前的集进行比较。