【问题标题】:Query crashes MS Access查询使 MS Access 崩溃
【发布时间】:2011-03-05 03:17:21
【问题描述】:

任务: 我正在将数据库从 MS Access 迁移到 Maximizer。为了做到这一点,我必须在 MS ACCESS 中获取 64 个表并将它们合并为一个。输出必须采用 TAB 或 CSV 文件的形式。然后将其导入 Maximizer。

问题: Access 无法执行看起来如此复杂的查询,因为它在我运行查询时崩溃。

替代方案: 我已经考虑了一些替代方案,并希望在其中做一个耗时最少的替代方案,同时也利用任何机会学习新东西。

  1. 将每个表导出为 CSV 并导入 SQLight,然后使用它进行查询以执行 ACCESS 无法执行的操作(合并 64 个表)。
  2. 将每个表导出为 CSV 并编写一个脚本来访问每个表并将 CSV 合并为一个 CSV。
  3. 以某种方式连接到 MS ACCESS DB (API),并编写脚本以从每个表中提取数据并将它们合并到 CSV 文件中。

问题: 你有什么推荐的?

澄清:

  1. 我正在合并表,而不是连接。每个表都有不同的结构和不同的数据。它是一个规范化的 CRM 数据库。 Companies->contacts->details = ~ 60 个详细信息表。
  2. 由于Access db在迁移后会被破坏,因此我希望尽可能少地在Access中花费时间。

【问题讨论】:

  • 能否给出结构(概述)和查询?
  • 另一种可能性可能是从技术上找出问题所在,在 MS Access DB 中进行更改,然后运行查询而不会使数据库崩溃。也许只是内存不足、索引不足等问题。

标签: python sql ms-access crm


【解决方案1】:

我同意 FrustratedWithFormsDesigner 的观点。 #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】:

    既然要合并 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 执行每个语句

    【讨论】:

    • 啊。我不想假设表格具有相同的格式。由于 OP 使用“合并”而不是“连接”或“组合”,我认为其中涉及到一些连接。好的答案是这是一个有效的假设。
    【解决方案3】:

    如果合并相当简单明了,并且不需要 RDBMS 的强大功能,我会推荐 #2。如果合并更复杂,我会选择 #1,并且您需要编写一些实际查询来正确合并数据。

    【讨论】:

    • 您可以从命令提示符 COPY x + y z 轻松合并 CSV 文件
    【解决方案4】:

    我什至不清楚您要做什么。我假设您的问题是 Jet/ACE 无法处理具有那么多 SELECT 语句的 UNION。

    如果您有 64 个结构相同的表,并且希望它们在单个 CSV 中,我会在 Access 中创建一个临时表,依次附加每个表,然后从临时表导出到 CSV。这是一个简单的解决方案,也不应该很慢。唯一可能的问题可能是是否存在欺骗,但如果存在,您可以从 SELECT DISTINCT 保存的 QueryDef 中导出。

    相对而言,我很惊讶 Maximizer 仍然存在。我有一个客户曾经使用过它,而 db 结构非常不规范,就像 ACT 等所有其他销售软件一样。

    【讨论】:

    • 我不熟悉 Maximizer,但你所说的听起来确实像我认为 OP 正在尝试做的事情:将约 60 个规范化表合并到一个巨大的非规范化表中。恕我直言,这是一个非常糟糕的主意。尽管我对 MS Access 的评价很低,但这个 Maximizer 听起来更糟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多