查询崩溃MS Access

时间:2010-06-17 19:13:38

标签: python sql ms-access crm

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

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

备选方案: 我已经考虑了一些替代方案,并希望用这些方法做最少的时间,同时也利用任何机会学习新的东西。

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

    澄清:

    1. 我正在合并表,而不是连接。每个表都有不同的结构和不同的数据。它是一个标准化的CRM数据库。公司 - >联系方式 - >详细信息= ~60个详细信息表。
    2. 由于迁移数据库后Access数据库将被破坏,我希望尽可能少花时间访问Access。

4 个答案:

答案 0 :(得分:4)

我同意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)

答案 1 :(得分: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

执行每个语句

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

Tangentially,我很惊讶Maximizer仍然存在。我有一个曾经使用它的客户端,数据库结构非常不正常,就像所有其他销售软件一样,如ACT。