求助:关于AddNew()的问题 fj_jiangqi2004-06-07 04:58:39 _ConnectionPtr pCn; _RecordsetPtr pRs; char szSqlbuff[100]="select * from test_table"; try{ pCn.CreateInstance(_uuidof(Connection)); pRs.CreateInstance(_uuidof(Recordset)); pCn->Open(myadoCONNECTIONSTRING,myadoUSER,myadoPASSWORD,adModeUnknown); pRs->Open(szSqlbuff,_variant_t((IDispatch*)pCn,true),adOpenStatic,adLockOptimistic,adCmdText); pRs->AddNew(); //运行到此出错,错误提示:对象或提供者不能提供所需的操作 .... }catch(_com_error &e){ MessageBox(NULL,(TCHAR *)e.Description(),TEXT("error!"),MB_OK); } 数据库用的是oracle8i,ado为1.5,数据库连接正常,读取数据正常,用_CommandPtr.Execute执行sql语句写入数据正常。由于写入的字段和数 据都比较多,所以想用AddNew()来添加数据,用put_Collect()写入数据。可总不能成功,无奈之中,有请高人指点迷津。先谢谢了。 30518点赞打赏收藏 分享举报 写回复 18 条回复 切换为时间正序 当前发帖距今超过3年,不再开放新的回复发表回复 gooyan 2004-09-161.stdafx.h中加入 #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 2。app文件的InitInstance中加入 if(S_OK!=OleInitialize(NULL)) { AfxMessageBox("初始化COM组件库错误"); } 下面就是数据库操作 _ConnectionPtr pConn; _RecordsetPtr pRs; CString strSQL; pConn.CreateInstance(__uuidof(Connection)); pConn->CursorLocation=adUseClient; strSQL="Provider=SQLOLEDB;Server=Gooyan;DataBase=SkillsBox;UID=sa;PWD=aaaaaaaa"; pConn->Open(_bstr_t(strSQL),"","",-1); pRs.CreateInstance(__uuidof(Recordset)); pRs->CursorLocation=adUseClient; pRs->PutActiveConnection(pConn.GetInterfacePtr()); pRs1.CreateInstance(__uuidof(Recordset)); pRs1->CursorLocation=adUseClient; pRs1->PutActiveConnection(pConn.GetInterfacePtr()); strSQL="select * from catalog order by cataid"; pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText); 赞 zcpingx 2004-09-16郁闷:问题终于解决了。 在 连接数据库 的 hr=m_pConnection->Open((_bstr_t)strConnection,"","",-1);前加上 m_pConnection->CursorLocation = adUseClient; 要不然 使用AddNew()函数总出错。你试试看吧。赞 zcpingx 2004-09-16连接部分: AfxOleInit();//必须要有。 strConnection = "Provider=msdaora;Data Source=sfdb_10.0.0.254;User ID=pe; Password=express"; try { HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection)); if(SUCCEEDED(hr)) { hr=m_pConnection->Open((_bstr_t)strConnection,"","",-1); } } catch(_com_error e) { AfxMessageBox("连接数据库失败!"); return FALSE; } return TRUE;赞 zcpingx 2004-09-16请问你的问题解决了没有呀,我也遇到这样的问题。一起寻找答案吧,若解决了请相告一声!谢谢!赞 sony19791015 2004-09-14gz赞 marcopolo 2004-09-13关注赞 lzf8977 2004-09-11以前碰到这个问题: 将pRs->Open(szSqlbuff,_variant_t((IDispatch*)pCn,true),adOpenStatic,adLockOptimistic,adCmdText); 中的 adLockOptimistic 改为adLockPessimistic 试试!! 赞 内存泄漏 2004-09-08pRs->Open(szSqlbuff,_variant_t((IDispatch*)pCn,true),adOpenStatic,adLockOptimistic,adCmdText); 在上面这条语句前面加上下面这条语句: pRs->PutRefActiveConnection(pCn); 赞 fj_jiangqi 2004-09-08谁可以帮我?赞 fj_jiangqi 2004-06-07用户,口令非要写在连接串中吗?我是分开来写的。 目前虽是本机运行,但日后便要在多台机子上运行,连接串中是一定要用到ip地址的。 除了AddNew(),put_Collect()还没正常过,其它读限数据包括执行update的SQL语句都是正常的。唉!不知道连接时或取记录时那没设置好?赞 Kudeet 2004-06-07呵呵! "Provider=MSDAORA.1;Data Source=servername;UserID=...;Password=..;"赞 fj_jiangqi 2004-06-07laiyiling(最熟悉的陌生人)谢谢你对我的问题一直的关注,谢谢! 我的数据服务器是装在本机上的,因此使用127.0.0.1的地址。赞 Kudeet 2004-06-07不是本地连接吗?赞 fj_jiangqi 2004-06-07不对,上面我自己说错了,那个连接串好象是我从一个叫resin的jsp服务软件中仿造出来的。赞 fj_jiangqi 2004-06-07char *myadoCONNECTIONSTRING="Provider=MSDAORA.1;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=linepic)))"; char *myadoUSER="linepic"; char *myadoPASSWORD="linepic"; 这是我的连接串用户名与口令。连接串是从tnsnames.ora文件中拷出来的。 以上为pCn->Open(myadoCONNECTIONSTRING,myadoUSER,myadoPASSWORD,adModeUnknown);的打开语句的参数内容。 也不知是否有问题?唉! 还望高人指点!谢谢!赞 Kudeet 2004-06-07pCn->Open(myadoCONNECTIONSTRING,myadoUSER,myadoPASSWORD,adModeUnknown);的打开语句??赞 yuaner1978 2004-06-07我也有这个问题,困惑我好几天了。一起关注。谢谢赞 Kudeet 2004-06-07char szSqlbuff[100]="select * from test_table"; 改为 CString str="select * from test_table"; 选自 https://bbs.csdn.net/topics/50406719
|