【问题标题】:Open a disconnected ADO Recordset in C++在 C++ 中打开断开连接的 ADO 记录集
【发布时间】:2014-08-01 09:58:41
【问题描述】:

我正在尝试将 ADO 记录集从数据库查询克隆到断开连接的记录集中。目标是控制字段属性,以便能够修改自动增量值和计算列。

C++ 代码基于我在 Classic ASP 中使用的一个工作函数,并且克隆工作正常,直到我尝试打开新的 Recordset。然后我收到一条错误消息,说无法使用连接。 (“Die Verbindung kann nicht verwendet werden, um diesen Vorgang auszuführen。Sie ist entweder geschlossen oder in diesem Zusammenhang ungültig。”)

由于它在 VBScript 中工作,我试图在 C++ 中不带任何参数地重现简单的 VBScript 代码rs.Open

打开这个断开连接的记录集的正确语法是什么,它是在代码中创建的,没有与数据库的连接?

_RecordsetPtr DataService::CloneRecordset(_RecordsetPtr rs, bool withValues)
{
    _RecordsetPtr newRs;
    HRESULT hr = newRs.CreateInstance(__uuidof(Recordset));
    if(FAILED(hr))
        return nullptr;
    newRs->CursorLocation = adUseClient;
    try
    {
        for(long i; i < rs->Fields->Count; ++i)
        {
            FieldPtr f = rs->Fields->GetItem(i);
            long attributes = adFldIsNullable | adFldMayBeNull | adFldUpdatable;
            if(f->Attributes & adFldKeyColumn)
                attributes |= adFldKeyColumn;
            newRs->Fields->Append(f->Name, f->Type, f->DefinedSize, (FieldAttributeEnum)attributes);
        }
        if(withValues)
        {
            newRs->putref_Source(NULL);
            //Throws error
            newRs->Open(vtMissing, vtMissing, adOpenUnspecified, adLockUnspecified, adCmdUnspecified);
            CopyRecordset(rs, newRs);
            newRs->UpdateBatch(adAffectAll);
        }
        return newRs;
    }
    catch (_com_error &ce)
    {
        ShowComErrorMessageBox(ce, newRs);
    }
    catch(...)
    {
        AfxMessageBox("An unknown error has occured.");
    }
    return nullptr;
}

【问题讨论】:

    标签: c++ ado recordset


    【解决方案1】:

    当连接、源和字段均未正确定义时,将出现所描述的错误消息。上述代码中缺少变量long i的初始化。

    将其更改为 for(long i=0; i &lt; rs-&gt;Fields-&gt;Count; ++i) 使其工作,同时也取消了 newRs-&gt;putref_Source(NULL); 行的必要性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2012-04-19
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2015-11-08
      • 2011-08-04
      相关资源
      最近更新 更多