请教DBGRID与DATA GRID有什么不同-->leeyeafu转移
为什么书上介绍可以用dbgrid与data捆绑(即将dbgrid的数据源选择data),为什么我的vb6.0找不到dbgrid,只有datagrid,可是datagrid用选择数据源无法选择data控件,只能选择ado控件并与之捆绑,何也? 先回复楼主急于想知道的。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对象库的。 真得很感谢班主的热情回答,这么麻烦的话,看来只能改学用ADO编程了.自己先消化消化再说,有问题再向你请教.谢谢
另外,我想问的是建立与MS Access 2000的MDB文件连接的ODBC数据源。这一点是否要通过控制面板-管理工具-odbc数据源管理器设置?这样的设置是不是只针对具体的某一access2000数据库,如果我换了加外一个access2000数据库,是否又要重新设置?这样是不是太麻烦了?
我是这样设置的:点击控制面板-双击ODBC数据源-进入ODBC数据源管理器-点击 添加-进入"创建新数据源对话框",选择"microsoft access driver[*.mdb],然后在数据源名中输入名字,点击选取,在弹出的"选定数据库"对话框中选择自己的数据库文件名,如果是这样的话,我的程序中需要用到很多的access2000数据库,不是要逐个静态这样添加吗?? 程序中需要用到很多的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-20 8:00:20 编辑 <br /><br /> 再次感谢班主的热情回答,我的程序确实有很多的数据库,虽然可以用一数据库多数据表实现,但是,我有的数据库是动态产生和生成的,用odbc静态设置行吗?我的意思是ADO链接字符能在程序中完成,odbc是不是只能手工工程序执行前设置?这样的话,我的程序执行到一半,生成了一个新的数据库,<b>是不是需要停下来手工用odbc建立此数据库的链接?然后才能对此数据库进行操作?</b>还有我在自己的电脑上开发出的程序,如果在其它机器上用的话,也就是给其它人用的话,需要不需要在对方电脑上也这么进行ODBC的连接设置?是不是编译以后就不要设置,执行原代码的仍需要这样的设置?
我以前一直学的数据库是foxprol,对其结构和操作相对较熟悉,刚接触VB的数据库,所以问的问题可能对你们来说比较可笑,不要见怪.因为这对我很重要,这决定倒底是钻研ADO还是DAO.
请使用ADO作为数据库连接方式
昨天下班后才想到,你应该不需要<b>同时</b>操作多个数据库文件,但可能要在程序动态地选择数据库文件,这样在程序中也就没必要同时加载大量的数据表。如果是这样,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吧。(<EM>在VC++中可以调用ODBC API函数SQLConfigDataSource()来完成数据源动态配置工作。)</EM>
二、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。
下图形象地表示各种数据库接口技术之间的关系。为了更快回复,我用的是手工制图,很粗糙,见笑了。
多谢不厌其烦的解释,送上小花二朵,聊表敬意
页:
[1]