data控件和ado、dao控件是同一层次(范畴)的概念吗?ado和dao的本质区别是什么?

jiutiwen 2011-03-03 03:38:04
刚学vb数据库编程.怎么那么多概念?又是ado,又是dao,还有什么visdata,还要什么odbc数据源设置.控件又一大堆,什么data,datagrid,msflexgrid,mshflexgrid.

晕死了.干嘛弄那么多概念啊?看半天了我都弄不清它们哪个归属哪个,哪个和哪个是同一层级概念,哪个先哪个后.数据库就只个把数据库里的数据绑定text或label之类的控件,然后能给我显示和增删改就完了吧?弄那么复杂?自己试了下还出来什么"找不到isam"错误.

看了一天了,实在是绕在里面头晕,抓不住头绪,哪位前辈能不能通俗点帮忙理顺下:
---------------------------------------------------
1.data控件和ado、dao控件是同一层次(范畴)的概念吗?

2.ado和dao的本质区别是什么?是不是ado就是dao的高级版?

3.msflexgrid和mshflexgrid这两个控件之所以存在是不是就是因为data控件是不能"一次性显示全部数据"(data控件本身根本不能显示数据?)。
----------------------------------------------------
主要是先后主次层次搞不清,晕死了。多谢!!100分敬上.
...全文
183 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbcontrols 2011-03-03
  • 打赏
  • 举报
回复
绑定对 ActiveX 部件性能的影响


绑定是指确定要设置的属性或方法调用属于哪个对象变量的过程。这构成了属性或方法调用的一部分开销。

过程调用所需的时间取决于两个因素:

执行过程要做的任务所需的时间,诸如计算矩阵的行列式等。


将参数放在栈上,调用该过程,以及返回所需的时间。
作为部件的设计人员,应尽可能最小化第一项。至于第二项,则不是设计人员能完全控制的。

方法调用的开销取决于 Visual Basic 为该方法调用使用的绑定类型,后者又取决于客户端应用程序声明对象变量的方式,而这又取决于该客户端应用程序的开发者。

为了确保使用部件的开发者能获得最佳的性能,该部件的帮助文件中应该包含这个主题的信息。

注意 绑定会影响所有的属性和方法调用,包括部件内的对象互相发出的调用。因此绑定也会影响部件的内部性能。

绑定的类型
在自动化中主要有两种绑定类型:后期绑定和前期绑定。前期绑定又分为两种类型,分别称之为 DispID 绑定和 vtable 绑定。后期绑定最慢,vtable 绑定最快。

后期绑定
若将一个变量声明为 As Object 或 As Variant,Visual Basic 在编译时就无法确定该变量将引用哪种类型的对象。因此,Visual Basic 必须使用后期绑定,在运行时确定对象的属性和方法能否使用该变量。

注意 后期绑定也可用于声明为 As Form 或 As Control 的变量。

若使用后期绑定,则每次调用属性或方法时,Visual Basic 都要将成员名传给该对象 IDispatch 接口的 GetIDsOfNames 方法。GetIDsOfNames 返回该成员的派遣 ID,或 DispID。Visual Basic 再将该 DispID 传给 IDispatch 接口的 Invoke 方法来调用该成员。

对进程外部件而言,这意味着一次额外的跨进程方法调用,结果是调用开销翻番。

注意 不可以直接调用 IDispatch 接口的任何方法,因为在 Visual Basic 类型库中这个接口被标记为隐式的,而且受到限制。

前期绑定
如果在编译时 Visual Basic 能够知道属性或方法所属的对象,就可以预先查找该成员在类型库中的 DispID 或 vtable 地址。这样就无须在运行时调用 GetIDsOfNames。

当显式声明了变量的类时,例如 As Widget,该变量就只能存放该类的对象的引用。Visual Basic 就可以为该变量调用的所有属性和方法使用前期绑定。

建议在 Visual Basic 和应用程序中使用这种方法来声明对象变量。

重点 使用前期绑定还是后期绑定完全取决于声明变量的方式。对象的创建方式对此没有任何影响。

提示 前期绑定有效地减少了设置或获取属性值所需的时间,因为调用开销在整个调用时间中占相当大的比例。

vTable 绑定
vtable 绑定是最快的前期绑定方式。在这种方式下,Visual Basic 使用了虚拟函数表或 vtable 中的偏移量。Visual Basic 尽可能地使用 vtable 绑定。

Visual Basic 类模块创建的对象支持所有三种绑定方式,因为它们有双重接口(从 IDispatch 派生出 vtable 接口)。

如果客户端应用程序使用类名显式地声明变量,Visual Basic 对象将总是属于 vtable 范围。使用 vtable 绑定调用 Visual Basic 创建的进程内部件的方法所需的开销与调用 DLL 中的函数所需开销差不多。

注意 对进程内部件而言,vtable 绑定的开销远小于使用 DispID 绑定所需开销。对进程外部件而言,改善没有这么大,因为开销的主要部分来自方法参数的调度。

