首页 > 解决方案 > 从 vb 到 mfc 的 dao 属性

问题描述

我已经在 c++ 中实现了 vb 功能,我在 c++ 中替换了以下逻辑,但它给出了问题:

我必须从 VB 转换为 c++,并且 c++ 中的代码在获取属性时崩溃。

原VB代码:

For Each loTDef In aoDBUser.TableDefs

          Set loProp = Nothing
          On Error Resume Next
          Set loProp = loTDef.Properties("Description")

          If Not loProp Is Nothing Then
               If loProp.Value = TEMP_TABLE Then
               End If
          End If
     Next 

新的 C++ 代码:

CString test::Property()
{
    //
    // OVERVIEW:
    // Get the value for the given Custom Property
    //
    DAOProperties *pColProp = NULL;
    DAOProperty *pProp = NULL;

    CDaoDatabase cDBase;
    cDBase.Open(CV_GetUserDatabasePath(_T("TEST.mdb")));

    CString strDbVer;
    DAOProperties* pPrp = 0;
    DAOProperty* pRev = 0;
    try
    {
        if ( !cDBase.IsOpen() )
            return(_T(""));

        DAO_CHECK(cDBase.m_pDAODatabase->get_Properties(&pPrp));
        if ( pPrp != 0 )
        {
            COleVariant varRevVal;
            COleVariant varName(_T("Description"), VT_BSTRT);

            DAO_CHECK(pPrp->get_Item(varName, &pRev));//crashing going to catch 

            if (pRev != 0)
            {
                DAO_CHECK(pRev->get_Value(&varRevVal));
                pRev->Release();
                pRev = 0;
            }
            pPrp->Release();
            pPrp = 0;

            strDbVer = V_BSTRT(&varRevVal);
        }
    }
    catch (...)
    {

    }

    cDBase.Close();
}

一些它是如何崩溃的 DAO_CHECK(pPrp->get_Item(varName, &pRev));

但我无法弄清楚为什么会发生这种情况。

标签: mfcvb6adodao

解决方案


推荐阅读