我的代码类似:
_ConnectionPtr pConn(__uuidof(Connection));
__RecordsetPtr pRs(__uuidof(Recordset));
IADORecordbinding *piAdo = NULL;
CTestDBRs rsTest; pConn->open(....);
pRs->open(...);
pRs->QueryInterface(...);
piAdo->BindRecord(&rsTest); strcpy(rsTest.m_szCol1 ,"test1");
strcpy(rsTest.m_szCol2 ,"test2");
piAdo->AddNew(&rsTest);
pRs->Update();
//////////////////////////////////////////////////////
以上代码为简写部分,连接等都没有错误,但问题在于,如果数据库的记录为空时,这种做法无法在记录集中增加新记录,原因提示是无法定位EOF或BOF,我想可能是光标的问题,但是没有想到解决的办法,那位有高招说来听听。在MSDN上有一个关于绑定的CONS版本,我试了一下,也不能完成,只要记录集为空就无法增加,但如果记录集中有两条以上数据均不会有问题,欢迎有经验的朋友给点建议,也希望有兴趣的一起讨论一下,我的程序到底在什么 地方出了问题,用其它方法增加我知道可以,但现在我不想讨论,请就些话题,谈谈思路。谢谢。
_ConnectionPtr pConn(__uuidof(Connection));
__RecordsetPtr pRs(__uuidof(Recordset));
IADORecordbinding *piAdo = NULL;
CTestDBRs rsTest; pConn->open(....);
pRs->open(...);
pRs->QueryInterface(...);
piAdo->BindRecord(&rsTest); strcpy(rsTest.m_szCol1 ,"test1");
strcpy(rsTest.m_szCol2 ,"test2");
piAdo->AddNew(&rsTest);
pRs->Update();
//////////////////////////////////////////////////////
以上代码为简写部分,连接等都没有错误,但问题在于,如果数据库的记录为空时,这种做法无法在记录集中增加新记录,原因提示是无法定位EOF或BOF,我想可能是光标的问题,但是没有想到解决的办法,那位有高招说来听听。在MSDN上有一个关于绑定的CONS版本,我试了一下,也不能完成,只要记录集为空就无法增加,但如果记录集中有两条以上数据均不会有问题,欢迎有经验的朋友给点建议,也希望有兴趣的一起讨论一下,我的程序到底在什么 地方出了问题,用其它方法增加我知道可以,但现在我不想讨论,请就些话题,谈谈思路。谢谢。
解决方案 »
- DataGrid控件不能显示数据 subscript out of range
- 求助!ActiveX控件安装失效!!!
- 请问怎样实现窗口的模态化!!!!
- 请指教如何用VC开发SOAP客户端程序
- 一个MFC的DLL的问题
- 遇到麻烦高手帮忙!!!
- 有谁用过大恒公司得DH-CG400得图像采集卡?
- C++中有没有像这样的用法:在一个类成员函数中有属于自己的子函数,而不是属于类的函数?内详述~
- 线程函数如何调用类中函数?
- 今天做了个试验,发现AlphaBlend的效率比DrawImage高100倍都不止!
- 我的VC,我的星星---为我有了一个星星散分(淡月儿)
- 如何实现整个文件夹的拷贝、移动、删除 等操作?
m_pRecordset->PutCollect("username",_variant_t(m_UserName));
m_pRecordset->PutCollect("old",atol(m_Old));
m_pRecordset->Update();
这样就可以,和你的机制没什么区别呀。不管原来有没有记录。学习!
这时你想调用它的方法是失败的。然而,我建议你用try{}catch{}把错误捕获后,再看看到底是什么问题。或许这样会快些。
pRs->CursorLocation = adUseClient;
piAdo->BindRecord(&rsTest);
这一句拿掉是好的吗?帮定了不会影响原来Recrodset的addnew方法的吧,还有把你open的参数都拿出来看看。
这一句是不是要用piAdo->Update(); ??
pRs->Update(); // 这里用_pRecordsetPtr的update方法。这样怕是有问题吧。
用bohut(伯虎)的方法,楼主也要考虑一下实际应用中把Cursor放在本地是否合适。