【求助】记录集更新大文本字段后无法使用

辅_ 2016-09-03 10:42:38
背景:MFC下用ADO操作Oracle,数据库连接正常

strSQL = "select clob1 from tb1 where id=2";
m_Rec->Open(_variant_t(strSQL),_variant_t((IDispatch *) m_Conn,true),adOpenKeyset,adLockOptimistic,adCmdText);
m_Rec->GetFields()->GetItem("clob1")->AppendChunk(chInsert);
m_Rec->Update();
m_Rec->Close();


功能:查找到ID为2的记录,并将chinsert数组更新到clob1字段中

问题!!!!!
close之后,m_rec就无法使用了,无论是m_Rec=NULL, 或是m_Rec.Open(),执行任意一条与m_Rec相关的语句,都会卡在这条语句,无法执行!!!
注意!!!就是卡在这条代码上,根本不可能捕获异常,求助各位大神!!!
...全文
393 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
辅_ 2016-09-21
  • 打赏
  • 举报
回复
楼主最后用开源库ocilib解决了; 而且使用ocilib是在Unicode下写入才成功的,多字节环境下依然失败,所以赵四老师说的字符集问题很有可能是解决的关键。 给遇到相同问题的人参考,有时间我用ADO+Unicode+Oracle试看看
辅_ 2016-09-21
  • 打赏
  • 举报
回复
引用 10 楼 wlj1234 的回复:
m_Rec都关闭了,就让它老实待着吧 m_Rec毕竟只是个指针类,要再使用它是再建个实例吧 m_Rec.CreateInstance(__uuidof(Recordset));
这个我尝试过,依然失败,不过我已经换成ocilib并且写入成功了
辅_ 2016-09-21
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
严重怀疑是charset不匹配问题。
很有可能,因为我是多字节环境,也许Unicode下写入正常
天上的猩猩Y 2016-09-21
  • 打赏
  • 举报
回复
结帖啊...哈哈哈,我又有分了
天上的猩猩Y 2016-09-20
  • 打赏
  • 举报
回复
还不结贴????
天上的猩猩Y 2016-09-08
  • 打赏
  • 举报
回复
wlj1234 2016-09-07
  • 打赏
  • 举报
回复
m_Rec都关闭了,就让它老实待着吧 m_Rec毕竟只是个指针类,要再使用它是再建个实例吧 m_Rec.CreateInstance(__uuidof(Recordset));
辅_ 2016-09-06
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
捕获该捕获的异常。
实际代码是有try catch的运行起来没有异常
辅_ 2016-09-06
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
是不是出了异常而导致没有正常Close? 设置断点 单步执行,看看有没有执行过Close?
close是正常的,try过
赵4老师 2016-09-06
  • 打赏
  • 举报
回复
仅供参考:
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
赵4老师 2016-09-06
  • 打赏
  • 举报
回复
严重怀疑是charset不匹配问题。
赵4老师 2016-09-05
  • 打赏
  • 举报
回复
捕获该捕获的异常。
zgl7903 2016-09-05
  • 打赏
  • 举报
回复
是不是出了异常而导致没有正常Close? 设置断点 单步执行,看看有没有执行过Close?
辅_ 2016-09-05
  • 打赏
  • 举报
回复
引用 2 楼 TOP_SC 的回复:
是数据库,锁了吧?
用户和表都没有被锁
TOP3098 2016-09-04
  • 打赏
  • 举报
回复
是数据库,锁了吧?
辅_ 2016-09-03
  • 打赏
  • 举报
回复
。。。。..

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