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

xiaoran2267 xiaoran2267 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面这段代码大家应该比较熟悉吧:
#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();
}
当表中为空时,增加记录就会报错!我是新手。请高手明示。不胜感激呀
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
xiaoran2267
数据库 4,017 成员 39,805 内容