明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3384|回复: 6

请教DBGRID与DATA GRID有什么不同-->leeyeafu转移

[复制链接]
发表于 2005-4-19 07:57:00 | 显示全部楼层 |阅读模式
为什么书上介绍可以用dbgrid与data捆绑(即将dbgrid的数据源选择data),为什么我的vb6.0找不到dbgrid,只有datagrid,可是datagrid用选择数据源无法选择data控件,只能选择ado控件并与之捆绑,何也?
发表于 2005-4-19 10:59:00 | 显示全部楼层
先回复楼主急于想知道的。


1、VB6中添加DBGrid控件,该控件名为:Microsoft Data Bound Grid Control X.x(X.x为版本号)。


2、简单的说,DBGrid控件仅与Data控件相捆绑,而DataGrid控件捆绑ADODC控件。然而,Data控件与ADODC控件访问数据库的方式方法有本质的区别,建议楼主尽快地转到ADO编程。至于它们的区别,容后回复。


3、Data控件或者说DAO编程方式,它们是通过Microsoft Jet引擎访问数据库的,而这个Jet引擎通常就是3.51版本的(听说VB6有个SP5或者是SP6之类的东东,它可以使用Jet4.0,我没用过),这样也就是说,Data控件或者DAO编程方式确实只能访问MS Access 97的数据库,而不能访问MS Access 2000建立的MDB文件,因为两个版本的Access文件结构上有重大不同(例如Access 2000开始支持面向对象的SQL语句)。幸运的是,DAO另外提供了ODBC的COM自治接口,而ODBC驱动程序管理器是支持Microsoft Jet 4.0的,即,在Data控件中,我们可以使用ODBC来访问MS Access 2000建立的MDB数据库文件。具体方法是:


首先,建立与MS Access 2000的MDB文件连接的ODBC数据源。


然后,将Data控件的DefaultType属性设置为1--使用ODBC,将DatabaseName设置为ODBC的DSN(数据源名称)(注意:在这不要直接使用MDB文件名,也无法通过属性窗口的浏览按钮来指定DSN,只能从键盘输入DSN名称)。


然后,设置Data控件的RecordSource属性,在这属性窗口也不能帮你列出数据表名,只好自己写入SQL语句了。然后......,然后怎么了?MS Access 2000的MDB被打开了呀,剩下的就是你自己的事了。


4、你的工程若没有使用Access的ActiveX模型,是不需要引用Access对象库的。
 楼主| 发表于 2005-4-19 12:40:00 | 显示全部楼层
真得很感谢班主的热情回答,这么麻烦的话,看来只能改学用ADO编程了.自己先消化消化再说,有问题再向你请教.谢谢



另外,我想问的是建立与MS Access 2000的MDB文件连接的ODBC数据源。这一点是否要通过控制面板-管理工具-odbc数据源管理器设置?这样的设置是不是只针对具体的某一access2000数据库,如果我换了加外一个access2000数据库,是否又要重新设置?这样是不是太麻烦了?


我是这样设置的:点击控制面板-双击ODBC数据源-进入ODBC数据源管理器-点击 添加-进入"创建新数据源对话框",选择"microsoft access driver[*.mdb],然后在数据源名中输入名字,点击选取,在弹出的"选定数据库"对话框中选择自己的数据库文件名,如果是这样的话,我的程序中需要用到很多的access2000数据库,不是要逐个静态这样添加吗??
发表于 2005-4-19 15:41:00 | 显示全部楼层
程序中需要用到很多的access2000数据库?我希望不会太多,三个五个已经不少了,再多的话,我怀疑你的数据库结构设计是否需要改进。事实上,一个Access数据库文件可以包含几乎任意多张数据表,如果你的数据库结构需要,你还可以为这些数据表建立复杂的关系。但我还不知道如何在两个不同MDB文件的数据表中建立关系。换句话说,多个数据库文件之间是完全离散的,我不知道你有什么理由不将它们整合到少数几个(甚至就是一个)数据库中去,当然一个数据库文件会有更多的数据表。或者,你要使用的数据资源分散在很多台计算机中,它们分别保存在不同的计算机中,这样就必然存在很多数据库文件。如果你的程序需要使用这样的数据库,建议使用SQL Server数据库系统或者其它分布式数据库系统,至少,多个数据库之间数据的完整性和一致性可以交给SQL Server的DBMS(数据库管理系统)去管,相信它可以比你我做得更好。


要建立多个到Access 2000数据库的ODBC连接,大概只有用你的办法。


事实上,即使是用ADO连接,要同时操作多个Access 2000数据库,必然要使用至少同样多个ADODB.Connection对象,对于每个Connection对象,指定不同的连接字符串。这好象并不比建立ODBC连接方便多少。


最后,你已经熟悉DAO编程的话,学习ADO并不困难,ADODC控件、DataGrid控件的使用与Data控件、DBGrid控件有很多相同或相似之处。用代码控制ADO连接或者ADO数据控件也不比DAO复杂,但它的效率却比DAO高。
 楼主| 发表于 2005-4-19 16:55:00 | 显示全部楼层
本帖最后由 作者 于 2005-4-20 8:00:20 编辑

