"The rowset is not bookmarkable"出错

本文介绍了一个使用ADO+Datagrid编写的程序在运行时遇到rowsetisnotbookmarkable错误的问题及解决方案。通过调整游标位置设置为客户端侧,解决了该错误并使程序能够正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用一个ADO+DATAGRID写的程序,编译正常.运行时出现"rowset is not bookmarkable",查了函数的调用和类型.都没有问题.
搜索了下.原来是游标的问题.

在ADOConn类的中GetRecordset方法中增加一句m_pRecordset->CursorLocation=adUseClient;

即:
// 执行查询
_RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
    try
    {
        // 连接数据库,如果Connection对象为空,则重新连接数据库
        if(m_pConnection==NULL)
            OnInitADOConn();
        // 创建记录集对象
        m_pRecordset.CreateInstance(__uuidof(Recordset));
       //增加这一句.
        m_pRecordset->CursorLocation=adUseClient; //游标的位置出现.不加这句会出现The rowset is not //bookmarkable运行错误

      // 取得表中的记录
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    // 捕捉异常
    catch(_com_error e)
    {
        // 显示错误信息
        AfxMessageBox(e.Description());
    }
    // 返回记录集
    return m_pRecordset;
}
调用的方法是:



BOOL CDataGridDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
//原代码省略
   
    // TODO: Add extra initialization here
//************************************************************
ADOConn m_ado;
_bstr_t vSql="select * from users";
_RecordsetPtr m_pRecordset;


m_ado.OnInitADOConn();
m_pRecordset=m_ado.GetRecordSet(vSql);

m_datagrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);//m_datagrid为DataGrid控件的变量.

//************************************************************

return TRUE;  // return TRUE  unless you set the focus to a control
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值