Query crashes MS Access

前端 未结 4 1368
你的背包
你的背包 2021-01-22 02:39

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

相关标签:
4条回答
  • 2021-01-22 03:16

    I would recommend #2 if the merge is fairly simple and straightforward, and doesn't need the power of an RDBMS. I'd go with #1 if the merge is more complex and you will need to write some actual queries to get the data merged properly.

    0 讨论(0)
  • 2021-01-22 03:22

    I'm not even clear on what you're trying to do. I assume your problem is that Jet/ACE can't handle a UNION with that many SELECT statements.

    If you have 64 identically-structured tables and you want them in a single CSV, I'd create a temp table in Access, append each table in turn, then export from the temp table to CSV. This is a simple solution and shouldn't be slow, either. The only possible issue might be if there are dupes, but if there are, you can export from a SELECT DISTINCT saved QueryDef.

    Tangentially, I'm surprised Maximizer still exists. I had a client who used to use it, and the db structure was terribly unnormalized, just like all the other sales software like ACT.

    0 讨论(0)
  • 2021-01-22 03:25

    Since you want to merge 64 tables, may we assume those tables all have the same structure?

    If so, create a new empty table with matching structure, then append the rows from each of those 64 tables into the new merge master table. Then export the merge master table as a single CSV file.

    The merge operation should not have to be a single complex query.

    INSERT INTO tblMergeMaster(
        some_field,
        another_field,
        yet_another)
    SELECT
        some_field,
        another_field,
        yet_another
    FROM
        tbl_1_of_64;
    

    You can build the INSERT statement 64 times with VBA code, with a different FROM table each time. And execute each statement with CurrentDb.Execute

    0 讨论(0)
  • 2021-01-22 03:41

    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)
    
    0 讨论(0)
提交回复
热议问题