设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 5282|回复: 10

[ADO/DAO] 能解释一下DAO与ADO否?

[复制链接]
发表于 2003-12-31 08:18:00 | 显示全部楼层 |阅读模式
问这个问题有点不知害臊的感觉,但厚着脸皮请教老师,望能简单解释一下两者区别和在对表及记录操作的句式.感激!
发表于 2003-12-31 17:37:00 | 显示全部楼层
看过一点vb的数据库知识,有一点模糊的理解,也不知道怎么样。
dao主要是连接本地数据表的,而ado是连接远程数据表的,ado更像一个数据接口。在vb6中,已经渐渐放弃了dao而改为ado,估计以后对ado支持多点,因为对远程和本地都支持。
两个对数据库的操作差不多,主要用recordset进行操作。
有两个典型的例子,data和adodc,前者用的是dao,后者用的是ado,在操作是,比如添加记录,data1.recordset.addnew,另一个为adodc1.recordset.addnew。
具体到了dao和ado,我觉得就是连接语句不同,具体操作大致也差不多。
 楼主| 发表于 2003-12-31 18:34:00 | 显示全部楼层
谢二楼老师。
既然ADO成为趋势,这里我举个例子请教,以便搞清一些概念。
假设窗体内文本框用于输入,有“确认输入”按钮,单击后将数据写到表中。代码如下

Private Sub 命令19_Click()
...
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
        rs.Open "订单", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        rs.AddNew
        rs("订单号") = Me.订单号
        rs("客户") = Me.客户
        ....
        rs.Update
...
End Sub

执行时没问题。
问题是我想同时把某内容写到另一表中,该如何写代码(这里假设想同时把“订单号”写到表“库存进出"的”订单号“字段中),
我是直接加了几句:
        rs.Open "库存进出", CurrentProject.Connection, adOpenKeyset, dLockOptimistic
        rs.AddNew
        rs("订单号") = Me.订单号
        .......
        rs.Update
可是执行时说对另一个表”....无法进行操作..“,我想这里肯定因我不理解ADO而在基本概念上有问题。
肯请指点迷津。



[此贴子已经被作者于2003-12-31 11:09:12编辑过]

发表于 2004-1-1 04:56:00 | 显示全部楼层
在定义连接的时候,连接一个表或查询,也就是说一个窗体对应一个表或查询,你没有连接另一个表,当然没法打开。
access中的一个子窗体只能显示一个表或查询,道理差不多。
 楼主| 发表于 2004-1-3 00:22:00 | 显示全部楼层
jhf大哥,
不如给俺指条道,在一个窗如何实现对两个表写入?一定要子窗吗?
发表于 2004-1-3 16:33:00 | 显示全部楼层
连接查询,查询也是一种表,可以由一个或几个表组成。
rs.Open "订单", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
你的这段代码是干什么的?
 楼主| 发表于 2004-1-4 19:35:00 | 显示全部楼层
这是我抄来的,当初我也想了解这句的具体作用,没有回答. 抄来先用了.
我还是那个问题,如何在一个窗体内对两个表同时做一些操作?
发表于 2004-1-4 23:39:00 | 显示全部楼层
不太准确但很实际的区分方法:
DAO为access数据库专用,使用起来简单方便,效率很高。
ADO可以连接许多数据库 ,access数据库只是其中一种。在VBA中使用起来比DAO麻烦,操纵Access数据库的效率比DAO略高。
 楼主| 发表于 2004-1-7 18:34:00 | 显示全部楼层
能否讲一下或贴一下DAO的语句(或传个例子)
比如定义变量,打开表、记录,移动,修改,更新等。。。
谢谢!
发表于 2004-1-8 16:16:00 | 显示全部楼层
dim rst as dao.recordset
dim wsp as workspace

set wsp=dbengine.workspaces(0)
wsp.bengintrans '开始事务
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 .....
'当然,也有 seek,filter 等方法.
rst.edit  'edit
....
rst.update  'update
rst.delete
rst.movenext 'rst.movefirst ,....
rst.close  '关闭记录集
wsp.rollbacktrans '回滚事务
or wsp.committrans   '提交事务

另,一般而言,对于 access 本地数据库, dao 比 ado 效率高
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-19 06:42 , Processed in 0.102273 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表