[Qt-interest] Using DAO via ActiveX to manipulate MS Access database structure?

Andre Somers andre at familiesomers.nl
Thu Apr 1 17:34:34 CEST 2010


Hi,

I am trying to manipulate a MS access database's structure. 
Unfortunately, the ODBC interface has limited capabilities. For 
instance, it does not support the CREATE VIEW statement*. So, I decided 
to try to manipulate my database using ActiveX. I have managed to create 
a new database file, but I have not managed to open an existing one. I 
get a segfault inside qaxbase.cpp (line 2858, to be exact) if I try to 
operate on the QAxObject returned from the call to open the database. My 
code looks like this:

     QTextBrowser* tb = new QTextBrowser();
     tb->show();

     QAxObject *accDbE = new 
QAxObject("{00000100-0000-0010-8000-00AA006D2EA4}", this); //DAO 3.6
     QAxObject *accDb = accDbE->querySubObject("OpenDatabase(QString, 
QVariant, QVariant, QVariant)",
                                               QString("C:\\Documents 
and Settings\\andre\\Desktop\\tool\\ascor2009.mdb"),
                                               0,
                                               false,
                                               QString("") );

     if (!accDb) {
         qDebug() << "Error connecting to database, no database object 
received";
         return;
     }
     if (accDb->isNull()) {
         qDebug() << "Null wrapper returned";
         return;
     }

    //tb->setHtml( accDb->generateDocumentation() ); //This call causes 
a segfault

     params.clear();
     params << "TestQuery";
     params << "SELECT * FROM Articles";


      //this call also causes a segfault
       QAxObject *query = accDb->querySubObject("CreateQueryDef(QString, 
QString)",
                                              QString("TestQuery"),
                                              QString("SELECT * FROM 
Articles"));




Using ActiveX from Qt is uncharted terrain for me. I tried to do the 
same trick from an Excel VBA macro (open a database, and create a new 
query), and that worked just fine. Could anyone provide some pointers on 
how to do this kind of thing?

André

*) That is, it does, if you add a connection flag, but those don't come 
up as queries in Access, and that was the goal to begin with



More information about the Qt-interest-old mailing list