既然使用CRecordSet的派生类的Open函数就可以连接数据源并可选择不同的打开方式。那么CDatabase也是用它的Open函数连接数据源,然后还是要用CRecordSet派生类的Open函数。
这样的话,CDatabase类有什么用呢??在连接打开数据源时,好像只要有CRecordSet类就够了。

解决方案 »

  1.   

    如果你用的只是一个表的话,CDatabase类也许是没什么用,
    但你要用到多个表的情况呢?你要构成多个记录集,把CDatabase
    的地址传递给CRecordSet构造器的
      

  2.   

    CDatabase对数据库操作
    CRecordSet对数据库中的表操作
      

  3.   

    楼上的老胡说的对:
    CDatabase对数据库操作,直接执行SQL语句,如下列代码:
    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 where ....");  //Sql语句
    pDatabase->ExecuteSQL(Sql); pDatabase->Close();
    delete pDatabase;而同样的操作使用CRecordSet类就比较费时
    CMyRecordSet * pMyRecordSet = new CMyRecordSet; TRY
    {
    pMyRecordSet->OpenEx();
    }
    CATCH(CDBException, e)
    {
    delete pMyRecordSet;
    return;
    }END_CATCH if (pMyRecordSet->GetRecordCount() <= 0)
             {
                    pMyRecordSet->Close();
                    delete pMyRecordSet;
                    Return;
             }         pMyRecordSet->MoveFirst();
    while(pMyRecordSet->IsEof() == 0)
             {
                        pMyRecordSet->Delete();
                        pMyRecordSet->MoveFirst();
             }
    pMyRecordSet->Close();
    delete pMyRecordSet;
      

  4.   

    主要是个效率的问题,一个Cdatabase可以连接多个CDataSet.如果程序中用到多个CDataSet但每个连接的是同一个数据源,那么就没有必要每一个CDataSet去连接一遍,我们要做的是正确设置连接一个CDatabase,而CDataSet只需要Open()就可以了。