例如 access数据库db1.mdb中有两张表,表1 UserID,Name 表2 UserID,Score
要查Name = 'moon' 的 Score,如何?
用MFC odbc类和Dao类分别实现?????

解决方案 »

  1.   

    兄弟,多表查询,什么环境都一样
    用SQL可以很容易实现呀
    select 表2.Score from 表1,表2 where 表1.Name = 'moon'
    然后在ODBC中execute就行了
      

  2.   

    =_=# SQL我当然会啦,只是想知道MFC中类的具体用法。CDatabase::ExecuteSQL(lpszSQL)是不能返回记录集的应该用CRecordSet的函数但是具体不会用哈,
      

  3.   

    用MFC ODBC类和Dao类分别实现
      

  4.   

    rs.Open(CRecordSet:dynamic,T_("Select  表2.Score from 表1,表2 where 表1.Name = 'moon'"));
      

  5.   

    那如果select结果是要两张表的所有field,那么CRecordSet类成员变量又如何定义?在class wizard自动生成的(数据库表vsCRecordSet)代码中修改?RFX部分。。例如rcTable1和rcTable2分别对应表1表2,可不可以用第三个rc对象rcTemp保存select结果?
      

  6.   

    重新生成一个CRecordSet的对象:m_pSet
    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);
      

  7.   

    这个东西我做过,用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.如果两个表有重名的属性列,那就要求在任何可能出现的地方加上属性列的前缀,表明它是属于哪个表里面的。以上是我个人的经验。
      

  8.   

    select 表2.Score from 表1,表2 where 表1.Name = 'moon' and 表1.UserID=表2.UserID
      

  9.   

    你不要用CLassWazrd生成CRecordset对象
    而是自己在程序里生成rs对象(就是先声明一个C++对象)
    在执行rs.Open(CRecordSet:dynamic,T_("Select  表2.Score from 表1,表2 where 表1.Name = 'moon'"));
    就可以了
      

  10.   

    advise you use SQL language to query one more tables
      

  11.   

    SQL查询应该这样写:
    select 表2.Score From 表1,表2 Where 表1.Name='moon' And 表1.UserID=表2.UserID
      

  12.   

    将SQL查询'select 表2.Score From 表1,表2 Where 表1.Name='moon' And 表1.UserID=表2.UserID'语句写成CString 变量后用rs.Open打开就行了
      

  13.   

    可以这样写:select Score from 表2 where id in (select id from 表1 where name = 'moon')