代码之家  ›  专栏  ›  技术社区  ›  watr

查询MS Access

  •  1
  • watr  · 技术社区  · 14 年前

    任务:

    问题是: Access无法执行一个看起来如此复杂的查询,因为每当我运行查询时它都会崩溃。

    我已经考虑了一些替代方案,并想做最省时的一个,在这些,同时也利用任何机会学习新的东西。

    1. 将每个表导出到csv并导入SQLight,然后使用它进行查询,以执行与ACCESS失败的操作相同的操作(合并64个表)。
    2. 将每个表导出到CSV中,编写一个脚本来访问每个表,并将CSV合并到单个CSV中。

    问题: 你推荐什么?

    澄清:

    1. 我正在合并表,而不是连接。每个表都有不同的结构和不同的数据。它是一个标准化的CRM数据库。公司->联系人->细节=~60张细节表。
    2. 由于数据库迁移后Access数据库将被破坏,所以我希望在Access上花费尽可能少的时间。
    4 回复  |  直到 14 年前
        1
  •  5
  •   iimos    9 年前

    我同意我的意见#2似乎是最简单的方法。

    下面是一些测试代码,如果你决定走这条路(需要 pyodbc

    import csv
    import pyodbc
    
    MDB = 'c:/path/to/my.mdb'
    DRV = '{Microsoft Access Driver (*.mdb)}'
    PWD = 'mypassword'
    
    conn = pyodbc.connect('DRIVER=%s;DBQ=%s;PWD=%s' % (DRV,MDB,PWD))
    curs = conn.cursor()
    
    SQL = 'SELECT * FROM mytable;' # insert your query here
    curs.execute(SQL)
    
    rows = curs.fetchall()
    
    curs.close()
    conn.close()
    
    # you could change the 'w' to 'a' for subsequent queries
    csv_writer = csv.writer(open('mytable.csv', 'w'), lineterminator='\n')
    
    for row in rows:
        csv_writer.writerow(row)
    
        2
  •  2
  •   HansUp    14 年前

    既然您要合并64个表,我们可以假设这些表都具有相同的结构吗?

    如果是这样,请创建一个具有匹配结构的新空表,然后将这64个表中的每一个表中的行追加到新的合并主表中。然后将合并主表导出为单个CSV文件。

    INSERT INTO tblMergeMaster(
        some_field,
        another_field,
        yet_another)
    SELECT
        some_field,
        another_field,
        yet_another
    FROM
        tbl_1_of_64;
    

    您可以使用VBA代码生成INSERT语句64次,每次使用不同的FROM表。并用CurrentDb.execute执行每个语句

        3
  •  1
  •   FrustratedWithFormsDesigner    14 年前

    如果合并相当简单和直接,并且不需要RDBMS的强大功能,我建议使用#2。如果合并更复杂,您需要编写一些实际的查询来正确合并数据,那么我会选择#1。

        4
  •  0
  •   David-W-Fenton    14 年前

    我都不清楚你想干什么。我假设您的问题是Jet/ACE无法处理包含那么多SELECT语句的联合。

    切而言,我很惊讶最大化仍然存在。我有一个客户曾经使用过它,数据库结构非常不规范,就像其他销售软件一样,比如ACT。