mfcaccess資料庫操作
1. mfc中access資料庫調用表問題
由於access不支持觸發器,要使用一句sql語句進行兩張表的插入會有困難,你建一個查詢然後進入sql視圖,然後在裡面分別寫兩個insert語句向兩張表裡增加數據就好了,使用的時候直接執行這個函數就可以實現給兩張表同時增加數據了。
2. MFC 通用操作Access 資料庫的驅動
MFC ODBC資料庫簡述
開放數據互連(Open Database Connectivity,簡稱ODBC)是一種資料庫的互操作平台,通過經嚴格定義的各個級別的ODBC介面和客戶系統的初始裝置,能夠為應用程序提供資料庫類型透明性和位置透明性,讓應用程序的編寫者避免了與數據源相聯的復雜性。MFC的資料庫擴展部分封裝了使用ODBC數據資源的細節,應用程序可以直接使用MFC中的資料庫擴展類,來操縱ODBC驅動程序管理器,訪問資料庫。進行MFC ODBC資料庫開發時,所需的基礎工具就是MFC ODBC資料庫類的使用。利用MFC ODBC開發就是利用MFC ODBC資料庫類來操縱ODBC數據源。Visual C++的大多數ODBC訪問是通過MFC來完成的。Visual C++的MFC類庫定義了幾個資料庫類,在利用MFC編程時常常用到,它們是CDatabase(資料庫類)、CRecordSet(記錄集類)、和CRecordView(可視記錄集類)。
對於MFC ODBC資料庫類來說,CDatabase類對象表示一個同數據源的連接,通過它可以對數據源進行操作。而CRecordSet對象代表從數據源中選擇的一組記錄的集合,也就是通常所說的記錄集對象。
CRecordSet對象通常用於兩種形式:動態集(dynasets)和快照集(snapshots)。動態集能與其他用戶所做的更改保持同步,快照集則是數據的一個靜態視圖。每一種形式在記錄被打開時都提供一組記錄,區別在於,當用戶在一個動態集里滾動到一條記錄時,有其他用戶或是應用程序中的其他記錄集所做的更改就會相應地顯示出來。CRecordView類對象能以控制的形式顯示資料庫記錄。這個視圖是直接連接到一個CRecordSet對象的表視圖。
一個應用實例
本實例是某項目中的一部分,目的是實現MFC ODBC資料庫與Access數據表格之間的相互操作。包括用Visual C++中的MFC ODBC技術實現對Access數據表格的內容的顯示、添加、修改和刪除的功能。
1、 ODBC數據源的創建
筆者使用的操作系統為Windows XP,工具是Visual C++6.0。此例中建立的Access表格取名為「plc」。
在「控制面板」中雙擊「管理工具」圖標,然後在新出現的窗口中雙擊「數據源(ODBC)」,在彈出的對話框中選中「用戶DSN」中的「dBASE Files」,單擊「添加」按鈕,從彈出的對話框中選中「Microsoft Access Driver(*.mdb)」。單擊「完成」後,將彈出一個新的對話框,在數據源名及說明後的編輯框中填入表格名「plc」。
在命名數據源之後,需要把它連接到一個資料庫。單擊「選擇」,如圖1所示,得到存儲在數據目錄中plc.mdb的拷貝文件,選中之,單擊「確定」關閉此對話框。然後單擊「確定」,完成數據源的創建。
3. 用MFC做成了一個軟體,資料庫是access,現在想做成可執行文件,直接移植到別的機器上能運行的,該怎麼做
你是不是用的ODBC進行連接access進行操作的,如果是那樣的話,
1. 你要在別的機器上設置一個ODBC的數據源,(就是把你的access文件加到這個數據源裡面)
或者
2. 你在程序中自動增加一個數據源,使用下面語句
SQLConfigDataSourceW(NULL,ODBC_ADD_DSN,
_T("Microsoft Access Driver (*.mdb)"),
_T("DSN=LibraryInfo\0Description=這個文件是用來儲存信息的\0FileType=Access\0 DBQ=..\\Library.mdb\0")
);
裡面的配置自己要修正下.
4. MFC通過ADO操作Access資料庫
vc 可以訪問很多資料庫,比如Access、SQL servel、MYSql、Orcal等資料庫系統。也有很多資料庫訪問技術,比如ADO、ODBC、OLE DB等。每一種資料庫系統都提供了一系列的API,在程序中可以通過編碼的形式調用相應的API進而對資料庫操作。
你學一個vc++訪問ADO資料庫吧,難點,但是很實用!
1、導入ADO庫
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用導入的動態庫的指針操作資料庫.
打開資料庫連接
_ConnectionPtr m_pConn; // 資料庫連接指針
// 創建Conneciton對象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn為你連接資料庫的信息,你應該按照你的要求打開資料庫,他裡麵包含了你的Access資料庫的路徑、名稱等待信息,,,是一個通用的字元串。
然後你用打開的那個連接進行操作資料庫。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作資料庫的SQL語句。在這個SQL語句里你可以創建表、更新表等。
用ADO訪問的時候要求初始他COM庫和釋放COM對象
// 初始化COM環境(庫)
::CoInitialize(NULL);
//釋放COM對象
::CoUninitialize();
5. 如何使用MFC連接ACCESS資料庫
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///
if( TRUE == SUCCEEDED(hr))
{
strDBFile = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strDBFile;
hr = m_pConnection->Open((_bstr_t)strDBFile ,_bstr_t(strUser),_bstr_t(strUser),adModeUnknown);
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("%s",e.ErrorMessage());
AfxMessageBox(errormessage);
return FALSE;
}
6. MFC對話框如何讀取access資料庫
首先在stdafx.h中添加如下
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
上面的路徑根據你自己的更改
然後在你要查詢的地方寫如下代碼:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));
pConn->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\a.mdb";
//這里的資料庫也是你的絕對路徑
pConn->Open("","","",adConnectUnspecified);
pRst = pConn->Execute("Select * from ...",NULL,adCmdText);
while(!pRst->rsEOF)
{
/*
這里寫你怎麼把數據讀取到外面,如下面是吧數據讀到一個ListB0x控制項中
((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("這里寫屬性名"));
*/
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
pCmd.Release();
CoUninitialize();
7. mfc中連接access資料庫的詳細步驟都是什麼
比如在你的工程目錄中建一個 dbf\vir.mdb //Access資料庫,然後你需要做以下操作:
1.在StadAfx.h裡面添加#include <afxdb.h> //新加入頭文件,用於CDatabase類。
2.在StadAfx.h最後的#endif上添加#import "msado15.dll" no_namespace rename("EOF","rsEOF")
這時,你要把msado15.dll拷到與dbf同級的目錄,也就是工程目錄里,當然你可以該路徑
3.在你自己的工程里,比如MyProc是你建的工程,添加代碼
CMyPorcApp::CMyProcApp(){
CoInitialize(NULL);
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",\
"DSN=MyImage;DBQ=dbf\\vir.mdb;DEFAULTDIR=dbf"); //注冊本地資料庫數據源
m_db.OpenEx("DSN=MyImage;;",CDatabase::noOdbcDialog);//MyImage是數據源名稱
}
4.在前面的函數體之前創建全局變數CDatabase m_db; CRecordset m_rec(&m_db);
5.使用資料庫{
CString strSQL="select * from virdb";
BSTR bstrSQL=strSQL.AllocSysString();
m_rec.Open(CRecordset::dynaset,strSQL);
while(!m_rec.IsEOF())
{
// 使用資料庫的代碼,讀出來的數據都是字元串型的
CString MyVirable;
m_rec.GetFieldValue("欄位名",MyVirable); //將某個欄位的當前行的值讀到MyVirabl中
// ......
m_rec.MoveNext(); //將記錄移到下一行
}
}
本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.
8. MFC做的登錄界面連接access資料庫
剛剛寫了個access的系統
.cpp中
//hxx函數主要用於打開資料庫連接
void ADOConn::OnInitADOConn()
{
::CoInitialize(NULL); //why初始化OLE/COM庫環境
try
{
m_pCon.CreateInstance("ADODB.Connection"); //創建Connection對象
m_pCon->ConnectionTimeout=3; //設置連接延時
//設置連接字元串why
//m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=InfoMan.mdb","","",adModeUnknown);
m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=InfoMan.mdb;Persist Security Info=False;Jet OLEDB:Database Password=1234","","",adModeUnknown); }
catch(_com_error e) //捕獲異常
{
AfxMessageBox(e.Description()); //顯示錯誤信息
}
}
.h中
#import "G:\\MY_PRO\\InfoMan\\msado15.dll"no_namespace\
rename("EOF","adoEOF")
_ConnectionPtr m_pCon; //添加一個指向Connection對象的指針
_RecordsetPtr m_pRs; //添加一個指向Recordset對象的指針
9. MFC中如何連接access資料庫
比如在你的工程目錄中建一個 dbfvir.mdb //Access資料庫,然後你需要做以下操作:
1.在StadAfx.h裡面添加#include <afxdb.h> //新加入頭文件,用於CDatabase類。
2.在StadAfx.h最後的#endif上添加#import "msado15.dll" no_namespace rename("EOF","rsEOF")
這時,你要把msado15.dll拷到與dbf同級的目錄,也就是工程目錄里,當然你可以該路徑
3.在你自己的工程里,比如MyProc是你建的工程,添加代碼
CMyPorcApp::CMyProcApp(){
CoInitialize(NULL);
SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)",
"DSN=MyImage;DBQ=dbf\vir.mdb;DEFAULTDIR=dbf"); //注冊本地資料庫數據源
m_db.OpenEx("DSN=MyImage;;",CDatabase::noOdbcDialog);//MyImage是數據源名稱
}
4.在前面的函數體之前創建全局變數CDatabase m_db; CRecordset m_rec(&m_db);
5.使用資料庫{
CString strSQL="select * from virdb";
BSTR bstrSQL=strSQL.AllocSysString();
m_rec.Open(CRecordset::dynaset,strSQL);
while(!m_rec.IsEOF())
{
// 使用資料庫的代碼,讀出來的數據都是字元串型的
CString MyVirable;
m_rec.GetFieldValue("欄位名",MyVirable); //將某個欄位的當前行的值讀到MyVirabl中
// ......
m_rec.MoveNext(); //將記錄移到下一行
}
}
本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.