VC读取Access数据库三种方法。



CString GetCurrentPath()
{
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();


char a = '\\';

int nPos=sPath.ReverseFind(a);
sPath=sPath.Left (nPos);
return sPath;

}

SCOTT_SALGRADE
GRADELOSALHISAL
17001200
212011400
314012000
420013000
530019999

法一CDaoDatabase和 CDaoRecordset

void CMy032901Dlg::OnButton1()
{
CDaoDatabase db; //数据库
CDaoRecordset RecSet(&db); //记录集


CString strFile = GetCurrentPath()+"\\testdb.mdb";
CFileFind  fFind;
BOOL bSuccess =fFind.FindFile(strFile);
fFind.Close();
if(!bSuccess)
{
AfxMessageBox("mdb文件不存在!");
return;
}


COleVariant var; // 字段类型
var.ChangeType(VT_BSTR, NULL);
CString co1,co2,co3;


//清空列表框
m_AccessList.ResetContent();
db.Open(strFile); // 打开已创建的demo数据库及DamoTable表
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM SCOTT_SALGRADE",NULL);


while(!RecSet.IsEOF()) // 有没有到表结尾
{
RecSet.GetFieldValue("GRADE",var);
co1 = (LPCSTR)var.pbstrVal;


RecSet.GetFieldValue("LOSAL",var);
co2 = (LPCSTR)var.pbstrVal;


RecSet.GetFieldValue("HISAL",var);
co3 = (LPCSTR)var.pbstrVal;
m_AccessList.AddString(co1+ " --> "+co2+"-->"+co3);
RecSet.MoveNext();
}
//关闭记录集及库
RecSet.Close();
db.Close();
}

方法二:CDatabase和CRecordset
#include <AFXDB.H>
void CMy032901Dlg::OnButton5()
{
CDatabase m_db;
CRecordset rs(&m_db);


CString strFile = GetCurrentPath()+"\\testdb.mdb";
CFileFind  fFind;
BOOL bSuccess =fFind.FindFile(strFile);
fFind.Close();
if(!bSuccess)
{
AfxMessageBox("mdb文件不存在!");
return;
}


TRY
{
COleVariant var; // 字段类型
var.ChangeType(VT_BSTR, NULL);
CString co1,co2,co3;


CString strConnect;
strConnect.Format(_T("ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};UID=sa;PWD=;DBQ=%s"), strFile);

if(m_db.Open(NULL, FALSE, FALSE, strConnect))
{
//连接数据库成功

CString strSql;
strSql = _T("select * from SCOTT_SALGRADE");
rs.Open(CRecordset::forwardOnly,strSql,CRecordset::readOnly);
while(!rs.IsEOF())
{
rs.GetFieldValue("GRADE",co1);
rs.GetFieldValue("LOSAL",co2);
rs.GetFieldValue("HISAL",co3);
m_AccessList.AddString(co1+ " --> "+co2+"-->"+co3);
rs.MoveNext();
}
m_db.Close();
}
}
CATCH(CDBException,e)
{
AfxMessageBox("Database Error:" + e->m_strError);
}
END_CATCH;
}


方法三:OLEDB

#import "C:Program Files/Common Files/System/ado/msado15.dll" rename("EOF", "adoEOF")
using namespace ADODB;
void CMy032901Dlg::OnButton6() 
{
CString strFile = GetCurrentPath()+"\\testdb.mdb";
CFileFind  fFind;
BOOL bSuccess =fFind.FindFile(strFile);
fFind.Close();
if(!bSuccess)
{
AfxMessageBox("mdb文件不存在!");
return;
}


_ConnectionPtr pConnection;
    if(pConnection.CreateInstance(__uuidof(Connection)) != S_OK)
    {
        return ;
    }
CString strConnect;
    strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"), strFile);
if(!pConnection->Open(_bstr_t(strConnect), "", "", adModeUnknown) == S_OK)
{
return ;
}
//连接数据库成功
_RecordsetPtr pRecordset;
if(pRecordset.CreateInstance(__uuidof(Recordset)) != S_OK)
{
pConnection->Close();
return ;
}


CString strSql = _T("select * from SCOTT_SALGRADE");
HRESULT hr = pRecordset->Open(_bstr_t(strSql), 
_variant_t((IDispatch*)pConnection, TRUE), 
adOpenUnspecified, adLockUnspecified, adCmdUnknown );
if(hr != S_OK)
    {
        pConnection->Close();
        return ;
    }


CString co1,co2,co3;
double d1,d2;
_variant_t vt;
pRecordset->MoveFirst();
while(!pRecordset->adoEOF)
    {
        vt = pRecordset->Fields->GetItem("GRADE")->Value;
co1= vt.bstrVal;


vt = pRecordset->Fields->GetItem("LOSAL")->Value;
co2.Format("%d",vt.iVal);


vt = pRecordset->Fields->GetItem("HISAL")->Value;
co3.Format("%d",vt.dblVal);


m_AccessList.AddString(co1+ " --> "+co2+"-->"+co3);
        pRecordset->MoveNext();
    }
pConnection->Close();

}


  • 0
    点赞
  • 1
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

我爱大家369

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值