Search code examples
python-3.xms-accessodbcpyside6qsqltablemodel

Why does PySide6.QSql.QSqlTableModel not see one of the existing tables MS Access?


There are N tables in the DB with the following data types: Numeric, long text, date and time bigint, boolean. All of them opens, except one I'm opening a database

db = QSqlDatabase("QODBC")
db.setDatabaseName(r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\...\file.accdb")
db.open(username, password)

I output the tables contained in the db

db.tables()

Output:

["messages", "table1", "table2", ..., "tableN"]

And I'm trying to open the "messages" table

model = QSqlTableModel(db=db)
model.setTable("messages")
model.select()

Output:

False

Then I checked which other tables are not opening

for i in db.tables():
    model.setTable(i)
    if model.select() == False:
        print(i)

Output:

"messages"

This means that the problem is only in this table. But directly through MS Access the table opens

I have already tried to open it through the cycle. The keyword was found in db.tables(), but QSqlTableModel does not see the 'messages' table specifically.

I tried to change MS Access to the 2016 version. I thought, suddenly some certain type from MS Access 2019 conflicts with the old driver. It didn't help.

I was thinking of downloading a newer driver, but I didn't find one. I tried to dig into the registry... I didn't find anything either.

Please help


Solution

  • So, I figured out the problem by poking. I was initially right about the driver conflict with the bigint data type, but a few additional actions were missing.

    Apparently, when you try to set the bigint data type and save it, Access warns you that because of it, databases may not support older versions, and you save anyway, it automatically sets the minimum supported version, or what?

    Data separation helped, but before that you need to change the bigint data type to another data type. Database Tools->Move Data->Access Database.