最后90分求助:vc/mfc中使用ODBC的难题,请指点……

pjf2000 2005-03-22 02:30:00
vc/mfc 项目 + Sql Server2000 开发数据库项目

现有这样两个表:合同表 A, 合同明细表B。结构如下:

A: B:
ContractID VarChar 50 ContractID VarChar 50
Company VarChar 100 DetailID VarChar 50
…… TheFee float 8
Currency VarChar 10

现在小弟要实现这样的功能:
查询每个合同的合同明细金额之和,要求返回合同号,公司名称,合同明细金额之和(按币值分开)

我写了一个Sql语句来实现该功能:
Select a.ContractID, a.Company, Sum(b.TheFee) from A LEFT JOIN B ON a.ContractID = b.ContractID Group By ContractID, Currency

小弟遇到的问题是:
上述Sql语句通过db.Execute()来执行后。在不借助其他表的情况下:对于执行的结果,在vc/mfc中,如何使用ODBC逐条访问。

请高手指点……

学习,关注……
...全文
196 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodheartppl 2005-03-24
  • 打赏
  • 举报
回复
用RECORDSET
inpriser 2005-03-24
  • 打赏
  • 举报
回复
两层循环不就行了?

或者

采用游标
yzhouen 2005-03-24
  • 打赏
  • 举报
回复
至于如何读取每条记录中的各个数据,在你的sql语句里控制,然后用
SQLBindCol将查询值绑定到变量中,进行读取!
你可以查看这SQLBindCol、SQLExecDirect、SQLFetch几个函数的用法
pjf2000 2005-03-23
  • 打赏
  • 举报
回复
谢谢!试试先……
mousefj 2005-03-23
  • 打赏
  • 举报
回复
char pTmp[32];
_ltoa(m_lData,pTmp,10);
这两句要删除
m_lData已经是long型。
mousefj 2005-03-23
  • 打赏
  • 举报
回复
我的例子得到是CDBVariant 类型
CString m_sVal;
long m_lData;
CDBVariant m_dbVarVal;
m_pRecordset->GetFieldValue("mailSender",m_sVal);
m_pRecordset->GetFieldValue("mailDate",m_dbVarVal);
m_lData=m_dbVarVal.m_lVal;
char pTmp[32];
_ltoa(m_lData,pTmp,10);
msm 2005-03-23
  • 打赏
  • 举报
回复
楼上正解阿,这个其实应该不难得。
只要有一个结果集和拼接好的sql字符串,剩下的就是体力活了
pjf2000 2005-03-23
  • 打赏
  • 举报
回复
请高手指点一下……
Kudeet 2005-03-23
  • 打赏
  • 举报
回复
// 创建进行存取的字符串
sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s", sDriver, sFile);
TRY
{
// 打开数据库
CDatabase database;
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.
sSql = "SELECT * FROM demo";
// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
// 获取查询结果
while (!recset.IsEOF())
{
//读取数值
recset.GetFieldValue("Name ", sItem1);
recset.GetFieldValue("Age", sItem2);
// 移到下一行
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e->m_strError);
}
END_CATCH;
pjf2000 2005-03-23
  • 打赏
  • 举报
回复
好的,我找找看吧……


学习……
0011411 2005-03-23
  • 打赏
  • 举报
回复
up
tudou614 2005-03-23
  • 打赏
  • 举报
回复
学习……
pjf2000 2005-03-23
  • 打赏
  • 举报
回复
to : laiyiling(※陌生人·坚持理想※)

在使用你给我的方法的时候,出现一个问题:
recset.GetFieldValue("Age", sItem1);
如果字段使用的是int或者float类型的话,那么sItem1就没有办法取得该字段的值,请问要怎么解决啊?

请指点一下,谢谢!

学习……
LemonYang 2005-03-22
  • 打赏
  • 举报
回复
直接使用ODBCAPI函数来写,非常简单,网上有好多例子,可以找一下
pjf2000 2005-03-22
  • 打赏
  • 举报
回复
顶一下……
pjf2000 2005-03-22
  • 打赏
  • 举报
回复
楼上的大哥,可不可以详细解释一下你的代码,谢谢!

另外,你的代码中好象没有给出如何读取每条记录中的各个数据。

学习,关注……
yzhouen 2005-03-22
  • 打赏
  • 举报
回复
sprintf((char*)select,"select……");
rc = SQLExecDirect(hstmt, select, SQL_NTS);
if ((rc==SQL_SUCCESS)||(rc==SQL_SUCCESS_WITH_INFO))
{
SQLBindCol(hstmt,1,SQL_C_LONG,&collectid,0,&cbcollectid);
SQLBindCol(hstmt,2,SQL_C_LONG,&offset,0,&cbeoffset);
while(TRUE)
{
rc=SQLFetch(hstmt); //取查询结果,并把指针指下一条记录
if ((rc==SQL_SUCCESS)||(rc==SQL_SUCCESS_WITH_INFO))
{

……
}
else
break;
}
SQLCloseCursor(hstmt);
}
galaxy_coc 2005-03-22
  • 打赏
  • 举报
回复
用odbc的api SQLGetData可以得到数据集 用vc来做数据库编程很不方便哦,还有感觉你的sql语句好想不对,如果在orcal里肯定是错的 应该group by a.contractID, a.Company

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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