任务: 我正在将数据库从MS Access迁移到Maximizer。为了做到这一点,我必须在MS ACCESS中使用64个表并将它们合并为一个。输出必须采用TAB或CSV文件的形式。然后将导入Maximizer。
问题: Access无法执行看起来如此复杂的查询,因为它在我运行查询时崩溃。
备选方案: 我已经考虑了一些替代方案,并希望用这些方法做最少的时间,同时也利用任何机会学习新的东西。
问题: 你推荐什么?
澄清:
答案 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。