已经定义了一个记录集对应于一个表中的所有记录,现在要对这个表执行如下类型的sql语句
declare @sql varchar(8000) 
set @sql = 'select shopname' 
select @sql = @sql + ',sum(case position when '''+position+''' then 1 else 0 end) as ['+position+']' 
from (select distinct position from #) as a 
select @sql = @sql+',sum(case checkcode when 0 then 1 else 0 end) [标志0],sum(case checkcode when 1 then 1 else 0 end) [标志1],sum(case checkcode when 2 then 1 else 0 end) [标志2],sum(case checkcode when 3 then 1 else 0 end) [标志3] 
from # group by shopname' 
应该如何操作那? 如何向记录集发送sql语句?查询的结果会放在哪里?

解决方案 »

  1.   

    开发环境MFC ODBC + Access
      

  2.   

    建议用:CDatabase::ExecuteSQL
    先声明 CDatabase db;
           
    前提你的记录集类: CXXXXXSet 必须构造在db上;
    如下:CXXXXXSet set(&db);
      

  3.   

    我已经直接用CRecordSet做了一大堆工作,还能不能重新构造在CDatabase上那?
      

  4.   

    crecordset have a public member variable, 
    it's m_db
    use m_pSet->m_db....
    i think it can work
      

  5.   

    使用CDatabase与是否有CRecordSet无关,直接用就是了。例如,要将TableName中的数据全部删除,可以使用下述语句。
    CDatabase * pDatabase = new CDatabase; TRY
    {
    pDatabase->OpenEx( _T("DSN=ODBCName;UID=***;PWD=***;"), CDatabase::noOdbcDialog);
    }
    CATCH (CDBException, e)
    {
    delete pDatabase;
    return;
    }END_CATCH SQL.Format("delete from TableName");
    pDatabase->ExecuteSQL(SQL); pDatabase->Close();
    delete pDatabase;
      

  6.   

    对void CWash1View::OnInitialUpdate()改写成
    CDatabase m_db;
    m_db.Open("Wash");
    CWash1Set m_pSet(&m_db);
    CShopSet m_pShopSet(&m_db);

    m_pSet.Open();
    m_pShopSet.Open();编译通过后首先是让选择数据源,然后就弹出窗口说ODBC不支持动态纪录集
    而CWash1Set和CShopSet的m_nDefaultType 都是dynaset
    怎么回事呢?