DispID 绑定
如果部件具有类型库但不支持 vtable 绑定,Visual Basic 将使用 DispID 绑定。在编译时,Visual Basic 将查找属性和方法的 DispID,从而在运行时不必在调用 Invoke以前调用 GetIDsOfNames。

注意 尽管可以确认是否使用了前期绑定(通过明确地声明变量的类类型),但是使用 DispID 绑定还是使用 vtable 绑定则是由部件决定的。使用 Visual Basic 编写的部件总是支持 vtable 绑定的。
jiutiwen 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dbcontrols 的回复:]
以你现有的阶段可以这么理解
这么说吧,绑定了数据不安全,直接修改数据库,没有检查和校验
[/Quote]
dao和ado方式算"绑定"吗?哪种方式算"绑定"的?不好意思
jiutiwen 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ybh37 的回复:]
data和dao/ado的本质区别??
这里的data是一个数据库访问控件。
ao/ado、OLEDB、 ODBC 是数据库访问方式。
[/Quote]
我在有的书里又看到什么"ado data控件"之类的提法,是不是也有"dao data控件"?那意思就是说---通过data控件----然后用dao或ado方式去访问数据库?
"data控件"单独是不能使用的,必须和某个访问方式比如ado/dao结合才能?
谢谢!!
jiutiwen 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ybh37 的回复:]
建议LZ
再说,直接 OLEDB方式 访问数据库就可以了,整控件干嘛~~~~

msflexgrid和mshflexgrid这两个东西跟Datagrid 为MS设计的三个表格控件。msflexgrid由于一些问题,MS已经不建议大家使用了……
[/Quote]
1.我其实只要给实现把数据库里的数据显示在text文本框控件中,然后能增删改就行了,这个还是要用data或ado,dao之类的吧?

2.两个flexgrid是"表格"呵,其它的都不能以"表格"形式展示数据,这个明了了,谢谢!!

3.我在有的书里又看到什么"ado data控件"之类的提法,难道还有"dao data控件"?然后"data控件"单独又可以使用?
dbcontrols 2011-03-03
  • 打赏
  • 举报
回复
以你现有的阶段可以这么理解
这么说吧,绑定了数据不安全,直接修改数据库,没有检查和校验

[Quote=引用 6 楼 jiutiwen 的回复:]
引用 4 楼 dbcontrols 的回复:
不提倡使用数据绑定

数据绑定是不是就是指data控件的?dao和ado就不是"绑定"?-----而且这也就是data和dao/ado的本质区别?
[/Quote]
咸清 2011-03-03
  • 打赏
  • 举报
回复
泰山将的所谓不提倡使用数据绑定,是指VB6.0平台下数据绑定技术尚未成熟。
data和dao/ado的本质区别??
这里的data是一个数据库访问控件。
ao/ado、OLEDB、 ODBC 是数据库访问方式。
jiutiwen 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ybh37 的回复:]
建议LZ
抛开所谓的各个控件,理解数据库访问的步骤、大概原理就可以了。

再说,直接 OLEDB方式 访问数据库就可以了,整控件干嘛~~~~

msflexgrid和mshflexgrid这两个东西跟Datagrid 为MS设计的三个表格控件。msflexgrid由于一些问题,MS已经不建议大家使用了……
[/Quote]
OLEDB方式是什么?我找的书上vb数据库的章节都是讲dao---ado...一路讲下来的啊
jiutiwen 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dbcontrols 的回复:]
对非微软的数据库需要使用odbc数据源设置
[/Quote]
这个明白了:要是我一般用access的话odbc就免了
jiutiwen 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dbcontrols 的回复:]
不提倡使用数据绑定
[/Quote]
数据绑定是不是就是指data控件的?dao和ado就不是"绑定"?-----而且这也就是data和dao/ado的本质区别?
咸清 2011-03-03
  • 打赏
  • 举报
回复
建议LZ
抛开所谓的各个控件,理解数据库访问的步骤、大概原理就可以了。

再说,直接 OLEDB方式 访问数据库就可以了,整控件干嘛~~~~

msflexgrid和mshflexgrid这两个东西跟Datagrid 为MS设计的三个表格控件。msflexgrid由于一些问题,MS已经不建议大家使用了……
dbcontrols 2011-03-03
  • 打赏
  • 举报
回复
不提倡使用数据绑定
dbcontrols 2011-03-03
  • 打赏
  • 举报
回复
对非微软的数据库需要使用odbc数据源设置
dbcontrols 2011-03-03
  • 打赏
  • 举报
回复
ado和mshflexgrid是6.0的新东西,别的都是以前就有的
jiutiwen 2011-03-03
  • 打赏
  • 举报
回复
麻烦通俗点甚至搞笑点指教,要不我还是得绕晕在概念里呵.
多谢了!!鞠躬谢!!

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