困扰我很久的问题了,一直没有弄明白,求教!(ADO编程)

xiaoran2267 2006-04-04 10:47:16
下面这段代码大家应该比较熟悉吧:
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")

#include <stdio.h>
#include <icrsint.h>
_COM_SMARTPTR_TYPEDEF(IADORecordBinding, __uuidof(IADORecordBinding));

inline void TESTHR(HRESULT _hr) { if FAILED(_hr) _com_issue_error(_hr); }

class CCustomRs : public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs)
ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_ch_fname,
sizeof(m_ch_fname), m_ul_fnameStatus, false)
ADO_VARIABLE_LENGTH_ENTRY2(4, adVarChar, m_ch_lname,
sizeof(m_ch_lname), m_ul_lnameStatus, false)
END_ADO_BINDING()
public:
CHAR m_ch_fname[22];
CHAR m_ch_lname[32];
ULONG m_ul_fnameStatus;
ULONG m_ul_lnameStatus;
};

void main(void)
{
::CoInitialize(NULL);
try
{
_RecordsetPtr pRs("ADODB.Recordset");
CCustomRs rs;
IADORecordBindingPtr picRs(pRs);

pRs->Open("SELECT * FROM cc ",
"dsn=MNDB;uid=cuiql;pwd=cuiql;",
adOpenStatic, adLockOptimistic, adCmdText);

TESTHR(picRs->BindToRecordset(&rs));
strcpy(rs.m_ch_fname,"aaaa");
strcpy(rs.m_ch_lname,"bbbbb");
picRs->AddNew(rs);
// while (!pRs->EndOfFile)
// {
// 处理CCustomRs中的数据
// printf("Name = %s %s\n",
// (rs.m_ul_fnameStatus == adFldOK ? rs.m_ch_fname: "<Error>"),
// (rs.m_ul_lnameStatus == adFldOK ? rs.m_ch_lname: "<Error>"));

// 移动到下一行,新行的值会被自动填充到对应的CCustomRs的变量中
// pRs->MoveNext();
// }
}
catch (_com_error &e )
{
printf("Error:\n");
printf("Code = %08lx\n", e.Error());
printf("Meaning = %s\n", e.ErrorMessage());
printf("Source = %s\n", (LPCSTR) e.Source());
printf("Description = %s\n", (LPCSTR) e.Description());
}
::CoUninitialize();
}
当表中为空时,增加记录就会报错!我是新手。请高手明示。不胜感激呀
...全文
356 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhgutian 2007-02-02
  • 打赏
  • 举报
回复
要在数据绑定头文件中添加一个函数,将状态位全部赋值为adFldOK,然后在使用Addnew方法前调用该函数就可以了,我也遇到这个问题,就这样解决的。
ggw 2006-04-11
  • 打赏
  • 举报
回复
是不是少了一个&
picRs->AddNew(&rs);
xiaoran2267 2006-04-10
  • 打赏
  • 举报
回复
我有解决的办法的。我只是不明白为什么出错
staryxg 2006-04-10
  • 打赏
  • 举报
回复
可以 用 SELECT COUNT(*) AS TATALCOUNT FROM table where id=12
在判断taltalcount ==0 无记录 就不会出错了
pcasa 2006-04-07
  • 打赏
  • 举报
回复
使用INSERT INTO语句应该不会有问题。
staryxg 2006-04-07
  • 打赏
  • 举报
回复
我也遇到了同样的问题, SELECT * FROM NEWTABLE WHERE ID=12
没有符合的就回出错, 郁闷啊!
k04 2006-04-07
  • 打赏
  • 举报
回复
北京奥赛尔生物工程技术有限公司

是一家位于北京市中关村科技园海淀园区,是由海外

留学 人员创建的一家高新技术企业 ,并被评为 中关村

留学人员创业园优秀企业 。(www.allshare.com.cn)

 

地址:北京、海淀、上地信息路26号、中关村留学生创业大厦

Tel : 010-82898000; 13601182765; 13683076911

现因业务拓展,需要组建新的团队,招聘以下人员:

职务 名额 职务描述
1、美工 1名 软件界面设计
2、网站制作 1名 HTML + JavaScript(PHP)
3、程序员 2名 Win32 API + C\C++
4、数据库管理员 1名 Oracle; SQL Sever 2000
fairyprince 2006-04-07
  • 打赏
  • 举报
回复
我也做过没有任何问题
是不是你的表时有不许为空的字段呀!
xiaoran2267 2006-04-06
  • 打赏
  • 举报
回复
自己顶一下。希望早点明白。早点揭帖。更希望高手们指点迷津
double915 2006-04-06
  • 打赏
  • 举报
回复
不但是当表是空的时候会出错,当查询 SELECT * FROM table_name WHERE field=? 匹配为空也就是提取出来的记录集为空时就会出现错误,好像是个Bug!
xiaoran2267 2006-04-05
  • 打赏
  • 举报
回复
picRs->AddNew(rs);
是这一句话。
当表是空的时候就会出错。表不空就没有问题
fairyprince 2006-04-05
  • 打赏
  • 举报
回复
picRs->AddNew(rs);
还是 pRs 呀
handsomerun 2006-04-04
  • 打赏
  • 举报
回复
出错是哪一句,我怎么感觉如果是空的话

TESTHR(picRs->BindToRecordset(&rs));
strcpy(rs.m_ch_fname,"aaaa");
strcpy(rs.m_ch_lname,"bbbbb");

这个地方就会出错啊

4,011

社区成员

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

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