使用C ++ builder 2010从Access打开DAO记录集

时间:2012-05-15 09:49:23

标签: c++ ms-access dao recordset c++builder-2010

由于缺乏有关在internetz上使用带有C ++的DAO的信息,我感到非常恼火。既然我有一件事需要解决,我必须对它进行一些调整,而我正在考虑跳出窗口而不是:)

我找到的唯一例子是VB6,VB.Net和VBA相关。我试图将它们应用于C ++并具有以下内容

...    
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));
...

但它只是不想工作。我首先尝试使用sql查询,然后添加了dbOpenDynaset设置并尝试其他设置。但执行只是暂停。我在想C ++中的OpenRecordset函数可能需要更多的变量,但IDE没有关于它的文档,所以我在黑暗中有点笨手笨脚。

select实际上会包含一些连接,但我将其剥离以查看是否存在问题。但是这个简单且更复杂的查询都在Access中执行。

1 个答案:

答案 0 :(得分:0)

我使用VB教程和其他一些来源中描述的一些原则来使用它。这样的事情应该有效。

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));

尽管 Access 在处理SQL语法时非常糟糕。 JOINS 需要一组奇怪的括号,但我还没能让它做 UNION :)