如何将access中的数据一行行的提取呀!!!!
请高手指点,给一段代码研究一下谢谢
 [email protected]

解决方案 »

  1.   

    //Alon
    //ADO 操作数据库
    1.
    //头文件StdAfx.h要添加的内容 下面两行写在同一行
    #import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile")  
    rename("BOF","FirstOfFile")
    #include "ICRSINT.H"2.在App类中申明变量:
        _ConnectionPtr m_pCon; //连接对象3.
    //数据库的初始化函数类似如下:
    //在App类的 InitInstance() 开始处调用此函数
    void CXXApp::InitDB()
    {
        //连接数据库
        //初始化环境
        ::CoInitialize(NULL);    HRESULT hr;
        try
        {
            //创建Connection对象
            hr= m_pCon.CreateInstance("ADODB.Connection");        //注:oracle 操作更新数据库要加语句: (9i好像不需要,不清楚,还需验证)
            //m_pCon->CursorLocation=adUseClient;                if(SUCCEEDED(hr))
            {
                //连接数据库
                CString strLinkStr="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial  
    Catalog=DBJFDB;password='c00202';Data Source=NORSSION-SERVER";
                hr = m_pCon->Open((_bstr_t)strLinkStr,"","",adModeUnknown); //第一个参数也可以直接用数据源的名称,第 
    //二个参数为用户名,第三个为密码。当采用数据源的方式,用户名和密码必填(Access空密码除外)
            }
        }
        catch(_com_error e)///捕捉异常
        {
            CString errormessage;
            errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
            AfxMessageBox(errormessage);///显示错误信息
            
        }
    }4.
    //数据库的退出处理:
    int CXXApp::ExitInstance() 
    {
        //数据库的释放
        if(m_pCon->State)
        {
            m_pCon->Close();
            m_pCon= NULL;
        }
        return CWinApp::ExitInstance();
    }5.
    //在其他类中使用时,先要声明变量:
    //文件的开头处要申明变量: extern CXXApp theApp; 
    //CXXApp 为应用程序类名 改成相应自己的内容6.
    //数据库操作(1)添加:    //    连接对记录集对象
        _RecordsetPtr m_pRs;
        m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口    try  
        {
            CString strRecordSet;
            strRecordSet="SELECT * FROM TABLE "; //  TABLE为表名
            m_pRs->Open((_bstr_t)strRecordSet,
                variant_t((IDispatch*)theApp.m_pCon,true),
                adOpenDynamic,
                adLockOptimistic,
                adCmdText);        // 写入各字段值
            _variant_t vTemp;
            m_pRs->AddNew();
            vTemp.SetString("13002900000"); //也可以用变量代替 
            m_pRs->PutCollect("MobileNo",vTemp);
            vTemp.Clear();        //..类似写入其他字段
        }
        catch(_com_error e)
        {
            CString errormessage;
            errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
            AfxMessageBox(errormessage);///显示错误信息
        }
    (2)删除    //    连接对记录集对象
        _RecordsetPtr m_pRs;
        m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口    try  
        {
            CString strRecordSet;
            strRecordSet="SELECT * FROM TABLE "; //  TABLE为表名
            m_pRs->Open((_bstr_t)strRecordSet,
                variant_t((IDispatch*)theApp.m_pCon,true),
                adOpenDynamic,
                adLockOptimistic,
                adCmdText);        //删除
            if(VARIANT_FALSE == m_pRs->EndOfFile)  //有纪录选出才操作
            {
                while(!m_pRs->EndOfFile)
                {    
                    //删除当前纪录
                    m_pRs->Delete(adAffectCurrent);
                    m_pRs->MoveNext();
        
    //                //记录集指针移一条(只删除一条选择的纪录,去掉while循环,用此部分)
    //                if(VARIANT_FALSE == m_pRs->EndOfFile)
    //                {
    //                    m_pRs->MoveNext();
    //                }
    //                else //到了最后一条则移到第一条
    //                {
    //                    m_pRs->MovePrevious();
    //        
    //                }
                }
            }
        }
        catch(_com_error e)
        {
            CString errormessage;
            errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
            AfxMessageBox(errormessage);///显示错误信息
        }(3)更新、修改    //    连接对记录集对象
        _RecordsetPtr m_pRs;
        m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口    try  
        {
            CString strRecordSet;
            strRecordSet="SELECT * FROM TABLE "; //  TABLE为表名
            m_pRs->Open((_bstr_t)strRecordSet,
                variant_t((IDispatch*)theApp.m_pCon,true),
                adOpenDynamic,
                adLockOptimistic,
                adCmdText);        //修改
            _variant_t vTemp;
            vTemp.SetString("Hello"); //也可以用变量代替 
            m_pRs->Update("Name",vTemp);  //"Name"可用一个_variant_t 变量代替
        }
        catch(_com_error e)
        {
            CString errormessage;
            errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
            AfxMessageBox(errormessage);///显示错误信息
        }(4)读表字段    //    连接对记录集对象
        _RecordsetPtr m_pRs;
        m_pRs.CreateInstance("ADODB.Recordset"); //准备数据库记录集接口    try  
        {
            CString strRecordSet;
            strRecordSet="SELECT * FROM TABLE "; //  TABLE为表名
            m_pRs->Open((_bstr_t)strRecordSet,
                variant_t((IDispatch*)theApp.m_pCon,true),
                adOpenDynamic,
                adLockOptimistic,
                adCmdText);        //读字段 
            //循环读入参考上面删除部分
            _variant_t vTemp;
            CString strName;
            vTemp=m_pRs->GetCollect("Name");
            strName=(char *)(_bstr_t)vTemp;
            vTemp.Clear();
            
            int nAge;
            vTemp=m_pRs->GetCollect("Age");
            nAge=atoi((_bstr_t)vTemp);
            
        }
        catch(_com_error e)
        {
            CString errormessage;
            errormessage.Format("严重错误!\r\n错误信息:%s",e.ErrorMessage());
            AfxMessageBox(errormessage);///显示错误信息
        }
      

  2.   

    VC6.0实践与提高——数据库编程篇  循序渐进VC6.0
    都有使用access的数据库编程例子
      

  3.   

    用CDaoRecordset类吧,简单得不行了。我也就会这种。
      

  4.   

    msdn上例子就不少
    或者去vckbase上载下一两个例子来看看应该没有问题