困扰我很久的问题了,一直没有弄明白,求教!(ADO编程)
下面这段代码大家应该比较熟悉吧:
#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();
}
当表中为空时,增加记录就会报错!我是新手。请高手明示。不胜感激呀
#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();
}
当表中为空时,增加记录就会报错!我是新手。请高手明示。不胜感激呀
...全文
相关推荐
MFC之ADO数据库快速编程Demo
本Demo主要展示了如何在MFC应用中利用ADO进行快速的数据库编程,涵盖了基本的数据库操作:增、删、改、查。
ADO连数据库提示“没有注册类别”解决办法
下载后运行这个exe文件,解决ADO连数据库提示“没有注册类别”这个问题。这个文件在装VC的时候如果安装包没有问题应该就有了,如果没有装编译环境的话,那么微软就会有一个类似“通行证”的问题。
ADO编程
#### 三、ADO的错误码及其含义在使用ADO进行编程时,可能会遇到各种错误情况,ADO会返回相应的错误码,帮助开发者定位问题。
在VC++中使用ADO编程
#### 五、深入理解ADO编程- **熟练掌握ADO对象、方法和属性**:了解如何使用`Connection`、`Command`和`Recordset`对象以及它们的方法和属性是ADO编程的关键。
ADO编程文档和查询手册
**ADO查询手册**:查询手册通常包含了所有ADO对象的方法、属性和事件的详细说明,以及使用示例,是开发者解决问题和调试代码的重要参考。


数据库
