我在mfc中用ado连接数据库,想求出access数据库中某个表里的记录个数,怎么办?

解决方案 »

  1.   

    能说清楚一点吗,rs.GetRecordCount();
    rs是指 _RecordsetPtr m_pRecordset;里的m_pRecordset吗?
    select * from XX,          xx是指要查询的表对吧
      

  2.   


    CDatabase db;
    db.Open("你的数据库连接串");
    CRecordset rs(&db);
    rs.Open(CRecordset::forwardOnly,_T("select * from 表") );
    int count = rs.GetRecordCount();
    rs.close();
      

  3.   

    db.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\k.mdb","","",adModeUnknown);
    你的数据库连接串,这个没问题吧
    可是编译有2个错误error C2664: 'Open' : cannot convert parameter 2 from 'char [1]' to 'int'
            This conversion requires a reinterpret_cast, a C-style cast or function-style cast
    error C2039: 'close' : is not a member of 'CRecordset'
            d:\microsoft visual studio\vc98\mfc\include\afxdb.h(564) : see declaration of 'CRecordset'
    Error executing cl.exe.
      

  4.   


    把   \\  改成  ./  再试试Close 字母C得大写
      

  5.   

    第二个错误把close改成大写C
    第一个你在检查一下你的串吧
      

  6.   

    _ConnectionPtr m_pConnection;
    _RecordsetPtr m_pRecordSet;
    if (::CoInitialize( NULL ) == E_INVALIDARG)
    {
    AfxMessageBox(_T("初始化Com失败!"));
    exit(1);
        } HRESULT hr;
    try
    {
    hr = m_pConnection.CreateInstance(__uuidof (Connection));///创建Connection对象//
    if(SUCCEEDED(hr))
    {
    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Program Files\\SmartWorks\\DataBase\\CQ.mdb","","",adModeUnknown);     
    }
    }
    catch(_com_error e)///捕捉异常
    {
    CString errormessage;
    errormessage.Format("错误信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);///显示错误信息
    return;
    }

    try
    {

    m_pRecordSet.CreateInstance("ADODB.Recordset");
    _variant_t cnn;
    cnn = (IDispatch*)m_pConnection;
    m_pRecordSet->Open("select * from SWCQ",cnn,adOpenStatic,adLockOptimistic,adCmdText);

    }
    catch (_com_error e)
    {
    CString errormessage;
    m_pConnection->Close();
    errormessage.Format("错误信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);///显示错误信息
    return;
    }
    int count = m_pRecordSet->GetRecordCount();
      

  7.   

    我的程序是这样定义和连接的,是OK的:
    _ConnectionPtr m_pCon;
    _RecordsetPtr m_pRecord;
    AfxOleInit();
    m_pCon.CreateInstance(__uuidof(Connection));
    m_pRecord.CreateInstance(__uuidof(Recordset)); m_pCon->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; \
    Data Source=./etwldbs.mdb;Persist Security Info=False"; try
    {
    m_pCon->Open("","","",-1);
    }
    catch(...)
    {
    AfxMessageBox("数据库连接错误",0,0);
    return TRUE;
    }
      

  8.   

    我现在用mfc想要做一个对话框,想实现的功能是在对话框上放置几个按钮,当你按下其中某个按钮时, 
    程序从数据库中的前20条记录写到新文件中,产生这个新文件。显示出来。
    现在我在按钮的消息处理里已经连上了数据库,把它的内容已经输到了文件里了,现在就是想求出数据库表中的记录的个数,帮我看看吧
      

  9.   

    你读数据库的时候 选择Top 20 条写文件不就行了
      

  10.   

    不是,我的意思是生成一个html文件,要在该网页上显示出共有多少条新闻记录,所以要获得记录个数
      

  11.   

    我在程序里加了这句:
    int n=m_pRecordset->GetRecordCount();
    可调式结果n=-858993460
    我查了一下说可能是游标的问题,又加了2句
    m_pRecordset->CursorType = adOpenStatic;
    m_pRecordset->CursorLocation = adUseClient;
    可还是不对
      

  12.   

    你确定你已经正确读了数据库的表出来了?
    如果是这样有一个最笨的办法自己计算记录数.
    int i_Count=0;
    while (! m_pRecord->ADOEOF && !m_pRecord->BOF)
    {
    i_Count++;
    m_pRecord->MoveNext();
    }
      

  13.   

    谢谢你,
    int i_Count=0; 
    while (! m_pRecord->ADOEOF && !m_pRecord->BOF) 

    i_Count++; 
    m_pRecord->MoveNext(); 
    }
    可以得到记录个数,非常感谢