VC6 MFC 连接SQL数据库,能连接,但是无法取值,求教

lhw7791086 2013-05-31 09:22:31
经测试,连接数据库能成功,但是从数据库表取值失败,估计是类型转换问题,代码如下:
CoInitialize(NULL);
try
{
_ConnectionPtr pConn("ADODB.Connection");
pConn->Open("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=lhw;Initial Catalog=CRC16;Data Source=ACER-PC;Server=localhost","lhw","lhw",adConnectUnspecified);
_RecordsetPtr pRs("ADODB.Recordset");
pRs->Open("Select * From CRC",_variant_t(pConn,true),adOpenStatic,adLockOptimistic,adCmdText);
//////////////////////////////////////////////以上都没问题,调试发现下面报错
while (!pRs->EndOfFile)
{
r1=atoi(_bstr_t(pRs->GetCollect("POS1")));//运行到这出错,本来想用这个语句读取表中数据
r2=atoi(_bstr_t(pRs->GetCollect("POS2")));
r3=atoi(_bstr_t(pRs->GetCollect("POS3")));
pRs->AddNew();
pRs->Fields->Item["CRC"]->Value=_variant_t(long((crc16bitfor1(r1)^crc16bitfor1(r2))^crc16bitfor1(r3)));//这个语句用来添加数据
}
pRs->Close();
pConn->Close();
}
catch(_com_error&e)
{
MessageBox(e.ErrorMessage());
}

表有四列POS1,POS2,POS3,CRC,都是int类型
请教如何解决?而且不知道错在哪.....
...全文
252 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsz871204 2013-06-07
  • 打赏
  • 举报
回复
不要再去考虑类型转换了,目前跟类型没有任何关系。 改成while(!pRs->adoEOF)
hsz871204 2013-06-07
  • 打赏
  • 举报
回复
while (!pRs->EndOfFile)改成while(!m_Recordset->adoEOF)这样判断看看能不能进行循环,应该是语句错误没有查询到记录
lhw7791086 2013-06-04
  • 打赏
  • 举报
回复
引用 16 楼 fin86889003 的回复:
如果要BSTR(_bstr_t_)转化为可输出类型(整形),可以调用ConvertBSTRToString()方法转化为string类型,再用atoi()啊 #include <comutil.h> #pragma comment(lib, "comsupp.lib") string str = ConvertBSTRToString(_bstr_t(pRs->GetCollect("POS1"))); int iDes = atoi(str);
谢谢回复,但是提示我error C2065: 'ConvertBSTRToString' : undeclared identifier 确认已经添加了头文件和引用参数,为什么还报错?
苒止 2013-06-03
  • 打赏
  • 举报
回复
如果要BSTR(_bstr_t_)转化为可输出类型(整形),可以调用ConvertBSTRToString()方法转化为string类型,再用atoi()啊 #include <comutil.h> #pragma comment(lib, "comsupp.lib") string str = ConvertBSTRToString(_bstr_t(pRs->GetCollect("POS1"))); int iDes = atoi(str);
  • 打赏
  • 举报
回复


这是我段一段访问数据库的代码, 希望可以对你提供一点帮助。
lhw7791086 2013-06-03
  • 打赏
  • 举报
回复
引用 13 楼 jiayuxue 的回复:
[quote=引用 12 楼 lhw7791086 的回复:]
[quote=引用 8 楼 jiayuxue 的回复:]
[quote=引用 7 楼 hsz871204 的回复:]
_variant_t var = pRs->GetCollect("ID");
int id = var.intVal;


同意,这样就对了[/quote]

试了上面的方法,依然报错,CATCH出来的是:

调试的时候在_variant_t var1 = pRs->GetCollect("POS1");处捕捉到错误。

[/quote]

如果是在:_variant_t var1 = pRs->GetCollect("POS1");处捕捉到错误。可能不是格式转换的错误了,是不是 上面打开数据库或者运行sql语句有问题?可以将上面两条语句分别放到try catch中,看看有没有报异常,或者open语句后,智能指针是空的,才导致下面取不到数的?[/quote]


所有与SQL连接有关的语句都在try中,调试的时候Prs与pConn指针都不是空的
jiayuxue 2013-06-03
  • 打赏
  • 举报
回复
引用 12 楼 lhw7791086 的回复:
[quote=引用 8 楼 jiayuxue 的回复:] [quote=引用 7 楼 hsz871204 的回复:] _variant_t var = pRs->GetCollect("ID"); int id = var.intVal;
同意,这样就对了[/quote] 试了上面的方法,依然报错,CATCH出来的是: 调试的时候在_variant_t var1 = pRs->GetCollect("POS1");处捕捉到错误。 [/quote] 如果是在:_variant_t var1 = pRs->GetCollect("POS1");处捕捉到错误。可能不是格式转换的错误了,是不是 上面打开数据库或者运行sql语句有问题?可以将上面两条语句分别放到try catch中,看看有没有报异常,或者open语句后,智能指针是空的,才导致下面取不到数的?
lhw7791086 2013-05-31
  • 打赏
  • 举报
