設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

12下一頁
返回列表 發(fā)新帖
查看: 6513|回復(fù): 10
打印 上一主題 下一主題

[ADO/DAO] 能解釋一下DAO與ADO否?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2003-12-31 08:18:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
問這個(gè)問題有點(diǎn)不知害臊的感覺,但厚著臉皮請教老師,望能簡單解釋一下兩者區(qū)別和在對表及記錄操作的句式.感激!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2003-12-31 17:37:00 | 只看該作者
看過一點(diǎn)vb的數(shù)據(jù)庫知識(shí),有一點(diǎn)模糊的理解,也不知道怎么樣。
dao主要是連接本地?cái)?shù)據(jù)表的,而ado是連接遠(yuǎn)程數(shù)據(jù)表的,ado更像一個(gè)數(shù)據(jù)接口。在vb6中,已經(jīng)漸漸放棄了dao而改為ado,估計(jì)以后對ado支持多點(diǎn),因?yàn)閷h(yuǎn)程和本地都支持。
兩個(gè)對數(shù)據(jù)庫的操作差不多,主要用recordset進(jìn)行操作。
有兩個(gè)典型的例子,data和adodc,前者用的是dao,后者用的是ado,在操作是,比如添加記錄,data1.recordset.addnew,另一個(gè)為adodc1.recordset.addnew。
具體到了dao和ado,我覺得就是連接語句不同,具體操作大致也差不多。
3#
 樓主| 發(fā)表于 2003-12-31 18:34:00 | 只看該作者
謝二樓老師。
既然ADO成為趨勢,這里我舉個(gè)例子請教,以便搞清一些概念。
假設(shè)窗體內(nèi)文本框用于輸入,有“確認(rèn)輸入”按鈕,單擊后將數(shù)據(jù)寫到表中。代碼如下

Private Sub 命令19_Click()
...
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
        rs.Open "訂單", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        rs.AddNew
        rs("訂單號(hào)") = Me.訂單號(hào)
        rs("客戶") = Me.客戶
        ....
        rs.Update
...
End Sub

執(zhí)行時(shí)沒問題。
問題是我想同時(shí)把某內(nèi)容寫到另一表中,該如何寫代碼(這里假設(shè)想同時(shí)把“訂單號(hào)”寫到表“庫存進(jìn)出"的”訂單號(hào)“字段中),
我是直接加了幾句:
        rs.Open "庫存進(jìn)出", CurrentProject.Connection, adOpenKeyset, dLockOptimistic
        rs.AddNew
        rs("訂單號(hào)") = Me.訂單號(hào)
        .......
        rs.Update
可是執(zhí)行時(shí)說對另一個(gè)表”....無法進(jìn)行操作..“,我想這里肯定因我不理解ADO而在基本概念上有問題。
肯請指點(diǎn)迷津。



[此貼子已經(jīng)被作者于2003-12-31 11:09:12編輯過]

4#
發(fā)表于 2004-1-1 04:56:00 | 只看該作者
在定義連接的時(shí)候,連接一個(gè)表或查詢,也就是說一個(gè)窗體對應(yīng)一個(gè)表或查詢,你沒有連接另一個(gè)表,當(dāng)然沒法打開。
access中的一個(gè)子窗體只能顯示一個(gè)表或查詢,道理差不多。
5#
 樓主| 發(fā)表于 2004-1-3 00:22:00 | 只看該作者
jhf大哥,
不如給俺指條道,在一個(gè)窗如何實(shí)現(xiàn)對兩個(gè)表寫入?一定要子窗嗎?
6#
發(fā)表于 2004-1-3 16:33:00 | 只看該作者
連接查詢,查詢也是一種表,可以由一個(gè)或幾個(gè)表組成。
rs.Open "訂單", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
你的這段代碼是干什么的?
7#
 樓主| 發(fā)表于 2004-1-4 19:35:00 | 只看該作者
這是我抄來的,當(dāng)初我也想了解這句的具體作用,沒有回答. 抄來先用了.
我還是那個(gè)問題,如何在一個(gè)窗體內(nèi)對兩個(gè)表同時(shí)做一些操作?
8#
發(fā)表于 2004-1-4 23:39:00 | 只看該作者
不太準(zhǔn)確但很實(shí)際的區(qū)分方法:
DAO為access數(shù)據(jù)庫專用,使用起來簡單方便,效率很高。
ADO可以連接許多數(shù)據(jù)庫 ,access數(shù)據(jù)庫只是其中一種。在VBA中使用起來比DAO麻煩,操縱Access數(shù)據(jù)庫的效率比DAO略高。
9#
 樓主| 發(fā)表于 2004-1-7 18:34:00 | 只看該作者
能否講一下或貼一下DAO的語句(或傳個(gè)例子)
比如定義變量,打開表、記錄,移動(dòng),修改,更新等。。。
謝謝!
10#
發(fā)表于 2004-1-8 16:16:00 | 只看該作者
dim rst as dao.recordset
dim wsp as workspace

set wsp=dbengine.workspaces(0)
wsp.bengintrans '開始事務(wù)
set rst=wsp.openrecordset("...",....,.......,...) '打開記錄集
or set rst=currentdb.openrecordset .....

rst.addnew  '新增
rst!... = ....   '各種賦值方法
rst.fleids(0).value=....
rst.fields("...").value=....
rst.fleids(1)=.....
....
rst.update  'update
rst.findfirst .... '查找,還 findnext ,findlast .....
'當(dāng)然,也有 seek,filter 等方法.
rst.edit  'edit
....
rst.update  'update
rst.delete
rst.movenext 'rst.movefirst ,....
rst.close  '關(guān)閉記錄集
wsp.rollbacktrans '回滾事務(wù)
or wsp.committrans   '提交事務(wù)

另,一般而言,對于 access 本地?cái)?shù)據(jù)庫, dao 比 ado 效率高
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 08:17 , Processed in 0.102423 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表