C/S——VB数据库应用系统开发数据库应用系统结构VisualBasic快速入门开放数据库连接(ODBC)数据访问接口(ADO)VB数据库编程举例VB开发数据库应用系统实例分析开放数据库连接(ODBC)ODBC概念ODBC的构成建立ODBC数据源ODBC概念ODBC(开放数据库接连,OpenDataBaseConnectivity)是Microsoft公司开发的一套开放的数据库系统应用程序接口标准。ODBC使得客户端应用不再紧密地依赖于数据库管理系统,用户有广泛的挑选余地来选择自己喜欢和熟悉的开发工具。ODBC使数据库应用程序具有很好的适应性和可移植性,并且具备同时访问多种数据库管理系统的能力。ODBC的构成应用程序驱动程序管理器驱动程序数据源VB应用程序驱动程序管理器数据源1数据源2数据源3数据源4驱动程序管理器的工作驱动程序管理器是Windows下的应用程序,其主要作用是:安装指定的驱动程序;定义数据源,并把数据源映射到具体的ODBC驱动程序上;为每个驱动程序提供ODBC函数的入口点;检查ODBC参数的合法性等。ODBC驱动程序的具体任务ODBC应用程序不能直接存取数据库,它将所要执行的操作提交给数据库驱动程序,通过驱动程序实现对数据库的各种操作,数据库操作结果也通过驱动程序返回给应用程序。ODBC驱动程序的具体任务有:建立与数据源的连接;向数据源提交SQL请求;处理查询结果;将数据源错误转换为标准错误代码,返回给应用程序;提交事务的开始请求、完成请求和撤消请求等。什么是数据源数据源是指任何一种可以通过ODBC连接的数据库管理系统,包括要访问的数据库和数据库的运行平台(包括数据库管理系统和运行数据库管理系统的服务器)。它可以是PC平台上的FoxPro数据库、Windows平台上的SQLServer数据库或OS/2平台的Oracle数据库等。数据源名掩盖了数据库服务器之间的差别,通过定义多个数据源,让每个数据源名对应一个数据库管理系统中的指定数据库,这样就可以实现在应用程序中通过数据源名而不是具体的数据库名访问指数据库的目的。建立ODBC数据源可以通过Windows的控制面板可以建立ODBC数据源。建立步骤为:ODBC数据源共有三种类型,第一种是用户数据源(用户DSN),第二种是系统数据源(系统DSN),第三种是文件数据源(文件DSN)。用户DSN只能用于当前定义此数据源的机器上,而且只有定义数据源的用户才可以使用;系统DSN可用于当前机器上的所有用户;文件DSN是将用户定义的数据源信息保存到一个文件中,并可被所有安装了相同驱动程序的不同机器上的用户共享。新建数据源数据访问接口(ADO)访问数据库的几种方式一致的数据访问策略ADO对象模型ADO数据控件与数据绑定控件访问数据库的几种方式使用数据访问接口(对象模型)ActiveX数据对象(ADO,ActiveXDataObjects)远程数据对象(RDO,RemoteDataObjects)数据访问对象(DAO,DataAccessObjects)使用控件数据库表记录此方法局限性强,处理数据量小。直接调用ODBCAPI(应用程序编程接口)(ApplicationProgrammingInterface)编程复杂。一致的数据访问策略的体系结构前端应用程序ADOOLEDB提供者提供者提供者提供者VSAM/ISAME-mail消息目录服务ODBC提供者文件系统关系数据库ADO对象模型ADO是面向对象的API,它只需开发者掌握几个简单对象的方法和属性。ADO对象模型中包含了三核心对象:Connection、Command和Recordset。开发人员可以创建这三个对象并使用这些对象访问数据库。在ADO对象模型中还有几个其他对象:Field、Property、Error和Parameter,它们是前面三个对象的子对象。这些对象的描述如下:Connection对象:包含了与数据源连接的信息。Command对象:定义一个SQL语句、存储过程等与命令相关的信息。Recordset对象:包含了从数据源得到的记录集。Field对象:包含了记录集中的某个记录的字段信息。字段信息包括字段的数据类型、精度和数据范围等。Property对象:ADO对象的属性集。Parameter对象:保存与Command对象相关的参数。Error对象:包含了由数据源产生的Errors集合中的扩展的错误信息。由于一个单独的语句会产生一个或多个错误,因此Errors集合可以同时包括一个和多个Error对象。ADO对象模型ConnectionErrorCommandParameterRecordsetFieldPropertyPropertyPropertyPropertyADO数据控件与数据绑定控件ADO数据控件是使用ADO数据对象来快速建立应用程序和数据源之间的连接,并快速创建数据访问结果记录集的工具。由于ADO数据控件不具有显示数据的功能,因此要将数据操作结果在用户界面上显示出来,就要靠数据绑定控件来实现。ADO数据控件数据绑定控件ADO数据控件在VB的工具箱中添加ADO数据控件ADODC对象的主要属性、方法和事件RecordSet对象的主要属性和方法RecordSet对象的主要属性Fields对象属性RecordSet对象的主要方法在VB的工具箱中添加ADO数据控件ADO数据控件(ADODC)ADODC在窗体中的样式ADODC对象的主要属性、方法和事件ADODC对象的主要属性ADODC对象的主要方法ADODC对象的主要事件ADODC对象的主要属性ConnectionString属性(用于连接数据源)Command属性RecordSource属性CommandType属性Recordset属性ConnectionString属性设置步骤使用ODBC数据资源名称以建立ODBC数据源时使用使用连接字符串未建立ODBC数据源时使用使用ODBC数据资源名称使用连接字符串RecordSource属性此属性用于设置ADO结果集的内容,这个内容可以来自于一张表,也可以来自一个查询语句,也可以来自一个存储过程的执行结果。RecordSource属性的值与CommandType属性的值有关,两者协同使用。CommandType属性此属性指明命令的类型,即要访问的数据的来源。一般这个属性和RecordSource(记录源)属性配合使用。CommandType属性的取值有如下四个:adCmdUnknown:默认值。表示RecordSource中的命令类型未知。adCmdTable:RecordSource属性的内容是一个表名,表示其结果集是对此表执行的无条件查询的结果。adCmdText:RecordSource属性的内容是一个查询语句文本串,表示其结果集是执行此查询语句文本串产生的结果。adCmdStoredProc:RecordSource属性的内容是一个存储过程名,表示其结果集是执行此存储过程产生的结果。设置CommandType属性的方法参见设置RecordSource部分。CommandType属性设置步骤Recordset属性Recordset属性是ADO数据控件中实现数据记录操作的最重要的属性这个属性本身又是一个对象,也有自己的属性和方法,它直接指向ADO对象模型中的Recordset对象。稍后介绍该对象ADODC对象的主要方法ADODC控件最常用的是Refresh方法。Refresh方法用于更新ADODC控件属性,使修改后的ADO数据控件属性生效。当修改了ADODC控件的ConnectionString属性的值时,使用Refresh方法会重新连接一次数据库;当修改了ADODC控件的RecordSource属性的值时,使用Refresh方法会重新执行RecordSource属性的内容,重新产生结果集。使用Refresh方法的格式为:ADODC控件名.RefreshADODC对象的主要事件EndOfRecordset事件:当在结果集中移动记录指针时,当记录指针超出了结果集的最后一条记录时,触发此事件。Error事件:只有在没有执行任何VB代码而发生了一个数据访问错误时,才会触发此事件。WillChangeField事件和FieldChangeComplete事件:当对结果集中的一个或多个字段值进行修改前,触发WillChangeField事件;当对结果集中的一个或多个字段值修改之后,触发FieldChangeComplete事件。WillChangeRecord事件和RecordChangeComplete事件:当对结果集中的一个或多个记录进行修改前,触发WillChangeRecord事件;当对结果集中的一个或多个记录修改之后,触发RecordChangeComplete事件。WillMove事件和MoveComplete事件:在结果集的当前行记录指针移动之前,触发WillMove事件;在结果集的当前行记录指针移动完成后,触发MoveComplete事件。RecordSet对象的主要属性和方法Recordset属性也称为记录集或结果集,用于存放从数据提供者那里获得的查询结果,这个结果一般存放在客户端内存中,可以理解为是客户端的游标。每个结果集有一个当前行指针,指向正在操作的记录。在VB数据库应用程序中,一般不直接对数据库中的数据进行操作,而是通过记录集进行的。因此,记录集是VB应用程序和数据库之间相互连接的桥梁。对数据库中数据的操作主要是通过RecordSet对象完成的。RecordSet对象的主要属性BOF:布尔值,如果结果集中记录的当前行指针移到了第一条记录的前边,则此值为真,否则为假。EOF:布尔值,如果结果集中记录的当前行指针移到了最后一条记录的后边,则此值为真,否则为假。RecordCount:存放结果集中的记录个数。Sort:将结果集中的记录按某个字段排序。AbsolutePosition:记录当前行记录在结果集中的顺序号,结果集记录序号从1开始。ActiveCommand:结果集中创建的命令。ActiveConnection:结果集中创建的连接。Bookmark:结果集中当前行记录的标识号。Fields:结果集中的字段集合。由于一行记录可以包含多个字段,因此Fields属性是一个数组形式,数组中的每个元素代表一个字段。Fields对象属性Fields属性本身也是一个对象,它直接指向ADO对象模型中的Fields对象。Fields对象用下述属性来描述结果集字段的信息:Fields.Name:字段名称。Fields.Value:字段的值。Fields.OrdinalPosition:字段在Fields集合中的顺序。Fields.Type:字段的数据类型。Fields.Size:字段的最大字节数。Fields.SourceTable:字段来自的表Fields.SourceField:字段来自的表中的列RecordSet对象的主要方法RecordSet对象的方法是实现结果集操作的关键。Move方法组AddNew方法Update方法Delete方法CancelUpdate方法Find方法Move方法组Move方法组就是实现在结果集中通过移动记录行指针而浏览数据的方法。Move方法组中又包括四个相应的移动指针的方法。MoveFirst方法:将当前行记录指针移到结果集中的第一行。MovePrevious方法:将当前行记录指针向前移动一行。MoveNext方法:将当前行记录指针向后移动一行。MoveLast方法:将当前行记录指针移到结果集中的最后一行。AddNew方法AddNew方法用于在结果集中添加一个新记录。注意,当使用AddNew方法时,实际上只是在内