请教:如何在VC++中进行多表查询 例如 access数据库db1.mdb中有两张表,表1 UserID,Name 表2 UserID,Score要查Name = 'moon' 的 Score,如何?用MFC odbc类和Dao类分别实现????? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 兄弟,多表查询,什么环境都一样用SQL可以很容易实现呀select 表2.Score from 表1,表2 where 表1.Name = 'moon'然后在ODBC中execute就行了 =_=# SQL我当然会啦,只是想知道MFC中类的具体用法。CDatabase::ExecuteSQL(lpszSQL)是不能返回记录集的应该用CRecordSet的函数但是具体不会用哈, 用MFC ODBC类和Dao类分别实现 rs.Open(CRecordSet:dynamic,T_("Select 表2.Score from 表1,表2 where 表1.Name = 'moon'")); 那如果select结果是要两张表的所有field,那么CRecordSet类成员变量又如何定义?在class wizard自动生成的(数据库表vsCRecordSet)代码中修改?RFX部分。。例如rcTable1和rcTable2分别对应表1表2,可不可以用第三个rc对象rcTemp保存select结果? 重新生成一个CRecordSet的对象:m_pSetCDatabase * pdb=new CDatabase(); m_pSet->m_pDatabase=pdb; pdb->OpenEx(_T("u data source")); m_pSet->m_pDatabase=pdb; try { m_pSet->m_pDatabase->ExecuteSQL( sal); } catch (CDBException e) { MessageBox(""); }然后,rs->GetFieldValue("field", str); 这个东西我做过,用CRecordSet对象。我认为要注意一下几点:1。 缺省生成的时候,记录集只指向一个数据表,如果要指向多个表,就需要手工添加。在GetDefaultSQL函数里添加。例如:CString CTeamDataSet::GetDefaultSQL(){ return _T("[teamData],[userData]");}2.要手工修改DoFieldExchange里面的数据交换。 RFX_Text(pFX, _T("[userData].[memo]"), m_userMemo); RFX_Text(pFX, _T("[teamData].[memo]"), m_teamMemo);3.如果两个表有重名的属性列,那就要求在任何可能出现的地方加上属性列的前缀,表明它是属于哪个表里面的。以上是我个人的经验。 select 表2.Score from 表1,表2 where 表1.Name = 'moon' and 表1.UserID=表2.UserID 你不要用CLassWazrd生成CRecordset对象而是自己在程序里生成rs对象(就是先声明一个C++对象)在执行rs.Open(CRecordSet:dynamic,T_("Select 表2.Score from 表1,表2 where 表1.Name = 'moon'"));就可以了 advise you use SQL language to query one more tables SQL查询应该这样写:select 表2.Score From 表1,表2 Where 表1.Name='moon' And 表1.UserID=表2.UserID 将SQL查询'select 表2.Score From 表1,表2 Where 表1.Name='moon' And 表1.UserID=表2.UserID'语句写成CString 变量后用rs.Open打开就行了 可以这样写:select Score from 表2 where id in (select id from 表1 where name = 'moon') 控件关联变量的问题 关于在vc中读取xml文件的问题 请教关于语音卡编程问题(大哥,大姐们我没有分了) VC报错问题,关于Link报错的。。 容易的问题,请看看 如何使某一汉字旋转90度,然后在视图上输出,最好给出源码,谢谢先。 如何用程序实现将鼠标移至屏幕上的一点(如[56,30]),然后发送click消息 ●大哥们,你们用什么界面控件???免费的,带源码的全套哦:P 为什么删除我的招聘贴? 一个关于贝塞尔曲线的问题(spline)??在vc中的,在线等待!! GDI+的图形旋转问题(围绕定点旋转) 两个局域网内的机子,都用代理上Internet,怎么用Socket通信?
用SQL可以很容易实现呀
select 表2.Score from 表1,表2 where 表1.Name = 'moon'
然后在ODBC中execute就行了
CDatabase * pdb=new CDatabase();
m_pSet->m_pDatabase=pdb;
pdb->OpenEx(_T("u data source"));
m_pSet->m_pDatabase=pdb;
try
{
m_pSet->m_pDatabase->ExecuteSQL( sal);
}
catch (CDBException e)
{
MessageBox("");
}
然后,rs->GetFieldValue("field", str);
我认为要注意一下几点:
1。 缺省生成的时候,记录集只指向一个数据表,如果要指向多个表,就需要手工添加。在GetDefaultSQL函数里添加。例如:
CString CTeamDataSet::GetDefaultSQL()
{
return _T("[teamData],[userData]");
}
2.要手工修改DoFieldExchange里面的数据交换。
RFX_Text(pFX, _T("[userData].[memo]"), m_userMemo);
RFX_Text(pFX, _T("[teamData].[memo]"), m_teamMemo);
3.如果两个表有重名的属性列,那就要求在任何可能出现的地方加上属性列的前缀,表明它是属于哪个表里面的。以上是我个人的经验。
而是自己在程序里生成rs对象(就是先声明一个C++对象)
在执行rs.Open(CRecordSet:dynamic,T_("Select 表2.Score from 表1,表2 where 表1.Name = 'moon'"));
就可以了
select 表2.Score From 表1,表2 Where 表1.Name='moon' And 表1.UserID=表2.UserID