回复
引用 3 楼 u010116861 的回复:
[quote=引用 2 楼 lhw7791086 的回复:] [quote=引用 1 楼 u010116861 的回复:] 直接在取的数据之前强制转换加(int )试试,我以前取也没出现错误的
已经使用atoi了,难道去掉atoi改为强制转换为int?[/quote] 这是atoi的原型int atoi( const char *string ); _bstr_t是什么类型你用这个函数?[/quote] 无法从'class _bstr_t' 转化到int,如何解决呢? 以前用这个语句都行:
MessageBox(_bstr_t(pRs->GetCollect("ID")));//ID也是整形的,能输出出来,但是现在改成上面后就不行了。
lhw7791086 2013-05-31
  • 打赏
  • 举报
回复
引用 3 楼 u010116861 的回复:
[quote=引用 2 楼 lhw7791086 的回复:] [quote=引用 1 楼 u010116861 的回复:] 直接在取的数据之前强制转换加(int )试试,我以前取也没出现错误的
已经使用atoi了,难道去掉atoi改为强制转换为int?[/quote] 这是atoi的原型int atoi( const char *string ); _bstr_t是什么类型你用这个函数?[/quote] int强制转换不行 error C2440: 'type cast' : cannot convert from 'class _bstr_t' to 'int' No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
随风随恨 2013-05-31
  • 打赏
  • 举报
回复
引用 2 楼 lhw7791086 的回复:
[quote=引用 1 楼 u010116861 的回复:] 直接在取的数据之前强制转换加(int )试试,我以前取也没出现错误的
已经使用atoi了,难道去掉atoi改为强制转换为int?[/quote] 这是atoi的原型int atoi( const char *string ); _bstr_t是什么类型你用这个函数?
lhw7791086 2013-05-31
  • 打赏
  • 举报
回复
引用 1 楼 u010116861 的回复:
直接在取的数据之前强制转换加(int )试试,我以前取也没出现错误的
已经使用atoi了,难道去掉atoi改为强制转换为int?
随风随恨 2013-05-31
  • 打赏
  • 举报
回复
直接在取的数据之前强制转换加(int )试试,我以前取也没出现错误的
lhw7791086 2013-05-31
  • 打赏
  • 举报
回复
引用 8 楼 jiayuxue 的回复:
[quote=引用 7 楼 hsz871204 的回复:] _variant_t var = pRs->GetCollect("ID"); int id = var.intVal;
同意,这样就对了[/quote] 试了上面的方法,依然报错,CATCH出来的是: 调试的时候在_variant_t var1 = pRs->GetCollect("POS1");处捕捉到错误。
lhw7791086 2013-05-31
  • 打赏
  • 举报
回复
引用 7 楼 hsz871204 的回复:
_variant_t var = pRs->GetCollect("ID"); int id = var.intVal;
试了您的方法,依然报错,CATCH出来的是: 调试的时候在_variant_t var1 = pRs->GetCollect("POS1");处捕捉到错误。
lhw7791086 2013-05-31
  • 打赏
  • 举报
回复
引用 6 楼 u010116861 的回复:
[quote=引用 5 楼 lhw7791086 的回复:]
[quote=引用 3 楼 u010116861 的回复:]
[quote=引用 2 楼 lhw7791086 的回复:]
[quote=引用 1 楼 u010116861 的回复:]
直接在取的数据之前强制转换加(int )试试,我以前取也没出现错误的

已经使用atoi了,难道去掉atoi改为强制转换为int?[/quote]
这是atoi的原型int atoi( const char *string );
_bstr_t是什么类型你用这个函数?[/quote]

无法从'class _bstr_t' 转化到int,如何解决呢?
以前用这个语句都行:
MessageBox(_bstr_t(pRs->GetCollect("ID")));//ID也是整形的,能输出出来,但是现在改成上面后就不行了。
[/quote]

这样写:
_variant_t Holder;//保存记录集某项数据
Holder = pRs->GetCollect("ID")));
int Id = (int)Holder;
试下
[/quote]

试了您的方法,依然报错,CATCH出来的是:

调试的时候在_variant_t var1 = pRs->GetCollect("POS1");处捕捉到错误。

glorier 2013-05-31
  • 打赏
  • 举报
回复
引用 7 楼 hsz871204 的回复:
_variant_t var = pRs->GetCollect("ID"); int id = var.intVal;
应该是这样
jiayuxue 2013-05-31
  • 打赏
  • 举报
回复
引用 7 楼 hsz871204 的回复:
_variant_t var = pRs->GetCollect("ID"); int id = var.intVal;
同意,这样就对了
hsz871204 2013-05-31
  • 打赏
  • 举报
回复
_variant_t var = pRs->GetCollect("ID"); int id = var.intVal;
随风随恨 2013-05-31
  • 打赏
  • 举报
回复
引用 5 楼 lhw7791086 的回复:
[quote=引用 3 楼 u010116861 的回复:] [quote=引用 2 楼 lhw7791086 的回复:] [quote=引用 1 楼 u010116861 的回复:] 直接在取的数据之前强制转换加(int )试试,我以前取也没出现错误的
已经使用atoi了,难道去掉atoi改为强制转换为int?[/quote] 这是atoi的原型int atoi( const char *string ); _bstr_t是什么类型你用这个函数?[/quote] 无法从'class _bstr_t' 转化到int,如何解决呢? 以前用这个语句都行:
MessageBox(_bstr_t(pRs->GetCollect("ID")));//ID也是整形的,能输出出来,但是现在改成上面后就不行了。
[/quote] 这样写: _variant_t Holder;//保存记录集某项数据 Holder = pRs->GetCollect("ID"))); int Id = (int)Holder; 试下

4,011

社区成员

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

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