_ConnectionPtr数据库查询的问题?

play100 2008-09-12 03:09:47
数据库是MYSQL,直接在EMS下运行下面的SQL语句能得到一条记录,但在程序中查询不到

_RecordsetPtr testp = m_dbconn->Query(CString("select sum(sec1) from report_backup"));
if (!testp->adoEOF){
int aaa = 0;
}

===============m_dbconn的方法===================
_RecordsetPtr CAdoEx::Query(LPCTSTR lpQuery)
{
_RecordsetPtr rtn = NULL ;
_variant_t vRecsAffected ;
if(!m_bOpen) return NULL ;
try {
rtn = m_pConnection->Execute(lpQuery, &vRecsAffected, adOptionUnspecified) ;
} catch(_com_error e) {
throw new CExp(_T("cantConnect"),_T("查询数据库表时发生异常:%s"), e.ErrorMessage());
}
return rtn ;
}
========================================
...全文
308 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjianan121310 2012-05-05
  • 打赏
  • 举报
回复
我好像知道了................
wangjianan121310 2012-05-05
  • 打赏
  • 举报
回复
请问大神们,我的问题
_ConnectionPtr' : missing storage-class or type specifiers
怎么回事???
play100 2008-09-28
  • 打赏
  • 举报
回复
好久了,又试了下
发现另一个问题,当...SUM(字段)...字段类型为DOUBLE时搜索正常,字段类型为INTGER时没有记录...
jsc0415067 2008-09-26
  • 打赏
  • 举报
回复
二楼的别误导,
谁说EXCUTE不能获得记录集的
OPEN和EXCUTE是两中不同的获得记录集的方法
问题不在那
我想是SQL出了问题!!!!!!!!!
play100 2008-09-22
  • 打赏
  • 举报
回复
>是的,sec1是INT型
>_variant_t var; var = testp->GetCollect((long)0);这种直接出错,原因同上,因为结果集里没记录
我看网上的sum例子写的都很简单,我想是不是低层哪里搞错了,
没办法暂时用Select *出来自己加下,继续关注...
内存泄漏 2008-09-20
  • 打赏
  • 举报
回复
报什么错? 异常内容是什么?? 另外,把程序放到别人机器上执行可以吗?
play100 2008-09-20
  • 打赏
  • 举报
回复
直接出错了
哎~~~
咋办~~~就我出这种情况~~~
内存泄漏 2008-09-20
  • 打赏
  • 举报
回复
别判断了,你直接从记录集中取字段值试试:

_variant_t var;
var = testp->GetCollect((long)0);
AfxMessageBox((LPCSTR)_bstr_t(var));
内存泄漏 2008-09-20
  • 打赏
  • 举报
回复
但楼主不是说丢到数据库中直接执行没有问题吗??
play100 2008-09-20
  • 打赏
  • 举报
回复
//测试用代码
_RecordsetPtr testp = m_dbconn->Query(CString("select sum(sec1) as tmd from report_backup"));
if (!testp->adoEOF){ //这里随便判断下有没有记录
int aaa = 0;
}
直接丢MYSQL中是可以查询的

:没办法了、代码也就这么点、没其它地方可改了、是不是哪个细节错了、什么DLL加载啊、什么ODBC啊......!!!!!
Sandrer 2008-09-20
  • 打赏
  • 举报
回复
有个小问题,楼主能不能先确认一下,这个sec1的数据类型??

因为在SQL中,使用MAX()的话,如果参数是字符,它会自动选择按拼音排序最后的一个
但是如果在SUM()中使用字符的话,会报错!
内存泄漏 2008-09-19
  • 打赏
  • 举报
回复
你把select sum(sec1) from report_backup直接丢到MYSQL中执行可以查到记录吗?
内存泄漏 2008-09-19
  • 打赏
  • 举报
回复
你是怎么判断没有查到记录的?? 用别名试试:
select sum(字段) as 新字段名 from 表
play100 2008-09-19
  • 打赏
  • 举报
回复
重新写了一个用Open来执行SQL的方法,对普通的select能行,但对select sum(字段) from 表<--还是查询不到结果
问题还是一样存在?
帮忙再看看、是不是那个细节我没注意到
_RecordsetPtr CAdoEx::QuerySelect(LPCTSTR sql){
_RecordsetPtr rtn = NULL;
try{
rtn.CreateInstance("ADODB.Recordset");
rtn->Open(sql, _variant_t((IDispatch*)m_pConnection,true),adOpenUnspecified ,adLockUnspecified ,
adCmdText);

}catch(_com_error e){
throw new CExp(_T("AdoOpenErr"), _T("查询数据库表时发生异常:%s"), e.ErrorMessage());
}
return rtn;
}
ToperRay 2008-09-19
  • 打赏
  • 举报
回复
调试一下,看看数据在哪里错误了
play100 2008-09-19
  • 打赏
  • 举报
回复
哦、好的我再试试
(我一般的查询、如select * from xx_table 都是能返回正确的记录集)
shakaqrj 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tabby 的回复:]
你是怎么判断没有查到记录的?? 用别名试试:
select sum(字段) as 新字段名 from 表
[/Quote]

你是怎么判断没有查到记录的??????????
play100 2008-09-19
  • 打赏
  • 举报
回复
To:楼上
还是一样
Sandrer 2008-09-19
  • 打赏
  • 举报
回复

_RecordsetPtr CAdoEx::Query(LPCTSTR lpQuery)
{
if(!m_bOpen) return NULL;

_RecordsetPtr pRs = NULL;

try
{
pRs = m_pConnection->Execute(_bstr_t(lpQuery), NULL, adCmdText);
} catch(_com_error e) {
.......
}

return pRs;
}


这样行不行?
play100 2008-09-19
  • 打赏
  • 举报
回复
真想不通
select max(sec1) from report_backup也行的
select sum(sec1) from report_backup怎么就不行了哎
加载更多回复(4)

4,012

社区成员

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

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