2010-06-17 131 views
1

工作內容: 我正在將DB從MS Access遷移到Maximizer。爲了做到這一點,我必須在MS ACCESS中將64個表合併成一個。輸出必須採用TAB或CSV文件的形式。然後將其導入Maximizer。查詢崩潰MS Access

問題: Access是無法執行的查詢是如此的複雜,似乎,因爲它崩潰我運行查詢的任何時間。

選擇: 我曾經想過幾個備選方案,並願意做最少耗時一個,出來的這些,同時還服用任何機會學到新的東西。

  1. 將每個表導出到CSV並導入到SQLight中,然後使用它進行查詢以執行與ACCESS無法執行的操作相同的操作(合併64個表)。
  2. 將每個表格導出爲CSV並編寫腳本以訪問每個表格並將CSV合併到單個CSV中。
  3. 以某種方式連接到MS ACCESS DB(API),並編寫腳本以從每個表中提取數據並將它們合併到CSV文件中。

問題: 你有什麼建議?

澄清:

  1. 我合併表,而不是串聯。每個表格都有不同的結構和不同的數據。這是一個規範化的CRM數據庫。公司 - >聯繫人 - >詳細信息=〜60表格的詳細信息。
  2. 由於在數據庫遷移之後Access db將被破壞,我希望儘可能少用Access。
+1

你可以給結構(概述)和查詢? – 2010-06-17 19:14:59

+1

另一種可能性可能是從技術上弄清楚什麼是錯誤的,在MS Access DB中進行更改,然後在不崩潰數據庫的情況下運行查詢。也許它僅僅是內存不足,指標不足等 – MJB 2010-06-17 19:16:41

回答

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

如果合併相當簡單直接,並且不需要RDBMS的威力,我會推薦#2。如果合併更復雜,我會和#1一起去,你需要編寫一些實際的查詢來正確合併數據。

+1

您可以輕鬆地從命令提示符COPY X + Yž – 2010-06-17 20:07:17

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代碼每次使用不同的FROM表生成64次INSERT語句。用CurrentDb執行每條語句。執行

+0

啊合併CSV文件的問題。我不想假定表格具有相同的格式。由於OP使用「合併」而不是「連接」或「合併」,我認爲有一些參與。好的答案是,這是一個有效的假設。 – MJB 2010-06-17 21:25:30

0

我不是你想要做什麼甚至不清楚。我假設你的問題是Jet/ACE不能用那麼多的SELECT語句處理一個UNION。

如果你有64相同結構的表,你希望他們在一個CSV,我會在訪問創建臨時表,追加每個表反過來,再從臨時表導出爲CSV。這是一個簡單的解決方案,不應該很慢。唯一可能的問題可能是如果有欺騙,但如果有的話,可以從SELECT DISTINCT保存的QueryDef中導出。

切圓,我很驚訝Maximizer的仍然存在。我有一個曾經使用它的客戶,而且db結構非常不規範,就像所有其他銷售軟件一樣。

+0

我對Maximizer並不熟悉,但是你所說的聽起來像我認爲OP正在嘗試做的事情:將〜60個規範化表合併成一個巨大的非規範化表。恕我直言,一個非常糟糕的主意。即使我對MS Access的看法很低,這個* Maximizer *聽起來更糟。 – 2010-06-18 22:14:53