程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> vc對Access數據庫訪問方法

vc對Access數據庫訪問方法

編輯:vc教程

在StdAfx.h文件中,#endif // _AFX_NO_AFXCMN_SUPPORT之前,加入:
#import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF")
接著, 在My.cpp文件InitInstance方法中, AfxEnableControlContainer();之前,加入:
 if(!AfxOleInit())  //初始化
 { AfxMessageBox( " initialize false!" ); }
我定了一個類,方便使用:

// ADODB.h
class CADODB
...{
public:
    _ConnectionPtr m_pConnection;
    _RecordsetPtr m_pRecordset;
    _CommandPtr m_pCommand;
    BOOL bOpenDB;
    CString m_strSQL;

    CADODB();
    void ADOConnection();    //打開連接數據庫
    void ADOClose();    //關閉斷開數據庫
    BOOL ADOUpdata(CString strCommand);     //更新操作,新建,刪除,修改
    _RecordsetPtr ADOSelect(CString strCommand);     //返回查詢結果集
};
extern CADODB ADOCtrl;
 

//ADODB.cpp

CADODB ADOCtrl;

CADODB::CADODB()
...{                   bOpenDB = FALSE;
}

void CADODB::ADOConnection()
...{    CHAR DBfilePath[MAX_PATH];
    CString m_strdir;
   
    m_pConnection.CreateInstance("ADODB.Connection");
    m_pRecordset.CreateInstance("ADODB.Recordset");
    m_pCommand.CreateInstance("ADODB.Command");

    GetCurrentDirectory(MAX_PATH,DBfilePath);
    m_strdir.Format("%sconfig.udl",DBfilePath);  這裡使用.udl連接文件, 我是udl,mdb,exe都放在同一目錄下
    strtemp.Format("File Name=%s",m_strdir);
    m_pConnection->ConnectionString = (_bstr_t)strtemp;   注意使用時,數據類型變換
    m_pConnection->Open("","","",NULL);
    m_pCommand->ActiveConnection = m_pConnection;
    bOpenDB = TRUE;   
}

void CADODB::ADOClose()
...{    if (bOpenDB)
    ...{
        m_pConnection->Close();
        m_pConnection.Release();
        m_pRecordset.Release();
        m_pCommand.Release();
    }
}

BOOL CADODB::ADOUpdata(CString strCommand)
...{
    if (!bOpenDB)
    ...{    return FALSE;    }

    m_pCommand->CommandText = (_bstr_t)strCommand;
    m_pCommand->Execute(NULL,NULL,adCmdText);          //執行操作

    return TRUE;
}

_RecordsetPtr CADODB::ADOSelect(CString strCommand)
...{
    if (!bOpenDB)
    ...{    return NULL;     }

    m_pCommand->CommandText = (_bstr_t)strCommand;
    return m_pCommand->Execute(NULL,NULL,adCmdText);
}
使用舉例:

 ADOCtrl.m_strSQL.Format("SELECT * FROM MyTable");  //SQL語句
 ADOCtrl.ADOConnection();
 ADOCtrl.m_pRecordset = ADOCtrl.ADOSelect(ADOCtrl.m_strSQL);
 while( !ADOCtrl.m_pRecordset->adoEOF )
 ...{   //獲取字段信息, 注意字符類型變換: CString <-> CHAR* <-> _bstr_t
  CString str = (CHAR*)(_bstr_t)ADOCtrl.m_pRecordset->GetCollect("NAME");
  ADOCtrl.m_pRecordset->MoveNext();
 }
 ADOCtrl.ADOClose();

 ADOCtrl.m_strSQL.Format("INSERT INTO MyTable(NAME,AGE) VALUES ('%s','%d')",myname,age);
 //SQL語句
 ADOCtrl.ADOConnection();
 ADOCtrl.ADOUpdata(ADOCtrl.m_strSQL);  //插入一條記錄
 ADOCtrl.ADOClose();
PS:
// Get the max ID value;
ADOCtrl.m_strSQL.Format("SELECT MAX(ID) as mID FROM GeneralTable");
ADOCtrl.m_pRecordset = ADOCtrl.ADOSelect(ADOCtrl.m_strSQL);
_variant_t mmID = ADOCtrl.m_pRecordset->GetCollect("mID");
int newID = ++mmID.intVal;  //將_variant_t的數據類型變成整型

關於.udl的使用:

1."提供程序"->選擇:Microsoft Jet 4.0 OLE DB Provider;

2."連接"->輸入數據庫名稱(可直接寫數據庫名, 不要加地址);登錄信息不動;

3."所有"->Data Source 的值為 數據庫名全稱

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved