我在網上想尋找乙個使用
cdao*
類來從資料表讀出或寫入資料資料,但是我沒有得到什麼線索。現在自己完成了這個功能,從乙個微軟的
access
檔案(.mdb
)檔案中快速、動態、簡便的建立/寫入
/讀出資料
。我們的例子是乙個基於對話方塊的程式。
設計我們的介面
為了建立我們的資料庫介面,首先我們應該在工程的
stdafx.h
檔案中加入
afxdao.h
的宣告。
我們將會用到兩個類
cdaodatabase
和cdaorecordset
,在程式中需要用到這兩個類的地方構造它們:
cdaodatabase database;
cdaorecordset recordset(&database);
建立我們的資料庫檔案
如果我們動態的建立乙個
access
檔案,我們不需要使用
cdaodatabase::open()
,因為create()
函式將自動的為我們開啟我們連線的資料庫:
cstring lpszfile = "c://database.mdb";
database.create(lpszfile);
開啟乙個已經存在的資料庫檔案
database.open(lpszfile);
很好,現在我們已經成功的連線到了乙個資料庫中,接下來我們可以向資料表中寫入資料了。這裡先介紹一些資料表的結構,這對你將來從事資料庫開發是有好處的。
乙個資料表是一系列的資料單。你可以在乙個資料庫檔案中使用多個資料表,每乙個資料表由行
(rows)
和列(columns)
組成。對應與乙個行和列的值叫做字段(
field
)。下面是乙個標準的資料表的圖示:
現在讓我們返回主題。我們首先需要在我們的資料庫檔案中建立乙個資料表。怎麼做呢
?我們通過建立乙個
sql執行字串來告訴我們的資料庫例項來執行它,例如
:cstring sqlcmd = "create table mytable
(name varchar(20),age varchar(3));";
database.execute(sqlcmd);
上面的sql
命令在我們的資料庫檔案中建立了乙個新的叫做
mytable
的資料表。它有兩列,乙個是
name
,一類是
age。
name
列的資料限制在
20個字元,
age列的資料限制在
3個字元。很簡單吧。
注意:在乙個檔案中不能建立同名資料表,除非你先通過使用正確的
sql字串呼叫
execute()
函式,刪除這個表。
在新的資料表中加入資料
用cdaorecordset
例項開啟我們的資料庫,當我們第一次建立它時,我們將有乙個
cdaodatabase
例項的指標,現在他們都被連線了。為了開啟我們的記錄並寫入資料,我們做下面的**:
recordset.open(afx_dao_use_default_type,
"select * from mytable", 0);
database.execute("insert into mytable(name);");
database.execute("insert into mytable(age);");
recordset.addnew();
recordset.setfieldvalue("name","chris");
recordset.setfieldvalue("age","13");
recordset.update();
recordset.movenext();
recordset.addnew();
recordset.setfieldvalue("name","joe");
recordset.setfieldvalue("age","20");
recordset.update();
下面我們來具體說明一下上面**的意義:
1.我們使用
sql命令
select * from mytable
開啟記錄例項。這意味著開啟函式將得到
mytable
資料表中的所有可以訪問的資料,不管是寫或是讀。
2.使用
sql字串呼叫
execute()
來在資料表中加入兩個新的列。
3.呼叫
addnew()
,允許我們加入乙個新的資料
4.兩次呼叫
setfieldvalue
,分別為同一行三上的兩列加入資料。
5.呼叫
update()
更新資料表的資料。
6.呼叫
movenext()
把記錄指標移向下乙個空行,再重複上面的加入資料的方法。
以上就是全部的向資料表中加入資料的方法,下面我們介紹如何從資料表中讀出資料。這部分也是相當簡單且容易理解的。
cdaorecordset::getfieldvalue()
函式有兩個引數,乙個是我們想得到資料的列的名稱,它與記錄指標的當前位置相對應,我們可以通過呼叫下面的函式自由的移動它:
::seek();
::movefirst();
::movenext();
::moveprev();
::movelast();
第二個引數是乙個
colevariant
例項,colevariant
是乙個基於
com的物件。我們的字段資料將被儲存在這個物件中,但是把這個儲存物件轉換到我們可以識別的
cstring
變數是我們所需要的,下面的**就是來完成這個工作:
colevariant olevar;
確認我們的
cdaorecordset
例項已經被開啟,我們呼叫
while(!recordset.iseof());
changetype()
方法把colevariant
例項轉換到
bstr
(一種晦澀的字串格式)。然後我們
pbstrvalue
方法把格式轉換為
cstring
,我們可以在任何需要的地方使用它。這些可以重複使用知道到達資料表中記錄的末尾。
相信以上的說明對你有所幫助。
直接通過DAO讀寫Access檔案
直接利用dao來建立 讀寫access檔案,總的說來,比直接通過odbc讀 寫excel檔案來講,要簡單一些。在下面的示例中,我們將用到兩種方法 sql和dao類函式來混合實現它們,這樣做的目地,我想可以使大家更加方便靈活的運用它們來完成你想要做的東西。在示例程式中預設指定建立資料庫名為 demo....
利用DAO來建立 讀寫Access檔案操作例項
下面讓我們來簡要看看它的實現步驟 1.首先,應確保包含進了afxdao.h標頭檔案,可以在stdafx.h檔案中包含它,如下 include 加入dao資料庫支援2.宣告dao庫及其記錄集變數,可在你的實現檔案中加入下面 cdaodatabase db 資料庫 cdaorecordset recse...
用DAO讀取access使用者表的資訊
下面演示了怎麼用dao讀某個資料庫裡面的所有使用者表的資訊 cstringarray tablename array cstringarray fieldname array cdaotabledefinfo table info 表的資訊 cdaodatabase db 在之前已經open資料庫 ...