再次感谢班主的热情回答,我的程序确实有很多的数据库,虽然可以用一数据库多数据表实现,但是,我有的数据库是动态产生和生成的,用odbc静态设置行吗?我的意思是ADO链接字符能在程序中完成,odbc是不是只能手工工程序执行前设置?这样的话,我的程序执行到一半,生成了一个新的数据库,是不是需要停下来手工用odbc建立此数据库的链接?然后才能对此数据库进行操作?还有我在自己的电脑上开发出的程序,如果在其它机器上用的话,也就是给其它人用的话,需要不需要在对方电脑上也这么进行ODBC的连接设置?是不是编译以后就不要设置,执行原代码的仍需要这样的设置? 我以前一直学的数据库是foxprol,对其结构和操作相对较熟悉,刚接触VB的数据库,所以问的问题可能对你们来说比较可笑,不要见怪.因为这对我很重要,这决定倒底是钻研ADO还是DAO.
发表于 2005-4-20 10:13:00 | 显示全部楼层

请使用ADO作为数据库连接方式

昨天下班后才想到,你应该不需要同时操作多个数据库文件,但可能要在程序动态地选择数据库文件,这样在程序中也就没必要同时加载大量的数据表。如果是这样,ODBC不是好的选择。由于ODBC是由Windows管理的,在其他的机器上安装应用程序也需要同时配置ODBC数据源,这也是ODBC很不方便的地方。 然而,若用ADO连接数据库,你的问题好象全都容易了。MS Access 2000可以用ADO直接访问,要动态选择数据库文件,可以用代码在运行指定(或修改)ADODB.Connection对象的连接字符串(或ADODC控件的ConnectionString属性)。而与ADO配合的DataGrid控件不仅在外形上与DBGrid控件相似,其使用方法和DBGrid控件也基本一致。 以下再简单介绍目前Windows平台上常见的数据库接口,这些接口包括:ODBC(开放数据库连接)、MFC(微软基础类)的ODBC类库、DAO(数据访问对象)、RDO(远程数据对象)、OLE DB(对象链接与嵌入数据库。从字面上还不好理解其含义,容后详述)、ADO(ActiveX数据对象)。另外还有些专用数据库接口,不在本文讨论范围。 一、ODBC 它为需要使用关系型数据库的应用程序开发提供了一种统一接口。ODBC提供单一的API,可用于处理各种不同类型的数据库。使用ODBC API的应用程序可以与任何具有ODBC驱动程序的关系型数据库进行通信。ODBC数据源由Windows统一管理,要配置ODBC数据源,用VB我没做过,大概要调用Windows API吧。(在VC++中可以调用ODBC API函数SQLConfigDataSource()来完成数据源动态配置工作。) 二、MFC的ODBC类库 虽然ODBC提供的是关系型数据库的统一接口,但ODBC API并不简单。MFC提供了一些类来简化ODBC操作,由于要用Visual C++才能操作这些类,在这不多说了。 三、DAO DAO的本质就是一组MS Jet数据库引擎的接口。使用DAO的应用程序通过DAO与MS Jet对话,而MS Jet引擎再与其他数据库进行通信。DAO提供的是一种方便数据库编程的对象模型,但它涉及很多层次的软件,对数据库的所有调用以及数据库输出都必须经过MS Jet引擎,对于使用了数据库服务器的应用程序来说,这是一个严重的瓶颈。 最初,MS Jet主要是供MS Access数据库使用的,后来才对该引擎增加了ODBC支持,从而使用DAO才能访问其他类型的数据库。另外,MS Jet还具有与ISAM(索引顺序访问文件)的接口,从而DAO可以访问提供了ISAM驱动程序的文件数据库,例如EXCEL 97文件。 四、RDO RDO直接调用ODBC API,从而可以克服DAO存在的数据库服务器瓶颈。与RDO配合的是RemoteData控件。 五、OLE DB OLE DB在两个方面对ODBC进行了扩展,首先,它为数据库编程提供了OLE接口,也就是COM接口。另外,OLE DB提供了可用于关系型和非关系型数据库的接口。 从命名上看,这种接口很容易让人联想到OLE Controller(OCX控件),实际上,它们之间并无多大关系。OLE DB提供的是OLE/COM接口。 OLE DB包括两个部份:OLE DB供给程序和OLE DB使用程序。 供给程序是实现OLE DB接口并实际与数据库通信的DLL。在功能上,它们与ODBC驱动程序相同,当然实现方法不同。在这重点说三个DLL: MSJTOR35.dll:直接访问数据库的接口,不仅是Access数据库,它可以访问任何带有OLE DB供给程序的数据源。 SQLOLEDB.dll:访问SQL Server数据库。 MSDASOL.dll:可访问ODBC数据源,这对于带的ODBC驱动程序的数据源来说,有可能比较方便。 使用程序是使用或消费OLE DB接口的应用程序,ADO就是一个OLE DB使用程序。 OLE DB不提供自治接口,这意味着不能在VB这样不支持指针的语言中直接使用OLE DB,而只能用Visual C++才能直接对OLE DB编程。 OLE DB是Windows上数据库应用程序开发的未来发展模式,并且Windows的所有新的数据库应用程序技术也将适用于OLE DB。 六、ADO ADO是一种OLE DB使用程序,使用ADO的程序都要间接使用OLE DB。ADO提供一种数据库编程对象模型,与DAO类似,但比DAO更灵活,更高效。ADO简化了OLE DB,同时又提供了自治接口,从而可以在VB这样不支持指针的语言中使用ADO。 下图形象地表示各种数据库接口技术之间的关系。为了更快回复,我用的是手工制图,很粗糙,见笑了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2005-4-21 13:00:00 | 显示全部楼层
多谢不厌其烦的解释,送上小花二朵,聊表敬意
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 00:33 , Processed in 0.176663 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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