Question

I'm getting quite annoyed by the lack of information about using DAO with C++ on the internetz. Since I have a thing to fix I have to fiddle a bit with it and I'm thinking of jumping out the windows instead :)

The only examples I find are VB6, VB.Net and VBA related. I have tried to apply them to C++ and have the following thing

...    
WideString sqlQuery = WideString(
                "SELECT * "\
                "FROM NODES "\
                "WHERE ID = " + IntToStr(NODE_ID));

        Dao_2k::RecordsetPtr pNewRecord;
        pNewRecord = m_dbDatabase->OpenRecordset(sqlQuery.c_bstr(), OleVariant(RecordsetTypeEnum::dbOpenDynaset));
...

But it just doesn't not want to work. I first tried with just the sql query, then I added the dbOpenDynaset setting and trying others. But execution just halts. I'm thinking there might be more variables needed to the OpenRecordset function in C++ but the IDE have no documentation about it so I'm kinda fumbling in the dark.

The select will actually contain a few joins but I stripped it down to see if that was the issue. But both this simple and the more complex query executes within Access.

Was it helpful?

Solution

I got it to work using a bit of the principles described in VB tutorials and some other sources. Something like this should work.

WideString sqlQuery = WideString(
            "SELECT * FROM NODES "\
            "WHERE ID = " + IntToStr(NODE_ID));

Dao_2k::RecordsetPtr pRecord;
pRecord = m_dbDatabase->OpenRecordset(sqlQuery.c_bstr(), OleVariant(RecordsetTypeEnum::dbOpenDynaset));

Dao_2k::FieldsPtr fs;
fs = pEntryRecord->get_Fields();

Dao_2k::FieldPtr nodeIdField;
nodeIdField = fs->get_Item(OleVariant(0));

Not though that Access is horrible at handleing SQL syntax. JOINS require a strange set of parentheses and I haven't been able to make it do a UNION yet :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top