Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Query crashes MS Access

THE TASK: I am in the process of migrating a DB from MS Access to Maximizer. In order to do this I must take 64 tables in MS ACCESS and merge them into one. The output must be in the form of a TAB or CSV file. Which will then be imported into Maximizer.

THE PROBLEM: Access is unable to perform a query that is so complex it seems, as it crashes any time I run the query.

ALTERNATIVES: I have thought about a few alternatives, and would like to do the least time-consuming one, out of these, while also taking advantage of any opportunities to learn something new.

  1. Export each table into CSVs and import into SQLight and then make a query with it to do the same as what ACCESS fails to do (merge 64 tables).
  2. Export each table into CSVs and write a script to access each one and merge the CSVs into a single CSV.
  3. Somehow connect to the MS ACCESS DB (API), and write a script to pull data from each table and merge them into a CSV file.

QUESTION: What do you recommend?

CLARIFICATIONS:

  1. I am merging tables, not concatenating. Each table has a different structure and different data. It is a normalized CRM database. Companies->contacts->details = ~ 60 tables of details.
  2. As the Access db will be scuttled after the db is migrated, I want to spend as little time in Access as possible.
like image 718
watr Avatar asked Jul 14 '26 20:07

watr


1 Answers

I agree with FrustratedWithFormsDesigner. #2 seems the simplest method.

Here is some tested code if you decide to go that route (requires 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)
like image 189
mechanical_meat Avatar answered Jul 16 '26 09:07

mechanical_meat