您的位置:程序门 -> vc/mfc -> 基础类



关于ado的getcollect函数


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于ado的getcollect函数[已结贴,结贴人:johnice]
发表于:2007-06-29 15:35:22 楼主
刚开始学习数据库编程

void   cuser::getdata(cstring   name)
{
adoconn   m_adoconn;
m_adoconn.oninitadoconn();

_bstr_t   vsql;
vsql= "select   *   from   zhanghao   where   name= ' "+name+ " ' ";

_recordsetptr   m_precordset;
m_precordset=m_adoconn.getrecordset(vsql);

if(m_precordset-> adoeof==1)
cuser();
else
{
_variant_t   var;
var=m_precordset-> getcollect( "name ");
username=(lpctstr)(_bstr_t   )var;

// username=(lpctstr)(_bstr_t   )(m_precordset-> getcollect( "name "));
// pwd=(lpctstr)(_bstr_t   )m_precordset-> getcollect( "pwd ");

}

m_adoconn.exitconnect();
}

本函数是想通过   访问数据库   获得一组数据   并存在一个   cuser   对象   user中
结果     运行时   出现   runtime   error
我跟踪了   下     问题在于      
运行到     var=m_precordset-> getcollect( "name ");       这一句时发生错误
msdn中   也没有   getcollect     的   解释
小弟真是   没办法   了       高手们帮小弟个忙啊   !!!

还有就是     后面从   _variant_t     到   cstring   数据类型的转换中   也不是很明白
希望大家   能指引我一下啊
发表于:2007-06-29 15:45:241楼 得分:0
难道是我问题太弱智了?

大家帮帮忙咯
发表于:2007-06-29 15:53:232楼 得分:0
有可能是name字段在表中不存在,检查拼写是否正确。
发表于:2007-06-29 15:57:263楼 得分:0
检查了     ls   说的   这两个   都不是问题
发表于:2007-06-29 16:07:294楼 得分:0
if(m_precordset-> adoeof==1)
应该是
if(m_precordset-> adoeof==-1)
发表于:2007-06-29 16:15:115楼 得分:0
adoeof     好像是判断     是否超过了最后一行吧  
所以==1时   用构造函数初始化应该   没错吧
发表于:2007-06-29 16:21:006楼 得分:0
任何情况下   adoeof   不会等于1,要么是0,要么是-1.
所以
if(m_precordset-> adoeof==1)
cuser();//该句不可能被执行


你的代码的else块中的语句始终会被执行,若此时m_precordset中没有当前记录(adoeof等于-1),就会出现你所说的错误.
发表于:2007-06-29 16:39:047楼 得分:0
改了
还是有问题
不过   还是要谢谢   luohongming(lhm)兄
发表于:2007-06-29 22:02:018楼 得分:0
getcollect(_variant_t( "name ")
发表于:2007-06-30 13:20:589楼 得分:5
如果name字段的值是个空串,在处理时要注意判断一下。
发表于:2007-06-30 19:30:1910楼 得分:0
问题   已经解决     是redangel001()     的   方法     但是我自己想出来的
给你分吧
发表于:2007-06-30 19:36:1511楼 得分:0
就这样了


快速检索

最新资讯
热门点击