• _RecordsetPtr


    _RecordsetPtr智能指针,它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。

    如何读取数据库表内的数据。

    双击IDC_BTN_READREC按钮,并编辑OnBtnReadrec()函数如下:

    void CRecordsetPtrDlg::OnBtnReadrec()

    {

    _ConnectionPtr m_pConnection;

    _RecordsetPtr m_pRecordset;

    try{

    m_pConnection.CreateInstance(__uuidof(Connection));

    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb","","",adModeUnknown);

    }

    catch(_com_error e)

    {

    CString errormessage;

    errormessage.Format("连接数据库失败!/r错误信息:%s",e.ErrorMessage());

    AfxMessageBox(errormessage);

    return;

    }

    try

    {

    m_pRecordset.CreateInstance("ADODB.Recordset");

    m_pRecordset->Open("SELECT EmployeeID,FirstName,LastName,HireDate,City FROM Employees WHERE City='London'",

    _variant_t((IDispatch*m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

    }

    catch(_com_error &e)

    {

    AfxMessageBox(e.Description());

    }

    _variant_t  vEmployeeID,vFirstName,vLastName,vHireDate,vCity;

    try

    {

    while(!m_pRecordset->adoEOF)

    {

    vEmployeeID=m_pRecordset->GetCollect(_variant_t((long)0));//取得第1列的值,从0开始计数,你也可以直接列出列的名称,如下一行

    vFirstName=m_pRecordset->GetCollect("FirstName");

    vLastName=m_pRecordset->GetCollect("LastName");

    vHireDate=m_pRecordset->GetCollect("HireDate");

    vCity=m_pRecordset->GetCollect("City");

    CString strtemp;

    if(vEmployeeID.vt!=VT_NULL)

    {

    strtemp.Format("%d",vEmployeeID.lVal);

    }

    if(vFirstName.vt!=VT_NULL)

    {

    strtemp+=" ";

    strtemp+=(LPCTSTR)(_bstr_t)vFirstName;

    }

    if(vLastName.vt!=VT_NULL)

    {

    strtemp+=" ";

    strtemp+=(LPCTSTR)(_bstr_t)vLastName;

    }

    if(vHireDate.vt!=VT_NULL)

    {

    strtemp+=" ";

    strtemp+=(LPCTSTR)(_bstr_t)vHireDate;

    }

    if(vCity.vt!=VT_NULL)

    {

    strtemp+=" ";

    strtemp+=(LPCTSTR)(_bstr_t)vCity;

    }

    m_list1.AddString(strtemp);

    m_list1.AddString("/n");

    m_pRecordset->MoveNext();

    }

    }

    catch(_com_error &e)

    {

    AfxMessageBox(e.Description());

    }

    m_pRecordset->Close();

    m_pRecordset=NULL;

    m_pConnection->Close();

    m_pConnection=NULL;

    }

    该段代码演示了如何读取数据库表内的数据。其原理是如果没有遇到表结束标志adoEOF,则用GetCollect(字段名)来获取当前记录指针所指的字段值,然后再用MoveNext()方法移动到下一条记录位置。

    双击IDC_BTN_CHANGE按钮,并编辑OnBtnChange()函数如下:

    void CRecordsetPtrDlg::OnBtnChange()

    {

    _ConnectionPtr m_pConnection;

    _RecordsetPtr m_pRecordset;

    try

    {

    m_pConnection.CreateInstance(__uuidof(Connection));

    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb","","",adModeUnknown);

    }

    catch(_com_error e)

    {

    CString errormessage;

    errormessage.Format("连接数据库失败!/r错误信息:%s",e.ErrorMessage());

    AfxMessageBox(errormessage);

    return;

    }

    try

    {

    m_pRecordset.CreateInstance("ADODB.Recordset");

    m_pRecordset->Open("SELECT EmployeeID,FirstName,LastName,HireDate,City FROM Employees WHERE (City='London') AND (EmployeeID=6)",

    _variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

    }

    catch(_com_error &e)

    {

    AfxMessageBox(e.Description());

    }

    try

    {

    while(!m_pRecordset->adoEOF)

    {

    m_pRecordset->PutCollect("LastName",_variant_t("Jackson"));

    m_pRecordset->MoveNext();

    }

    m_pRecordset->Update();

    }

    catch(_com_error* e)

    {

    AfxMessageBox(e->ErrorMessage());

    }

    m_pRecordset->Close();

    m_pRecordset=NULL;

    m_pConnection->Close();

    m_pConnection=NULL;

    }

    该段代码演示了如何修改记录中的字段值:将记录指针移动到要修改记录的位置处,直接用PutCollect(字段名,值)将新值写入并Update()更新到数据库即可。移动记录指针可以通MoveFirst()方法移动到第一条记录,MoveLast()方法移动到最后一条记录,MovePrevious()方法移动到当前记录的前一条记录,MoveNext()方法移动到当前记录的下一条记录。也可以使用Move(记录号)移动记录指针到需要位置。注意:Move()方法是相对于当前记录来移动指针位置的。正值向后移动,负值向前移动。如Move(3),当前记录是3时,它将从记录3开始往后再移动3条记录位置。关于移动记录指针后面将会用到。

    双击IDC_BTN_NEW按钮,并编辑OnBtnNew()函数如下:

     

    void CRecordsetPtrDlg::OnBtnNew()

    {

    _ConnectionPtr m_pConnection;

     

    _RecordsetPtr m_pRecordset;

     

    try

    {

    m_pConnection.CreateInstance(__uuidof(Connection));

    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb","","",adModeUnknown);

    }

    catch(_com_error e)

    {

    CString errormessage;

    errormessage.Format("连接数据库失败!/r错误信息:%s",e.ErrorMessage());

    AfxMessageBox(errormessage);

    return;

    }

     

    try

    {

    m_pRecordset.CreateInstance("ADODB.Recordset");

    m_pRecordset->Open("SELECT * FROM Employees",

    _variant_t((IDispatch*)m_pConnection,true),

    adOpenStatic,

    adLockOptimistic,

    adCmdText);

    }

    catch(_com_error &e)

    {

    AfxMessageBox(e.Description());

    }

     

    try

    {

    m_pRecordset->MoveLast();

    m_pRecordset->AddNew();

    m_pRecordset->PutCollect("EmployeeID",_variant_t((long)10));

    m_pRecordset->PutCollect("FirstName",_variant_t("Mary"));

    m_pRecordset->PutCollect("LastName",_variant_t("Williams"));

    m_pRecordset->PutCollect("HireDate",_variant_t("15/4/1993 12:00:00"));

    m_pRecordset->PutCollect("City",_variant_t("New York"));

    m_pRecordset->PutCollect("Country",_variant_t("USA"));

     

    }

     

    catch(_com_error *e)

    {

    AfxMessageBox(e->ErrorMessage());

    }

     

    m_pRecordset->Update();

     

    m_pRecordset->Close();

    m_pRecordset=NULL;

    m_pConnection->Close();

    m_pConnection=NULL;

     

    }

    该段代码演示如何插入记录:

    先用AddNew()方法新增一个空记录,再用PutCollect(字段名,值)输入每个字段的值,最后用Update()更新到数据库即可。

     

    双击IDC_BTN_DELETE按钮,并编辑OnBtnDelete()函数如下:

    void CRecordsetPtrDlg::OnBtnDelete()

    {

    _ConnectionPtr m_pConnection;

     

    _RecordsetPtr m_pRecordset;

     

    try

    {

    m_pConnection.CreateInstance(__uuidof(Connection));

    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb","","",adModeUnknown);

    }

    catch(_com_error e)

    {

    CString errormessage;

    errormessage.Format("连接数据库失败!/r错误信息:%s",e.ErrorMessage());

    AfxMessageBox(errormessage);

    return;

    }

     

    try

    {

    m_pRecordset.CreateInstance("ADODB.Recordset");

    m_pRecordset->Open("SELECT * FROM Employees",

    _variant_t((IDispatch*)m_pConnection,true),

    adOpenStatic,

    adLockOptimistic,

    adCmdText);

    }

    catch(_com_error &e)

    {

    AfxMessageBox(e.Description());

    }

     

    try

    {

    //假设删除第10条记录

    m_pRecordset->MoveFirst();

    m_pRecordset->Move(9);

    m_pRecordset->Delete(adAffectCurrent);

    //参数adAffectCurrent为删除当前记录

    m_pRecordset->Update();

    }

    catch(_com_error *e)

    {

    AfxMessageBox(e->ErrorMessage());

    }

     

    m_pRecordset->Close();

    m_pRecordset=NULL;

    m_pConnection->Close();

    m_pConnection=NULL;

    }

     

    该段代码演示了如何删除记录:

    先将记录指针移动到要删除的记录的位置,直接用Delete()方法删除它,并用Update()来更新数据库即可。

     

    使用记录集操作完毕后要关闭记录集:

    直接用Close()方法关闭记录集并赋予其空值。代码如下:

    m_pRecordset->Close();

    m_pConnection->Close();

    m_pRecordset=NULL;

    m_pConnection=NULL;

  • 相关阅读:
    啥是IOC ?啥是DI ?
    Spring是什么?
    Javaweb实训-宠物医院-社区宠物医院登陆页面
    Javaweb实训-宠物医院-社区宠物医院的页面样式
    Bootstrap基础学习(二)
    Bootstrap基础学习(一)
    常用的几种清除float浮动的方法
    jquery的each遍历方法
    正则总结RegExp
    OpenWrt编译到底脚本
  • 原文地址:https://www.cnblogs.com/yaowen/p/2868550.html
Copyright © 2020-2023  润新知