代码之家  ›  专栏  ›  技术社区  ›  Andrew Scagnelli

将电子表格中的行与数据库中的记录进行比较

  •  2
  • Andrew Scagnelli  · 技术社区  · 16 年前

    我有一个Excel电子表格作为报告提供,当它实际上更多的是一个数据库时,行数作为主键。我需要将此集合中的一些列与来自Access2007数据库的另一组记录进行比较。为了使事情变得更复杂,这需要在没有用户输入的情况下,按照常规的时间表自动完成。

    从电子表格中获取数据的最佳方法是什么?运行比较的最佳方法是什么?至于从电子表格中获取数据,Acedao似乎是最佳选择,因为这是Excel2007,但我无法找到有关如何使用DAO/Acedao查询Excel的信息,只能使用DAO/Acedao导出到Excel。至于运行比较,除了比较每个条目的每一列之外,我无法找到更好的方法来进行比较。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Robert Harvey    16 年前

    如果内存可用,可以创建一个链接到Excel电子表格的表。一旦链接到Access,就可以像对待其他表一样对待它。

    进行比较的查询如下所示(请参见下图)。它将返回Excel电子表格中不匹配的行(右键单击图片并将其保存到计算机上,以便更清晰地查看)。

    就自动化而言,如果您愿意保留一个正在运行的访问副本,则可以 set up a Timer in a form . 如果没有,你必须使用 Office Automation . 有关“你好,世界”的示例,请参见这里的c:
    http://rnarayana.blogspot.com/2008/02/access-2007-office-automation-using-c.html

    alt text http://i42.tinypic.com/kalk0k.jpg

        2
  •  1
  •   onedaywhen    16 年前

    使用ace,您可以直接查询工作簿,例如

    SELECT S1.seq AS seq_ACE, 
           S2.seq AS seq_Excel
      FROM Sequence AS S1
           LEFT OUTER JOIN [Excel 12.0;Database=C:\Test.xlsx;].Sequence AS S2
              ON S1.seq = S2.seq;
    
        3
  •  1
  •   barrowc    16 年前

    如果Excel工作表结构为列表,则 ADO 可能是去的路-更多信息 here


    编辑 :这里有几种不同的方法

    • 使用Excel中的ADO从Access数据库中读取,并使用VBA将返回的值与Excel工作表进行比较。可能只对相对较小的记录集上的简单比较有用

    • 如Robert Harvey的回答中所述,将Excel工作表设置为Access数据库中的链接表,并使用Access本身进行SQL查询。

    • 使用ADO和ADOX使Excel工作表成为Access数据库中的链接表,并使用Excel中的ADO使用SQL进行查询。

    我没有意识到DAO重新使用了Access2007。由于我使用Excel连接到数据库,DAO已被弃用多年(ADO是首选的连接方法)。我现在更清楚了

        4
  •  0
  •   JohnFx    15 年前

    我知道我会为此而受到抨击,因为它不是非常“程序员Y”,但是如果这是一次性的,并且结果访问表只是一些查询的数据的临时工作副本,那么您可以直接将数据复制/粘贴到数据表视图中的表中。

    这是一个快速,肮脏,没有浮华的方式来做它,但它工作,需要很少的额外工作。

    注意:如果表非常大或者其他人正在使用它,您可能不想这样做。它可能很慢,并且会引入很多锁。