《数据库应用教程(VisualBasic+SQLServer)下ppt.ppt》由会员分享,可在线阅读,更多相关《数据库应用教程(VisualBasic+SQLServer)下ppt.ppt(236页珍藏版)》请在金锄头文库上搜索。
1、数据库应用教程(Visual Basic+SQL Server)数据库应用教程数据库应用教程n9.1 利用利用Visual Basic 6.0开发数开发数据库应用程序概述据库应用程序概述 n9.2 Data控件和数据绑定控件控件和数据绑定控件 n9.3 高级数据绑定控件的使用高级数据绑定控件的使用 第第9章章 利用利用Data控件开发数据库应用程序控件开发数据库应用程序n9.1.1 Visual Basic数据库开发功能概述数据库开发功能概述 n9.1.2 Visual Basic 6.0支持的数据库种类支持的数据库种类 n9.1.3 Visual Basic 6.0支持的数据存取模式支持的数
2、据存取模式 9.1 利用利用Visual Basic 6.0开发数据库应用程序概述开发数据库应用程序概述n9.1.4ODBC简介简介 9.1.1 Visual Basic数据库开发功能概述数据库开发功能概述Visual Basic 6.0中与数据库编程有关的特征可描述如下:中与数据库编程有关的特征可描述如下:(1)Visual Basic处理的数据库属于关系型数据库。处理的数据库属于关系型数据库。(2)支持多种存取模式,如)支持多种存取模式,如DAO(数据访问对象)、(数据访问对象)、RDO(远程数(远程数据对象)、据对象)、ADO(ActiveX数据对象)。数据对象)。(3)可以针对)可以针
3、对SQL Server、Oracle等不同的数据库服务器开发完善等不同的数据库服务器开发完善的客户的客户/服务器应用程序。服务器应用程序。(4)增强了不需要经过复杂编程就可以管理和显示数据库数据的)增强了不需要经过复杂编程就可以管理和显示数据库数据的Data控件和数据绑定控件。控件和数据绑定控件。Data控件用于与具体的数据库相连接,数控件用于与具体的数据库相连接,数据绑定控件用于显示和修改数据库中的数据。据绑定控件用于显示和修改数据库中的数据。(5)提供了)提供了Data Report Designer报表设计工具,能够快速地生成报表。报表设计工具,能够快速地生成报表。(6)提供了使用和配置
4、连接的工具与命令,提供了进行)提供了使用和配置连接的工具与命令,提供了进行ODBC开发开发的的API函数。函数。(7)完全支持多层的数据库应用程序开发。客户服务器应用程序一)完全支持多层的数据库应用程序开发。客户服务器应用程序一般有两层和多层之分,多层数据库应用程序一般是三层。般有两层和多层之分,多层数据库应用程序一般是三层。9.1.2 Visual Basic 6.0支持的数据库种类支持的数据库种类Visual Basic 6.0版本能够操作的数据库基本上可以分成下三类版本能够操作的数据库基本上可以分成下三类: 1Visual Basic本地数据库本地数据库 即即Microsoft Acce
5、ss数据库。数据库。 2外部数据库外部数据库 支持几种流行支持几种流行ISAM(Index Sequence Access Method索索引顺序访问方法)数据库,该类数据库主要包括:引顺序访问方法)数据库,该类数据库主要包括:dBase系列、系列、Microsoft FoxPro系列、系列、Paradox系列等。另外系列等。另外Visual Basic 6.0还还可以访问文本文件、可以访问文本文件、Microsoft Excel、Lotus l-2-3电子表格等。电子表格等。3ODBC数据库数据库 Visual Basic 6.0版本支持符合版本支持符合ODBC标准的客户标准的客户/服务器数
6、据库,服务器数据库,主要的客户主要的客户/服务器数据库有:服务器数据库有:Microsoft SQL Server、Oracle等。等。 9.1.3 Visual Basic 6.0支持的数据存取模式支持的数据存取模式1Visual Basic 6.0中支持数据存取模式中支持数据存取模式 (1)数据存取对象()数据存取对象(Data Access ObjectsDAO) (2)远程数据对象()远程数据对象(Remote Data ObjectsRDO) (3)ActiveX数据对象(数据对象(ActiveX Data ObjectsADO) 说明:说明:起初,起初,Visual Basic只支
7、持连接在只支持连接在Microsoft Jet数据库引擎数据库引擎(Microsoft Access中的数据库引擎)上的中的数据库引擎)上的DAO。后来,考虑到存在其他。后来,考虑到存在其他数据库类型,微软公司制定了开放式数据库连接(数据库类型,微软公司制定了开放式数据库连接(ODBC)标准,并用)标准,并用RDO支持这一标准。最后,微软公司认识到支持这一标准。最后,微软公司认识到Web的重要性,并创建的重要性,并创建ActiveX数据对象。数据对象。ActiveX数据对象编制了一种允许通过网络和数据对象编制了一种允许通过网络和Web方式方式连接到同一台计算机上的弹性标准,并用来取代连接到同一
8、台计算机上的弹性标准,并用来取代ODBC。通过这三种数据。通过这三种数据存取方法,使用存取方法,使用Visual Basic 6.0以上版本可以在应用程序中通过编程控制以上版本可以在应用程序中通过编程控制连接、通过查询返回数据和操作数据。连接、通过查询返回数据和操作数据。 9.1.3 Visual Basic 6.0支持的数据存取模式支持的数据存取模式2在在Visual Basic 6.0中使用数据存取模式的方法中使用数据存取模式的方法(1)使用特殊控件)使用特殊控件 在在Visual Basic 6.0中提供了支持中提供了支持DAO、RDO和和ADO的特殊控件:的特殊控件:Data控件(支持
9、控件(支持DAO)、远程)、远程Data控件(支持控件(支持ODBC)和)和ADO Data控件(支持控件(支持ADO)。使用这些控件可以连接到数据库并操作数据库中)。使用这些控件可以连接到数据库并操作数据库中的数据,但这些控件实际上并不能显示数据,要显示数据必须将它们的数据,但这些控件实际上并不能显示数据,要显示数据必须将它们与与Visual Basic的数据绑定控件捆绑在一块,由这些数据绑定控件控的数据绑定控件捆绑在一块,由这些数据绑定控件控制数据显示、修改和记录的移动等。制数据显示、修改和记录的移动等。 (2)通过程序代码)通过程序代码 每种数据存取方法都由一系列的对象组成,这些对象都有
10、一系列每种数据存取方法都由一系列的对象组成,这些对象都有一系列的方法、属性甚至可响应特定的事件,在程序中可以直接以编程方式的方法、属性甚至可响应特定的事件,在程序中可以直接以编程方式创建和使用三种数据存取方法提供的对象,实现数据库应用程序需要创建和使用三种数据存取方法提供的对象,实现数据库应用程序需要的功能,如:数据的显示和修改、记录的移动和数据查询等。的功能,如:数据的显示和修改、记录的移动和数据查询等。 9.1.4ODBC简介简介1ODBC简介简介ODBC(Open Database Connectivity)的全称是开放的数据)的全称是开放的数据库互连,它是一种访问数据库的统一界面标准。
11、通过库互连,它是一种访问数据库的统一界面标准。通过ODBC,数据库,数据库应用程序不需要考虑不同数据库的格式,而采用统一的方法去使用数应用程序不需要考虑不同数据库的格式,而采用统一的方法去使用数据库。据库。 ODBC实际上是一组访问数据库的实际上是一组访问数据库的API函数库,应用程序可以通函数库,应用程序可以通过过ODBC API函数操作数据库中的数据。另外,函数操作数据库中的数据。另外,ODBC是基于是基于SQL语语言的,所以言的,所以ODBC又是又是SQL和应用程序之间的标准接口,解决了传统和应用程序之间的标准接口,解决了传统的宿主式或嵌入式的宿主式或嵌入式SQL接口不够规范的问题。接口
12、不够规范的问题。 从物理上看,从物理上看,ODBC实际上是由应用层、实际上是由应用层、ODBC层和数据层三个层和数据层三个层次组成层次组成 。 (1)数据源名:它是通过)数据源名:它是通过ODBC管理器注册的一个数据源的名称,应用程管理器注册的一个数据源的名称,应用程序根据数据源名就可访问具体的数据库,从而使中间的细节变得透明;序根据数据源名就可访问具体的数据库,从而使中间的细节变得透明; (2)ODBC数据库应用程序:完成数据库功能的由程序设计语言编写的应用程序;数据库应用程序:完成数据库功能的由程序设计语言编写的应用程序; (3)ODBC管理器(管理器(ODBC Administrator
13、):该程序位于):该程序位于Windows控制面控制面板的板的32位位ODBC内,其主要任务是管理内,其主要任务是管理ODBC驱动程序和数据源;驱动程序和数据源; (4)驱动程序管理器()驱动程序管理器(Driver Manager):驱动程序管理器包含在):驱动程序管理器包含在ODBC32.DLL中,对用户是透明的,其任务是管理中,对用户是透明的,其任务是管理ODBC驱动程序,是驱动程序,是ODBC中中最重要的部件;最重要的部件; (5)ODBC API:ODBC提供的一组操作数据库的函数;提供的一组操作数据库的函数; (6)各种数据源:数据源包含了数据库位置和数据库类型等信息。)各种数据源
14、:数据源包含了数据库位置和数据库类型等信息。 优点:优点: 1.应用程序将数据源名提供给应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连就能建立起与相应数据库的连接,然后通过数据源名就可连接操作数据库。接,然后通过数据源名就可连接操作数据库。 2. ODBC的最大优点是能以统一的方式处理各种不同类型的数据库,从而使的最大优点是能以统一的方式处理各种不同类型的数据库,从而使得开发者不需要以特殊的得开发者不需要以特殊的DBMS为目标,也不需要了解不同的为目标,也不需要了解不同的DBMS的详细的详细细节,就能开发出数据库应用程序。细节,就能开发出数据库应用程序。 9.1.4ODB
15、C简介简介2ODBC数据源(数据源(DSN)的概念)的概念 定义:定义:根据微软的权威定义,根据微软的权威定义,DSN的意思是的意思是“应用程序用以请求一个应用程序用以请求一个连到连到ODBC数据源的连接(数据源的连接(Connection)的名字)的名字” 。 DSN是一个代表是一个代表ODBC连接的各称,隐藏了诸如数据库文件名、所在连接的各称,隐藏了诸如数据库文件名、所在目录、数据库驱动程序、用户目录、数据库驱动程序、用户ID、密码等细节问题,使具体的数据库、密码等细节问题,使具体的数据库对应用程序变得透明。对应用程序变得透明。 DSN可分成三种可分成三种:系统系统DSN(SYSTEM D
16、SN):这种):这种DSN可以被登录到系统中的所有用户可以被登录到系统中的所有用户使用;使用;用户用户DSN(USER DSN):这种):这种DSN是为特定用户建立的,只能被建立是为特定用户建立的,只能被建立它的用户使用;它的用户使用;文档文档DSN(FILE DSN):用于文档的):用于文档的DSN。9.1.4ODBC简介简介3ODBC系统系统DSN的创建的创建【例例9-1】为为CollegeMIS数据库建立一个系统数据库建立一个系统DSN,DSN名为名为“SQLCollegeMIS”。 起始步骤:起始步骤:在在Windows XP中,打开控制面板窗口,在控制面板窗口中,打开控制面板窗口,在
17、控制面板窗口中双击中双击“管理工具管理工具”图标,然后再双击图标,然后再双击“数据源(数据源(ODBC)”图标,图标,将会打开如图将会打开如图9-2所示的所示的“ODBC Data Source Administrator”窗口。窗口。 n9.2.1 Data控件和数据绑定控件的概念控件和数据绑定控件的概念 n9.2.2 Data控件的常用属性控件的常用属性 n9.2.3 Data控件的常用方法控件的常用方法 9.2 Data控件和数据绑定控件控件和数据绑定控件n9.2.4 数据绑定控件的常用属性数据绑定控件的常用属性 n9.2.5 Data控件的控件的Recordset对象的常用方法对象的常
18、用方法 n9.2.6 Data控件的常用事件控件的常用事件 9.2.1 Data控件和数据绑定控件的概念控件和数据绑定控件的概念注意:注意:在窗体上放置在窗体上放置Data控件,通过控件,通过Data控件与数据库建立联系,控件与数据库建立联系,在窗体上放置数据绑定控件,通过它们显示在窗体上放置数据绑定控件,通过它们显示Data控件产生的记录控件产生的记录集(集(RecordSet)中的内容。)中的内容。 9.2.1 Data控件和数据绑定控件的概念控件和数据绑定控件的概念1Data控件控件Data控件是把数据库和数据绑定控件连接起来的桥梁,通过控件是把数据库和数据绑定控件连接起来的桥梁,通过设
19、置设置Data控件的属性,可以让它连接到某个数据库并能指定访问控件的属性,可以让它连接到某个数据库并能指定访问该数据库中的某个表或执行该数据库中的某个表或执行SQL语句访问多个表。语句访问多个表。Data控件将数控件将数据库中的指定数据提取出来,并放在一个记录集(据库中的指定数据提取出来,并放在一个记录集(Recordset)中。)中。记录集可看成是内存中的虚拟表,它的数据可来源于表、视图或记录集可看成是内存中的虚拟表,它的数据可来源于表、视图或SELECT语句执行后得到的记录的集合语句执行后得到的记录的集合 。 记录集可以有五种类型,分别是表类型、动态集类型、快照类型、仅记录集可以有五种类型
20、,分别是表类型、动态集类型、快照类型、仅向前型、动态类型。记录集(向前型、动态类型。记录集(Recordset)也是一个对象,它由行和列组)也是一个对象,它由行和列组成,行称为记录(成,行称为记录(Records),列称为字段(),列称为字段(Fields)。)。 9.2.1 Data控件和数据绑定控件的概念控件和数据绑定控件的概念(1)表类型()表类型(Table-type)表类型的记录集只能基于单个表打开,对表类型的记录集的所表类型的记录集只能基于单个表打开,对表类型的记录集的所有操作都是直接对基本表进行的。与其他类型的记录集对象相比,有操作都是直接对基本表进行的。与其他类型的记录集对象相
21、比,在表类型的记录集中进行搜索与排序速度是最快的,当设置了索引在表类型的记录集中进行搜索与排序速度是最快的,当设置了索引后,使用后,使用Seek方法可以快速定位到要查找的记录,方法可以快速定位到要查找的记录,Seek方法明显方法明显要快于要快于Find方法。方法。 (2)动态集类型()动态集类型(Dynaset-type)动态集类型的记录集可以是单个表,也可以是动态集类型的记录集可以是单个表,也可以是SELECT语句返语句返回的查询结果(即对一个或者几个表中的相关数据的引用)。回的查询结果(即对一个或者几个表中的相关数据的引用)。动态集和它的基本表可以互相更新的。如果动态集中的记录发生改变,动
22、态集和它的基本表可以互相更新的。如果动态集中的记录发生改变,同样的变化也将在基本表中反映出来。在打开动态集的时候,如果其他的同样的变化也将在基本表中反映出来。在打开动态集的时候,如果其他的用户修改了基本表,那么动态集中也将反映出被修改过的记录。动态集类用户修改了基本表,那么动态集中也将反映出被修改过的记录。动态集类型是最灵活、功能最强的记录集类型,但它的查询速度与操作速度不及表型是最灵活、功能最强的记录集类型,但它的查询速度与操作速度不及表类型的记录集对象。如不能进行索引查询。类型的记录集对象。如不能进行索引查询。 9.2.1 Data控件和数据绑定控件的概念控件和数据绑定控件的概念(3)快照
23、类型()快照类型(Snapshot-type) 快照类型的记录集包含的数据是固定的,它反映的是在产生快照的快照类型的记录集包含的数据是固定的,它反映的是在产生快照的一瞬间数据库的状态。一般来说,快照类型的记录集是不可更新的。与一瞬间数据库的状态。一般来说,快照类型的记录集是不可更新的。与动态集类型和表类型的记录集相比,该类型的记录集的优点是系统开销动态集类型和表类型的记录集相比,该类型的记录集的优点是系统开销较少,执行查询和返回数据的速度更快,缺点是不能进行数据更新。较少,执行查询和返回数据的速度更快,缺点是不能进行数据更新。 (4)仅向前类型()仅向前类型(Forward-only-type
24、) 仅向前类型的记录集,有时被称为仅向前类型的记录集,有时被称为“向前滚动快照向前滚动快照”记录集或记录集或者者“仅向前快照仅向前快照”记录集。它提供了快照的一部分功能,占用系统记录集。它提供了快照的一部分功能,占用系统资源较少,速度较快。仅向前的快照只允许在记录中向前移动,而资源较少,速度较快。仅向前的快照只允许在记录中向前移动,而不能向相反的方向移动,因此这种类型的记录集对象不能被复制,不能向相反的方向移动,因此这种类型的记录集对象不能被复制,而且只支持而且只支持Move和和MoveNext方法。方法。9.2.1 Data控件和数据绑定控件的概念控件和数据绑定控件的概念(5)动态类型()动
25、态类型(Dynamic-type) 动态类型的记录集是从一个或几个基本表中查询得到的结果动态类型的记录集是从一个或几个基本表中查询得到的结果集,对于返回行的查询,可以在其中添加、修改或删除记录。其集,对于返回行的查询,可以在其中添加、修改或删除记录。其他用户对基本表的添加、删除和修改操作也将出现在用户的记录他用户对基本表的添加、删除和修改操作也将出现在用户的记录集中。集中。 9.2.1 Data控件和数据绑定控件的概念控件和数据绑定控件的概念2数据绑定控件数据绑定控件标准数据绑定控件主要包括以下几种:标准数据绑定控件主要包括以下几种:(1)复选框:主要用来显示或设置布尔类型()复选框:主要用来
26、显示或设置布尔类型(Boolean)字段的值。如果绑定)字段的值。如果绑定的布尔型字段的值为的布尔型字段的值为NULL,则复选框为灰色。,则复选框为灰色。(2)图片框:图片框可以用来设置或显示在二进制类型的字段中存放的各种图)图片框:图片框可以用来设置或显示在二进制类型的字段中存放的各种图片格式的数据,主要的图片格式有:片格式的数据,主要的图片格式有:.bmp、.ico、jpg、.gif、.wmf、.dib等。等。(3)标签:主要用来显示字符类型、数值类型和日期类型字段的数据,但不能)标签:主要用来显示字符类型、数值类型和日期类型字段的数据,但不能对相应的字段进行修改。对相应的字段进行修改。(
27、4)图像框:与图片框一样,但可使图片按照图片框的大小进行放大或缩小。)图像框:与图片框一样,但可使图片按照图片框的大小进行放大或缩小。(5)文本框:用来显示或设置字符类型、数值类型和日期类型字段的数据。)文本框:用来显示或设置字符类型、数值类型和日期类型字段的数据。(6)列表框:显示一个列表,用来显示或设置字符类型、数值类型和日期类型)列表框:显示一个列表,用来显示或设置字符类型、数值类型和日期类型字段的数据。字段的数据。(7)组合框:与列表框类似。)组合框:与列表框类似。(8)OLE容器控件:显示或修改容器控件:显示或修改OLE对象类型字段的值。对象类型字段的值。ActiveX数据绑定控件有
28、:数据绑定控件有: DBListBox、DBComboBox、MSFlexGrid、DBGrid等等 。9.2.2 Data控件的常用属性控件的常用属性1Connect属性属性 Connect属性指定数据库类型,在该属性名的后面有一个列表框,用户可以属性指定数据库类型,在该属性名的后面有一个列表框,用户可以直接从该列表框中选择属性值。如果要使用在列表中没有列出的数据库类型,如直接从该列表框中选择属性值。如果要使用在列表中没有列出的数据库类型,如SQL Server,可使用,可使用ODBC连接字符串与之进行连接。使要访问连接字符串与之进行连接。使要访问SQL Server数数据库据库Colleg
29、eMIS,可使用如下的连接字符串:,可使用如下的连接字符串:ODBC;Driver=SQL Server;Server=TAHSJ;UID=sa;PWD=tah980808;Database=CollegeMIS 。2DatabaseName属性属性DatabaseName属性用来指定具体使用的数据库。如果要连接到的数据库文属性用来指定具体使用的数据库。如果要连接到的数据库文件包含多张表,如件包含多张表,如Microsoft Access数据库,就要把该属性设置为数据库文件名数据库,就要把该属性设置为数据库文件名(如:如:MDB文件的文件名,文件的文件名,Access数据库的所有表都包含在一个
30、数据库的所有表都包含在一个MDB文件中文件中)。如。如果连接到只由一张表构成的数据库果连接到只由一张表构成的数据库(如如dBase、FoxPro或或Paradox数据库数据库),则应把,则应把该属性值设置为对应的子目录名,在该子目录下存放了数据库文件。该属性值设置为对应的子目录名,在该子目录下存放了数据库文件。 注意:注意:要想连接到要想连接到Microsoft Access数据库,数据库,Connect属性值设置为属性值设置为“Access”,DatabaseName属性值设置为数据库名称。属性值设置为数据库名称。 9.2.2 Data控件的常用属性控件的常用属性3RecordSetType
31、属性属性 RecordSetType属性用来确定记录集类型,取值有:属性用来确定记录集类型,取值有:Table(表)、(表)、Dynaset(动态集)和(动态集)和Snapshot(快照)。(快照)。 4RecordSource属性属性RecordSource确定具体可访问的数据,可以是数据库中的单个表或一个存储确定具体可访问的数据,可以是数据库中的单个表或一个存储查询,也可以是查询,也可以是SQL- SELECT语句。由语句。由RecordSource确定的具体可访问的数据确定的具体可访问的数据构成的记录集(构成的记录集(Recordset)也是一个对象,该对象也具有属性、方法和事件)也是一
32、个对象,该对象也具有属性、方法和事件 。 9.2.2 Data控件的常用属性控件的常用属性5RecordSet对象的常用属性对象的常用属性 ()Eof和和Bof属性属性 如果记录指针位于第一条记录之前,则如果记录指针位于第一条记录之前,则Bof属性值为属性值为True,否则,否则Bof的值为的值为False。 如果记录指针位于最后一条记录之后,则如果记录指针位于最后一条记录之后,则Eof属性值为属性值为True,否则,否则Eof的值为的值为False。 9.2.2 Data控件的常用属性控件的常用属性5RecordSet对象的常用属性对象的常用属性 Eof和和Bof属性具有以下特点:属性具有以
33、下特点: 如果记录集中没有记录,则如果记录集中没有记录,则Bof属性和属性和Eof属性值都是属性值都是True。当当Bof属性或属性或 Eof属性的值成为属性的值成为True之后,只有将指针移动到实际存在之后,只有将指针移动到实际存在的记录上,的记录上,Bof属性或属性或 Eof属性的值才会变为属性的值才会变为False。若若Bof属性或属性或Eof属性的值为属性的值为False,而且记录集中唯一的记录被删除掉,那么这,而且记录集中唯一的记录被删除掉,那么这两个属性的值将依旧保持两个属性的值将依旧保持False,直到将记录指针移到另一个记录上为止,这时,直到将记录指针移到另一个记录上为止,这时
34、Bof属性和属性和Eof属性的值都将变为属性的值都将变为True。当创建或打开至少含有一个记录的记录集时,第一个记录将成为当前记录,而且当创建或打开至少含有一个记录的记录集时,第一个记录将成为当前记录,而且Bof属性和属性和Eof属性的值均为属性的值均为False。(2)RecordCount属性属性 记录集中的记录数量,如果记录集中没有记录,记录集中的记录数量,如果记录集中没有记录,RecordCount属性值为属性值为0。 9.2.2 Data控件的常用属性控件的常用属性6EofAction属性和属性和BofAction属性属性7ReadOnly属性属性该属性用来控制能否对记录集中的数据进
35、行修改操作。值为该属性用来控制能否对记录集中的数据进行修改操作。值为True时,不能对记录时,不能对记录集中的数据进行修改操作,值为集中的数据进行修改操作,值为False时,可以对记录集中的数据进行修改操作。时,可以对记录集中的数据进行修改操作。 9.2.3 Data控件的常用方法控件的常用方法1Refresh方法方法2UpdateRecord方法方法该方法的作用是重读数据库,刷新记录集,从而根据记录集内容而构建的用户该方法的作用是重读数据库,刷新记录集,从而根据记录集内容而构建的用户界面也跟着刷新。如果在执行了界面也跟着刷新。如果在执行了AddNew方法或方法或Edit方法后并且在还没有调用
36、方法后并且在还没有调用Update方法之前,由于数据的修改没有写入到数据库中,这时调用方法之前,由于数据的修改没有写入到数据库中,这时调用Refresh方法,方法,将会清除掉用户所做的添加或修改。将会清除掉用户所做的添加或修改。 该方法的作用是用数据绑定控件中的数据去更新数据库中的数据。通常用于修该方法的作用是用数据绑定控件中的数据去更新数据库中的数据。通常用于修改后的确认操作。改后的确认操作。 3UpdateControls方法方法 该方法的作用是用记录集的当前记录中的数据更新绑定控件的值,即把数据绑该方法的作用是用记录集的当前记录中的数据更新绑定控件的值,即把数据绑定控件中的数据恢复为修改
37、前的原始值,相当于用户在更改了数据之后决定取消更定控件中的数据恢复为修改前的原始值,相当于用户在更改了数据之后决定取消更改。通常在改。通常在“取消取消”或或“放弃放弃”操作中调用该方法。操作中调用该方法。 9.2.4 数据绑定控件的常用属性数据绑定控件的常用属性1DataSource属性属性2DataField属性属性 数据源属性,指定数据绑定控件需要绑定到的数据源属性,指定数据绑定控件需要绑定到的Data控件各称。控件各称。 该属性用来指定数据绑定控件与该属性用来指定数据绑定控件与Data控件形成的记录集中的哪个字段相绑定,控件形成的记录集中的哪个字段相绑定,绑定过后,该数据绑定控件就可以显
38、示和修改对应字段的内容了。绑定过后,该数据绑定控件就可以显示和修改对应字段的内容了。 3DataChanged属性属性 该属性用来指出显示在数据绑定控件里的数据是否已经被改变,如果改变了,该属性用来指出显示在数据绑定控件里的数据是否已经被改变,如果改变了,值为值为True,没有改变,值为,没有改变,值为False。 9.2.4 数据绑定控件的常用属性数据绑定控件的常用属性在应用程序中使用数据绑定控件的步骤如下:在应用程序中使用数据绑定控件的步骤如下: (2)设置数据绑定控件的)设置数据绑定控件的DataSource属性,该属性值为要绑定的属性,该属性值为要绑定的Data控件名;控件名;(1)添
39、加数据绑定控件到)添加数据绑定控件到Visual Basic的窗体中;的窗体中;(3)设置数据绑定控件的)设置数据绑定控件的DataField属性,该属性值为属性,该属性值为Data控件形成的记录集里控件形成的记录集里的一个有效字段名。的一个有效字段名。 注意:注意:如果设计时数据库可用,则有效字段的列表将显示在如果设计时数据库可用,则有效字段的列表将显示在“属性属性”窗口里的窗口里的“DataField”属性后面的列表框中,用户可以从中选择一个。如果在设计时数属性后面的列表框中,用户可以从中选择一个。如果在设计时数据库不可用,可在该属性后的文本框中输入一个有效的字段名或者在运行时为该据库不可
40、用,可在该属性后的文本框中输入一个有效的字段名或者在运行时为该属性赋值为一个有效的字段名。属性赋值为一个有效的字段名。 注意:注意:运行程序时,使用运行程序时,使用Data控件上的箭头按钮可在记录间移动,使用数据绑控件上的箭头按钮可在记录间移动,使用数据绑定控件可以查看或修改显示出来的字段内容。只要单击定控件可以查看或修改显示出来的字段内容。只要单击Data控件上的箭头按钮,控件上的箭头按钮,Visual Basic会自动地更新对记录集所做的修改。会自动地更新对记录集所做的修改。 。 【例例9-2】编写一个对编写一个对CollegeMIS数据库中数据库中Teacher表进行浏览和表进行浏览和修
41、改的程序,程序的设计界面如图修改的程序,程序的设计界面如图9-14所示,程序的运行结果如图所示,程序的运行结果如图9-15所示。所示。 图图9-14 例例9-2的程序设计界面的程序设计界面图图9-15 例例9-2的程序运行界面的程序运行界面 实现思路:实现思路:要浏览要浏览CollegeMIS数据库中的数据库中的Teacher表,可在窗体上放置一个表,可在窗体上放置一个Data控件,通过设置它的控件,通过设置它的Connection属性连接到属性连接到SQL Server的的CollegeMIS数据库,通过设置数据库,通过设置RecordSource属性使属性使Data控件和控件和Teache
42、r表联系在一起。表联系在一起。可用若干个可用若干个Text控件来显示和修改控件来显示和修改Teacher表中的除表中的除Sex、Marriage和和Picture外的其它字段的值,用一个组合框来显示和修改外的其它字段的值,用一个组合框来显示和修改Sex字段的值,用一个图像框字段的值,用一个图像框来显示和修改来显示和修改Picture字段的值,用一个复选框显示和修改字段的值,用一个复选框显示和修改Marriage字段的值。字段的值。要把这些控件与要把这些控件与Teacher表的相应字段绑定在一起,还需设置这些控件的表的相应字段绑定在一起,还需设置这些控件的DataSource属性和属性和Data
43、Field属性:把属性:把DataSource属性值设置为属性值设置为Data控件名控件名称,称,DataField属性值设置为字段名称。属性值设置为字段名称。更改数据库中的照片更改数据库中的照片(Image类型的字段),有两种方法:一是通过剪贴板,类型的字段),有两种方法:一是通过剪贴板,先把数据存放到剪贴板上,然后使用语句先把数据存放到剪贴板上,然后使用语句 “Image1.Picture = Clipboard.GetData”把剪贴板上的照片显示在图像框中;二是使用图像框的把剪贴板上的照片显示在图像框中;二是使用图像框的LoadPicture方法,先把照片存放在磁盘上,然后使用语句方法
44、,先把照片存放在磁盘上,然后使用语句“Image1.Picture=LoadPicture(”图像文件名图像文件名”)”把照片显示在图像框中。单击把照片显示在图像框中。单击Data控件的移动按钮时,控件的移动按钮时,图像将自动保存到数据库中。图像将自动保存到数据库中。 Connect 属性设置属性设置:ODBC;Driver=SQL Server; Server=TAHSJ; UID=sa;PWD=tah980808; Database=CollegeMIS 其它参见例子程序。其它参见例子程序。 9.2.5 Data控件的控件的Recordset对象的常用方法对象的常用方法1Move类方法类方
45、法 该方法的作用是把记录指针移到当前记录的下一条记录。该方法的作用是把记录指针移到当前记录的下一条记录。(1)MoveNext方法方法(2)MovePrevious方法方法该方法的作用是把记录指针移到当前记录的上一条记录。该方法的作用是把记录指针移到当前记录的上一条记录。(3)MoveFirst方法方法该方法的作用是把记录指针移到第一条记录。该方法的作用是把记录指针移到第一条记录。(4)MoveLast方法方法该方法的作用是把记录指针移到最后一条记录。该方法的作用是把记录指针移到最后一条记录。(5)Move n方法方法该方法使记录指针向前或向后移该方法使记录指针向前或向后移|n|条记录,条记录
46、,n为正表示向记录集的末尾移动,为正表示向记录集的末尾移动,n的的值为负表示向记录集的开头移动。值为负表示向记录集的开头移动。注意:移动记录注意:移动记录的时候需特别注的时候需特别注意对文件头和文意对文件头和文件尾的测试件尾的测试 。【例例9-3】编写一个利用按钮对编写一个利用按钮对CollegeMIS数据库中的数据库中的Teacher表进行浏表进行浏览和修改的数据库应用程序,在运行时不显示览和修改的数据库应用程序,在运行时不显示Data控件,通过五个按钮来控件,通过五个按钮来实现记录指针的移动,程序的设计界面如图实现记录指针的移动,程序的设计界面如图9-16 所示,程序的运行界面如所示,程序
47、的运行界面如图图9-17所示。所示。 图图9-16 例例9-3的程序设计界面的程序设计界面 图图9-17 例例9-3的程序运行界面的程序运行界面 注意:注意:代码参见实例。代码参见实例。9.2.5 Data控件的控件的Recordset对象的常用方法对象的常用方法2Find类方法类方法 使用使用Data控件进行数据库查找,有两种方法,一种是索引查找,见控件进行数据库查找,有两种方法,一种是索引查找,见Seek方法;另方法;另一种是顺序查找。要进行顺序查找,需要使用一种是顺序查找。要进行顺序查找,需要使用Data控件的控件的RecordSet对象的对象的Find类方法类方法 。(1)FindFi
48、rst方法方法其作用是查找满足条件的第一条记录,语法格式如下:其作用是查找满足条件的第一条记录,语法格式如下: Data控件名控件名.RecordSet.FindFirst 条件条件(2)FindLast方法方法其作用是查找满足条件的最后一条记录,语法格式如下:其作用是查找满足条件的最后一条记录,语法格式如下: Data控件名控件名.RecordSet.FindLast 条件条件(3)FindNext方法方法其作用是查找满足条件的下一条记录,语法格式如下:其作用是查找满足条件的下一条记录,语法格式如下: Data控件名控件名.RecordSet.FindNext 条件条件(4)FindPrev
49、ious方法方法其作用是查找满足条件的上一条记录,语法格式如下:其作用是查找满足条件的上一条记录,语法格式如下:Data控件名控件名.RecordSet.FindPrevious 条件条件查找方法中的条件都是一个字符串,字符串中存放的是指定字段与常量或变量构查找方法中的条件都是一个字符串,字符串中存放的是指定字段与常量或变量构成的表达式。表达式中除可用普通的关系运算符外,还可以使用成的表达式。表达式中除可用普通的关系运算符外,还可以使用Like运算符。如运算符。如要在要在Data1控件的记录集中查找第一个职称(字段名为控件的记录集中查找第一个职称(字段名为Title)为)为“副教授副教授”的记
50、的记录,可使用下列语句:录,可使用下列语句: Data1.RecordSet.FindFirst Title=副教授副教授如果要接着查找下一条职称为如果要接着查找下一条职称为“副教授副教授”的记录,可使用下列语句:的记录,可使用下列语句: Data1.RecordSet.FindNext 姓名姓名=副教授副教授如果条件部分与字段比较的数据来源于变量,如要查找的人的职称存放在变量如果条件部分与字段比较的数据来源于变量,如要查找的人的职称存放在变量ZC中,则查找满足条件的第一条记录的命令可按以下格式书写:中,则查找满足条件的第一条记录的命令可按以下格式书写: Data1.RecordSet.Fin
51、dFirst Title= & & ZC & 条件的设置方法:条件的设置方法:如果想要进行不精确查找,可使用如果想要进行不精确查找,可使用Like运算符。如职称的一部分信息包含在变量运算符。如职称的一部分信息包含在变量ZC中,现在要查找相应的记录,可使用下述命令:中,现在要查找相应的记录,可使用下述命令:Data1.RecordSet.FindFirst Title Like & * & ZC & *其中的其中的“*”为匹配符,表示可以是任意长度的任意字符。为匹配符,表示可以是任意长度的任意字符。注意:如果查找的数据是日期型,需要用两个注意:如果查找的数据是日期型,需要用两个“#”作用日期型数
52、据的定界符。作用日期型数据的定界符。Find方法进行的查找在默认的情况下是不区分大小写的,若要使查找区分大小写,方法进行的查找在默认的情况下是不区分大小写的,若要使查找区分大小写,可在窗体的声明部分使用可在窗体的声明部分使用Option Compare语句,该语句的格式如下:语句,该语句的格式如下:Option Compare Text|Binary如果使用可选项如果使用可选项Text表示不区分大小写,如果使用可选项表示不区分大小写,如果使用可选项Binary则区分大小写。则区分大小写。条件的设置方法:条件的设置方法:是否区分大小写的设置方法:是否区分大小写的设置方法:查找结果的判断:查找结果
53、的判断:各种查找命令执行后,可根据各种查找命令执行后,可根据Data控件的控件的RecordSet对象的对象的NoMatch属性值来测属性值来测试是否找到了相应的记录,如果找到则试是否找到了相应的记录,如果找到则NoMatch属性值为属性值为False,否则,否则NoMatch属性值为属性值为True。【例例9-4】为为CollegeMIS数据库中的数据库中的Teacher表编写一个教师查找程序。表编写一个教师查找程序。程序的设计界面如图程序的设计界面如图9-18所示。程序执行时,在所示。程序执行时,在“出生日期出生日期”后面的文本后面的文本框中输入合法的日期值,单击框中输入合法的日期值,单击
54、“按出生日期精确查找按出生日期精确查找”框架控件中的相应框架控件中的相应按钮,将按出生日期进行精确查找,如果找到,则显示找到的记录并给出按钮,将按出生日期进行精确查找,如果找到,则显示找到的记录并给出提示信息,如果找不到则显示消息框通知没有查找到,并把记录指针置于提示信息,如果找不到则显示消息框通知没有查找到,并把记录指针置于查找前的位置。在查找前的位置。在“按姓名模糊查找按姓名模糊查找”框架中的姓名后面的文本框中输入框架中的姓名后面的文本框中输入教师姓名中包含的字符后,单击该框架控件中的相应按钮,将查找姓名中教师姓名中包含的字符后,单击该框架控件中的相应按钮,将查找姓名中包含该字符的记录,如
55、果找到,则显示找到的记录并给出提示信息,如果包含该字符的记录,如果找到,则显示找到的记录并给出提示信息,如果找不到则显示提示框,并把记录指针置于查找前的位置。图找不到则显示提示框,并把记录指针置于查找前的位置。图9-19是某次按是某次按姓名进行模糊查找的运行结果。姓名进行模糊查找的运行结果。 图图9-18 例例9-4程序设计界面程序设计界面 图图9-1 例例9-4程序运行界面程序运行界面 实现思路:实现思路:本例可使用本例可使用Find方法进行查找,精确查找使用方法进行查找,精确查找使用“=”运算符,不精确查找运算符,不精确查找可使用可使用“Like”运算符。为使查找不到记录时,记录指针定位到
56、查找之前运算符。为使查找不到记录时,记录指针定位到查找之前的记录,可先用一个变量记下当前记录指针的位置(的记录,可先用一个变量记下当前记录指针的位置(RecordSet的的BookMark属性),在查找不到指定的记录时,再把该变量值赋值给属性),在查找不到指定的记录时,再把该变量值赋值给RecordSet的的BookMark属性。形成查找字符串时,需注意字符值用属性。形成查找字符串时,需注意字符值用“”作为定界符,日期值用作为定界符,日期值用“#”作为定界符。作为定界符。 程序代码见实例。程序代码见实例。9.2.5 Data控件的控件的Recordset对象的常用方法对象的常用方法3Seek方
57、法方法 使用使用Seek方法可在方法可在Table型记录集中查找与指定索引规则相符的第一条记录,并型记录集中查找与指定索引规则相符的第一条记录,并使之成为当前记录。使之成为当前记录。语法格式:语法格式:记录集对象记录集对象.Seek Comparison,Keyl,Key2,Keyn 参数说明:参数说明: Seek允许接受多个参数,第一个是允许接受多个参数,第一个是Comparison,是一个字符串,用来确定,是一个字符串,用来确定比较的类型。取值有:比较的类型。取值有:“=”、“=”、“”、“”、“ 0 Then BM = Data1.Recordset.Bookmark End If Da
58、ta1.Recordset.Index = JSH JSH为索引名称为索引名称 Data1.Recordset.Seek =,Text12.Text 在在Text12输入要查找的教输入要查找的教师号师号 If Data1.Recordset.NoMatch Then MsgBox (没有该教师号的教师没有该教师号的教师) Data1.Recordset.Bookmark = BM Else MsgBox(已找到该教师已找到该教师) End If注意:注意:由于在由于在Visual Basic中,对于用中,对于用ODBC连接连接SQL Server数据库不支持数据库不支持Table类型的记录集。
59、读者可建立一个类型的记录集。读者可建立一个Microsoft Access数据库,尝试数据库,尝试Seek方法方法的使用方法。的使用方法。9.2.5 Data控件的控件的Recordset对象的常用方法对象的常用方法4AddNew方法方法 增加记录的操作可分成以下三步:增加记录的操作可分成以下三步: (1)调用)调用AddNew方法;方法; (2)在数据绑定控件中输入记录数据,或给字段赋值,给字段赋值的格式为:)在数据绑定控件中输入记录数据,或给字段赋值,给字段赋值的格式为: Data控件名控件名.RecordSet.Fields(字段名字段名)=值值(3)调用)调用Update方法把添加的记
60、录保存到数据表中。方法把添加的记录保存到数据表中。 5Delete方法方法 Delete方法用于从记录集中删除记录。方法用于从记录集中删除记录。 9.2.5 Data控件的控件的Recordset对象的常用方法对象的常用方法6Edit方法方法 使用使用Edit修改记录集的当前记录一般需经过以下四步:修改记录集的当前记录一般需经过以下四步: (1)定位到要修改的记录使之成为当前记录;(2)调用Edit方法;7Update方法方法 Update方法用来把添加的新记录或把当前记录的修改结果保存到数据表中,该方法用来把添加的新记录或把当前记录的修改结果保存到数据表中,该方法只能在方法只能在Edit方法
61、或方法或AddNew方法执行后才能执行。通常在方法执行后才能执行。通常在“确认确认”按钮中调用按钮中调用该方法该方法 。 (3)给各字段赋值; (4)调用Update方法,确认所做的修改。 【例例9-5】为为CollegeMIS数据库的数据库的Teacher表编写一个维护程序,程序的设表编写一个维护程序,程序的设计界面如图计界面如图9-20所示,程序的运行界面如图所示,程序的运行界面如图9-21所示。程序运行时,单击所示。程序运行时,单击“删除删除”按钮将删除当前记录,单击按钮将删除当前记录,单击“添加添加”按钮将添加一条新记录,单击按钮将添加一条新记录,单击“修改修改”按钮将修改当前记录,单
62、击按钮将修改当前记录,单击“确认确认”按钮将把增加的新记录或对当前按钮将把增加的新记录或对当前记录的修改写入到数据库,单击记录的修改写入到数据库,单击“取消取消”按钮将取消所做的添加或修改操作。按钮将取消所做的添加或修改操作。 图图9-20 例例9-5的程序设计界面的程序设计界面图图9-21 单击了单击了“修改修改”按钮后的程按钮后的程序设计界面序设计界面 实现思路:实现思路:“添加添加”、“修改修改”、“确认确认”等操作需执行记录集的等操作需执行记录集的AddNew、Edit、Update等方法,等方法,“取消取消”操作需调用操作需调用Data控件的控件的UpdateControls方法。方
63、法。程序刚执行时,程序刚执行时,“确认确认”和和“取消取消”按钮应不能使用。执行了按钮应不能使用。执行了“添加添加”或或“修改修改”操作后,操作后,“添加添加”、“修改修改”及移动按钮均不能使用,而及移动按钮均不能使用,而“确认确认”和和“取消取消”按钮应能够使用。执行了按钮应能够使用。执行了“确认确认”或或“取消取消”操作后,操作后,“添添加加”按钮、按钮、“修改修改”按钮及移动按钮应能够使用,而按钮及移动按钮应能够使用,而“确认确认”和和“取消取消”按钮不能使用。只有在单击按钮不能使用。只有在单击“添加添加”和和“修改修改”按钮时,才能通过界面上按钮时,才能通过界面上的文本框、复选框、组合
64、框和图像框输入数据,其它情况下不能通过这些的文本框、复选框、组合框和图像框输入数据,其它情况下不能通过这些控件输入数据。控件输入数据。 程序代码见实例。程序代码见实例。注意:注意:利用利用Data控件使用控件使用ODBC连接到连接到SQL Server数据库,系统的某些功能不数据库,系统的某些功能不太稳定,如更新数据库,有时会报错,但再次更新却没有问题。但如果使用太稳定,如更新数据库,有时会报错,但再次更新却没有问题。但如果使用Visual Basic的本地数据库的本地数据库Access,就不会出现这样的问题。注意,就不会出现这样的问题。注意Data控件只能控件只能识别识别Microsoft
65、Access 97以前版本的数据库。以前版本的数据库。9.2.6 Data控件的常用事件控件的常用事件1Validate事件事件 (1)发生时机)发生时机 在当记录指针位置发生改变、离开当前记录时发生。当用户按了在当记录指针位置发生改变、离开当前记录时发生。当用户按了Data控件上控件上的任一个浏览按钮,或包含的任一个浏览按钮,或包含Data控件的窗体被卸载时就会发生该事件。利用控件的窗体被卸载时就会发生该事件。利用Validate事件,用户在修改记录时可以判断所输入的记录是否符合要求,只有符合事件,用户在修改记录时可以判断所输入的记录是否符合要求,只有符合要求并执行了要求并执行了Valida
66、te事件后,记录指针才会真正离开当前记录。事件后,记录指针才会真正离开当前记录。 (2)事件语法格式)事件语法格式当当Validate事件发生时,事件发生时,Data控件检查所有与它绑定的控件中的数据是否发生控件检查所有与它绑定的控件中的数据是否发生了改变,然后设置两个参数:了改变,然后设置两个参数:Save参数和参数和Action参数。参数。Save参数用来判断是否有参数用来判断是否有数据发生了改变,如果有,该参数值为数据发生了改变,如果有,该参数值为True,否则该参数值为,否则该参数值为False。Action参数参数的取值如下表所示。的取值如下表所示。 Private Sub Data
67、控件名控件名_Validate(Index As Integer,Action As Integer,Save As Integer) (3)参数说明)参数说明 【例例9-6】在例在例9-5的基础上,编程对用户输入的数据进行验证:如果用户输的基础上,编程对用户输入的数据进行验证:如果用户输入的教师姓名信息为空,则给出提示信息入的教师姓名信息为空,则给出提示信息“姓名不能为空!姓名不能为空!”,并取消对,并取消对Data控件的操作。某时刻的程序运行界面如图控件的操作。某时刻的程序运行界面如图9-22所示。所示。 图图9-22 姓名输入为空时的程序运行界面姓名输入为空时的程序运行界面 实现思路:实
68、现思路:可在可在Data控件的控件的Validate事件中对输入的教师姓名信息进行验证,事件中对输入的教师姓名信息进行验证,如果姓名信息为空,可通过给如果姓名信息为空,可通过给Action参数赋值参数赋值0取消所执行的操作。取消所执行的操作。 程序代码见实例。程序代码见实例。9.2.6 Data控件的常用事件控件的常用事件2Reposition事件事件 (1)发生时机)发生时机 Reposition事件是在记录指针移动到当前记录位置前发生。使用该事件可以事件是在记录指针移动到当前记录位置前发生。使用该事件可以在指针到达当前记录位置之前进行基于当前记录的数据操作,也可以改变其他对象在指针到达当前
69、记录位置之前进行基于当前记录的数据操作,也可以改变其他对象的属性或使用其他对象的方法来设置窗体和界面。的属性或使用其他对象的方法来设置窗体和界面。Reposition事件执行结束后,事件执行结束后,指针才真正到达当前的记录。指针才真正到达当前的记录。 (2)事件语法格式)事件语法格式Private Sub data控件名控件名_Reposition(Index As Integer) 【例例9-7】为为CollegeMIS数据库统编写一个程序,用来查看教师所教课程的情况。数据库统编写一个程序,用来查看教师所教课程的情况。程序设计界面如图程序设计界面如图9-23所示,该设计界面上有一个所示,该设
70、计界面上有一个MSFlexGrid控件,用来显示对应控件,用来显示对应教师的授课情况,当教师表的记录指针发生变化时,教师的授课情况,当教师表的记录指针发生变化时,MSFlexGrid控件中的内容也相控件中的内容也相应发生变化。程序运行界面如图应发生变化。程序运行界面如图9-24所示。所示。 图图9-23 例例9-7程序设计界面程序设计界面 图图9-24 例例9-7程序运行界面程序运行界面 实现思路:实现思路: 本题使用了本题使用了MSFlexGrid控件来显示记录集的数据,控件来显示记录集的数据,MSFlexGrid控件不是控件不是Visual Basic的标准控件,应先把该控件加载到的标准控
71、件,应先把该控件加载到Visual Basic环境中,加载方法如环境中,加载方法如下:下: 本例要完成的功能是:当与本例要完成的功能是:当与Teacher表相联系的表相联系的Data控件的记录指针发生移控件的记录指针发生移动后,要更新动后,要更新MSFlexGrid控件中显示的内容。因此可在与控件中显示的内容。因此可在与Teacher表相联系的表相联系的Data控件的控件的Reposition事件中,设置与事件中,设置与MSFlexGrid控件相联系的控件相联系的Data控件的控件的RecordSource属性,可使用一条属性,可使用一条SELECT语句实现,然后调用这个语句实现,然后调用这个
72、Data控件的控件的Refresh方法即可。方法即可。 (1)执行)执行【工程工程】【部件部件】命令命令,将会出现将会出现“部件部件”对话框;对话框; (2)在)在“控件控件”页的列表框中找到页的列表框中找到“Microsoft FlexGrid Control 6.0”控件并选中控件并选中它;它; (3)单击)单击“确定确定”按钮。按钮。 两个结论:两个结论:(1)通过在)通过在Data控件的控件的Reposition事件中编写代码,可以实现多个表的联动;事件中编写代码,可以实现多个表的联动; (2)可以使用)可以使用Data控件执行控件执行SQL-SELECT查询语句,方法是先形成查询语句
73、的字符查询语句,方法是先形成查询语句的字符串,然后把该字符串赋值给串,然后把该字符串赋值给Data控件的控件的RecordSource属性。属性。 n9.3.1 DBlist控件和控件和DbCombo控件的使用控件的使用n9.3.2 MSFlexGrid控件的使用控件的使用n9.3.3 DBGrid控件的使用控件的使用 9.3 高级数据绑定控件的使用高级数据绑定控件的使用9.3.1 DBlist控件和控件和DbCombo控件的使用控件的使用1作用作用 DBList控件和控件和DBCombo控件在功能上类似于标准的列表框和组合框,用来控件在功能上类似于标准的列表框和组合框,用来给用户提供选项列表
74、。关键的区别在于给用户提供选项列表。关键的区别在于DBlist和和DBCombo控件从记录集中获取它控件从记录集中获取它们的信息,而不是通过在设计时输入或运行时执行们的信息,而不是通过在设计时输入或运行时执行AddItem语句来获得列表信息。语句来获得列表信息。DBlist和和DBCombo的区别在于,的区别在于,DBlist是列表框,而是列表框,而DBCombo是组合框。是组合框。 2 示意图示意图3两个控件的主要属性两个控件的主要属性 (1)RowSource属性属性 RowSource属性用来指定控件中列表信息的来源,通常为一个属性用来指定控件中列表信息的来源,通常为一个Data控件名,
75、控件名,该该Data控件形成的记录集的一个字段信息作为控件列表的来源,如图控件形成的记录集的一个字段信息作为控件列表的来源,如图9-25中的联中的联系系Department表的表的Data控件。控件。 (2)DataSource属性属性 DataSource属性用来指出输入或修改的数据来源,通常为一个属性用来指出输入或修改的数据来源,通常为一个Data控件名,控件名,该该Data控件形成的记录集的一个字段用来接收用户的输入或修改,如图控件形成的记录集的一个字段用来接收用户的输入或修改,如图9-25中的中的联系联系Teacher表的表的Data控件。控件。 (3)ListField属性属性 Li
76、stField属性用来指定列表中的数据来源于属性用来指定列表中的数据来源于RowSource属性指定的属性指定的Data控控件形成的记录集的哪个字段,如图件形成的记录集的哪个字段,如图9-25中的中的Department表形成的数据集中的表形成的数据集中的DepartName字段。字段。 3两个控件的主要属性两个控件的主要属性 (4)DataField属性属性 DataField属性用来指定用户输入或修改的数据保存到属性用来指定用户输入或修改的数据保存到DataSource属性指定的属性指定的Data控件形成的记录集的哪个字段,如图控件形成的记录集的哪个字段,如图9-25中中Teacher表形
77、成的数据集中的表形成的数据集中的DepartNo字段。字段。 (5)BoundColumn属性属性 BoundColumn属性用来指定由属性用来指定由RowSource属性指定的属性指定的Data控件形成的记控件形成的记录集的哪个字段与录集的哪个字段与DataField字段相绑定。实际工作方式是:根据用户输入字段相绑定。实际工作方式是:根据用户输入ListField字段的值,找到字段的值,找到BoundColumn中的对应值,再把该值写到中的对应值,再把该值写到DataField字段中。字段中。 【例例9-8】对例对例9-5进行修改,要求:系号的输入使用进行修改,要求:系号的输入使用DBCom
78、bo控件来实现,通过控件来实现,通过选择系名来输入系号。程序的运行界面分别如图选择系名来输入系号。程序的运行界面分别如图9-26所示。注意:在保存时把窗体名所示。注意:在保存时把窗体名改为改为frmTeacher,窗体的文件名为,窗体的文件名为frmTeacher.frm。 图图9-26 例例9-8程序运行界面程序运行界面 实现思路:实现思路: 要使用要使用Department表中保存的系名信息来向表中保存的系名信息来向Teacher表中输入系号,可使用表中输入系号,可使用DBCombo控件或控件或DBList控件,本题使用控件,本题使用DBCombo控件,它的各属性设置可如控件,它的各属性设
79、置可如图图9-25所示。所示。 9.3.2 MSFlexGrid控件的使用控件的使用(1)Col属性:表示当前列。属性:表示当前列。(2)Cols属性:表示网格中的列数。属性:表示网格中的列数。(3)Row属性:表示当前行。属性:表示当前行。(4)Rows属性:表示网格中的行数。属性:表示网格中的行数。(5)RowHeight属性:表示网格每行的高度。属性:表示网格每行的高度。(6)ColWidth属性:表示网格中每列的宽度。属性:表示网格中每列的宽度。(7)FixedCols属性:表示网格中固定在左边的列数。属性:表示网格中固定在左边的列数。(8)FixedRows属性:表示网格中固定在顶部
80、的行数。属性:表示网格中固定在顶部的行数。(9)GridLine属性:决定网格是否要网格线。属性:决定网格是否要网格线。(10)Scrollbars属性:该属性决定滚动条的样式。属性:该属性决定滚动条的样式。(11)Text属性:存放在当前单元格中的文本。属性:存放在当前单元格中的文本。(12)Picture属性:存放在当前单元格中的图片。属性:存放在当前单元格中的图片。9.3.3 DBGrid控件的使用控件的使用1. 作用作用 以网格的形式显示数据集的内容,与以网格的形式显示数据集的内容,与MSFlexGrid控件不同的是控件不同的是DBGrid控件允控件允许用户对显示的数据进行修改。许用户
81、对显示的数据进行修改。 DBGrid控件是一个控件是一个ActiveX控件,需把它加载到控件,需把它加载到Visual Basic环境中才可以环境中才可以使用。加载方法是:执行使用。加载方法是:执行【工程工程】【部件部件】命令命令,将会出现将会出现“部件部件”对话框对话框”,在该对话框的在该对话框的“控件控件”页的列表框中找到页的列表框中找到“Microsoft Data Bound Grid Control 5.0”控件并选中它,然后单击控件并选中它,然后单击“确定确定”按钮即可。按钮即可。 3.两个属性两个属性 DataMode用来决定用来决定DBGrid控件中显示数据的类型,取值为控件中
82、显示数据的类型,取值为“0-Bound”,表,表示数据来源于与之相绑定的示数据来源于与之相绑定的Data控件,取值为控件,取值为“1-Unbound”,表示该控件不与,表示该控件不与Data控件绑定,需要用户利用手工或编程方式输入数据。控件绑定,需要用户利用手工或编程方式输入数据。DataSource属性用来设属性用来设置与之绑定的置与之绑定的Data控件,把它的值设置为一个控件,把它的值设置为一个Data控件的名称即可把该控件的名称即可把该Data控件控件形成的记录集中的数据显示出来。形成的记录集中的数据显示出来。 2.加载加载【例例9-9】为为CollegeMIS数据库编程一个班级信息浏览
83、程序,程序的设计界面如图数据库编程一个班级信息浏览程序,程序的设计界面如图9-27所示,程序的运行界面如图所示,程序的运行界面如图9-28所示。所示。 图图9-27 例例9-9程序设计界面程序设计界面 图图9-28 例例9-9程序运行界面程序运行界面 实现思路:实现思路:在窗体上放置一个在窗体上放置一个Data控件,与数据库控件,与数据库CollegeMIS中的中的Class表联系起来。表联系起来。把把DBGrid控件加载到工程中来,然后把它和控件加载到工程中来,然后把它和Data控件绑定起来。在设计状态下,控件绑定起来。在设计状态下,为为DBGrid控件增加两列,并把各列与控件增加两列,并把
84、各列与Class表中的对应字段绑定在一起,以便显表中的对应字段绑定在一起,以便显示字段值。示字段值。 实现步骤实现步骤 :(1)在)在DBGrid1控件上单击右键,在出现的快捷菜单中选中控件上单击右键,在出现的快捷菜单中选中“Edit”菜单项,菜单项,DBGrid1处于编辑状态。此时在处于编辑状态。此时在DBGrid1控件上单击右键,将会控件上单击右键,将会出现快捷菜单。在该快捷菜单中选择出现快捷菜单。在该快捷菜单中选择“Append”菜单项将为菜单项将为DBGrid1控件控件添加一列。反复执行,直到列数为添加一列。反复执行,直到列数为4列。列。(2)在快捷菜单中选择)在快捷菜单中选择“Pro
85、perties”菜单项,将会出现菜单项,将会出现 “属性属性”页页对话框。在该对话框中单击对话框。在该对话框中单击“Columns”页标签,然后对每一列的页标签,然后对每一列的Caption属性(显示列标题)和属性(显示列标题)和DataField属性(与对应字段相绑定)进属性(与对应字段相绑定)进行设置。设置完成后,运行程序。行设置。设置完成后,运行程序。 注意:注意:也可选择也可选择“Retrieve Fields”菜单项,此时,将产生与字段数目一样多的列,菜单项,此时,将产生与字段数目一样多的列,并且每列与对应的字段绑定在一起。选项并且每列与对应的字段绑定在一起。选项“Clear Fie
86、lds”将清除列与字段的绑定。将清除列与字段的绑定。 数据库应用教程数据库应用教程n10.1 ADO对象模型概述对象模型概述 n10.2 Connection对象对象 n10.3 RecordSet对象对象 第第10章章 利用利用ADO开发数据库应用程序开发数据库应用程序n10.4 Command对象对象 n10.5 Field对象和对象和Fields集合集合 n10.6 Error对象和对象和Errors集合集合 n10.7 ADO对象综合应用例对象综合应用例 n10.1.1 ADO数据访问技术的基本概念数据访问技术的基本概念n10.1.2 ADO模型的对象模型的对象n10.1.3 加载加载
87、ADO对象库对象库 10.1 ADO对象模型概述对象模型概述 10.1.1 ADO数据访问技术的基本概念数据访问技术的基本概念1.概况概况ADO(ActiveX Data Object)是微软最新的数据访问组件(微软数)是微软最新的数据访问组件(微软数据访问组件简称据访问组件简称MDAC)的一部分,)的一部分,MDAC的常用版本有的常用版本有MDAC 2.5和和MDAC 2.7,ADO的最新的版本的最新的版本ADO.NET也包含在也包含在MDAC 2.7中。中。 ADO是基于是基于OLE-DB(Object Linking & Embedded Database)之上的面向对象的数据访问模型,
88、之上的面向对象的数据访问模型,OLE-DB是微软公司开发的一种高性是微软公司开发的一种高性能的、基于能的、基于COM的低层的数据访问接口,其作用是向应用程序提供一个的低层的数据访问接口,其作用是向应用程序提供一个统一的数据访问方法,而不必考虑数据源的具体格式和存储方式。由于统一的数据访问方法,而不必考虑数据源的具体格式和存储方式。由于OLE-DB直接调用数据提供者开发的数据驱动程序,所以具有性能高、直接调用数据提供者开发的数据驱动程序,所以具有性能高、速度快等特点。速度快等特点。 ADO组件包含了所有的可以被组件包含了所有的可以被OLE-DB标准接口描述的数据类型,标准接口描述的数据类型,通过
89、通过ADO的方法和属性可以为应用程序提供统一的数据访问方法和接口。的方法和属性可以为应用程序提供统一的数据访问方法和接口。 ADO对象模型还具有可扩展性,当把数据库上层应用程序移植到不对象模型还具有可扩展性,当把数据库上层应用程序移植到不同的数据库平台上时,只需要更换连接数据库的驱动程序,而不需要对同的数据库平台上时,只需要更换连接数据库的驱动程序,而不需要对上层程序作任何修改。上层程序作任何修改。 10.1.1 ADO数据访问技术的基本概念数据访问技术的基本概念2.特点特点(1)支持批处理()支持批处理(Batch Updating),可以分批处理客户端提出的请求。),可以分批处理客户端提出
90、的请求。(2)支持存储过程()支持存储过程(Stored Procedures),可使用输入参数给存储),可使用输入参数给存储过程输入值,使用输出参数取得存储过程的返回值。过程输入值,使用输出参数取得存储过程的返回值。 (3)可以使用存储过程或批处理)可以使用存储过程或批处理SQL指令,实现返回多组记录集的功能。指令,实现返回多组记录集的功能。10.1.1 ADO数据访问技术的基本概念数据访问技术的基本概念3. ADO操作数据库的物理机制操作数据库的物理机制 10.1.2 ADO模型的对象模型的对象1.概况概况ADO模型的对象库主要由模型的对象库主要由7个基本对象和个基本对象和4个集合对象构成
91、,七个基个集合对象构成,七个基本对象分别是本对象分别是Connection、Recordset、Command、Field、Property、Parameter和和Error,4个集合对象是个集合对象是Errors、Fields、Parameters和和Properties。2.对象之间的关系对象之间的关系10.1.2 ADO模型的对象模型的对象3.基本对象基本对象 (1)Connection(连接)对象(连接)对象 Connection 对象代表与数据源的连接,它包含了关于目标数据库数对象代表与数据源的连接,它包含了关于目标数据库数据提供者(据提供者(Data Provider)的相关信息。
92、可利用)的相关信息。可利用Connection对象管理与对象管理与数据库的连接,包括打开连接、关闭连接、运行数据库的连接,包括打开连接、关闭连接、运行SQL语句等。语句等。 (2)Recordset(记录集)对象(记录集)对象 Recordset对象表示的是来自基本表或命令执行结果的记录的集合,对象表示的是来自基本表或命令执行结果的记录的集合,由一系列字段组成。在任何时候,由一系列字段组成。在任何时候,Recordset对象所指的当前记录均为集对象所指的当前记录均为集合内的单个记录。可以把合内的单个记录。可以把Recordset对象看成是内存中的二维表。对象看成是内存中的二维表。 10.1.2
93、 ADO模型的对象模型的对象(3)Command(命令)对象(命令)对象 Command对象定义了将对数据源执行的指定命令,通过已建立的连对象定义了将对数据源执行的指定命令,通过已建立的连接发出接发出“命令命令”可以以某种方式来操作数据源。一般情况下,通过命令对可以以某种方式来操作数据源。一般情况下,通过命令对象可以在数据源中添加、删除或更新数据,或者从数据库中检索数据,并象可以在数据源中添加、删除或更新数据,或者从数据库中检索数据,并以记录集的形式返回。以记录集的形式返回。 (4)Field(字段)对象(字段)对象 如果将记录集看作二维网格,每一字段(列)就是一个如果将记录集看作二维网格,每
94、一字段(列)就是一个Field对象,对象,Field对象具有名称、数据类型和值等属性,在值属性中包含了来自数据对象具有名称、数据类型和值等属性,在值属性中包含了来自数据源的真实数据。源的真实数据。 (5)Property(属性)对象(属性)对象 Property对象表示对象表示ADO对象的特征,每个对象的特征,每个ADO对象都由一组唯一的对象都由一组唯一的Property(属性)对象来描述或控制对象的行为。(属性)对象来描述或控制对象的行为。 属性有内置和动态两种类型。内置属性是属性有内置和动态两种类型。内置属性是ADO对象的一部分并且随对象的一部分并且随时可用。动态属性则由特别的数据提供者添
95、加到时可用。动态属性则由特别的数据提供者添加到ADO对象的属性集合中,对象的属性集合中,仅在数据库提供者被使用时才能存在。仅在数据库提供者被使用时才能存在。 10.1.2 ADO模型的对象模型的对象(6)Parameter(参数)属性(参数)属性 命令需要的变量部分即命令需要的变量部分即“参数参数”,参数可以在命令发布之前进行更改,参数可以在命令发布之前进行更改。例如,可重复发出相同的数据检索命令(如检索成绩为某等级的学生数。例如,可重复发出相同的数据检索命令(如检索成绩为某等级的学生数据,等级用一个变量据,等级用一个变量DJ来表示,此处的来表示,此处的DJ就可看成是一个参数),但每就可看成是
96、一个参数),但每一次均可更改指定的检索信息(如第一次一次均可更改指定的检索信息(如第一次DJ为为“良好良好”,第二次,第二次DJ为为“优秀优秀”等)。等)。 在在ADO中,中,Parameter对象用于管理与基于参数化查询或存储过程对象用于管理与基于参数化查询或存储过程的的Command对象相关联的参数。对象相关联的参数。 (7)Error对象对象 应用程序执行过程中,错误的发生是不可避免的,错误通常是由于无应用程序执行过程中,错误的发生是不可避免的,错误通常是由于无法建立连接、执行命令或对某些状态(例如,试图使用没有初始化的记录法建立连接、执行命令或对某些状态(例如,试图使用没有初始化的记录
97、集)的对象进行操作时发生。集)的对象进行操作时发生。ADO对象模型用对象模型用Error对象体现错误,任意对象体现错误,任意给定的错误都会产生一个或多个给定的错误都会产生一个或多个Error对象。对象。Error对象包含单个操作产生对象包含单个操作产生的错误的详细信息,还包含数据库驱动程序出错时的扩展信息。的错误的详细信息,还包含数据库驱动程序出错时的扩展信息。 。 经常使用的经常使用的ADO对象有对象有:Connection 对象、对象、RecordSet对象、对象、Command对象、对象、Fields对象和对象和Field对象。对象。 10.1.2 ADO模型的对象模型的对象4集合对象集
98、合对象 ADO还提供了集合对象,在集合对象中可以包含基本对象。还提供了集合对象,在集合对象中可以包含基本对象。使用集合方法可按名称(文本字符串)或序号(整型数)对集合中使用集合方法可按名称(文本字符串)或序号(整型数)对集合中的对象进行检索。的对象进行检索。 (1)Errors集合对象集合对象 Connection对象具有对象具有Errors集合,其中包含集合,其中包含Error对象。对象。 (2)Parameters对象对象 Command对象具有对象具有Parameters集合,包含应用于集合,包含应用于Command对象对象的所有的所有Parameter对象。对象。 10.1.2 ADO
99、模型的对象模型的对象 (3)Fields对象对象 Recordset对象具有对象具有Fields集合,包含集合,包含Recordset对象中的所有对象中的所有Field对象。对象。 (4)Properties对象对象 Connection、Command、Recordset和和Field对象都具有对象都具有Properties集合,它包含所有属于各个对象的集合,它包含所有属于各个对象的Property对象。对象。 10.1.3 加载加载ADO对象库对象库 加载方法加载方法 在在Visual Basic 6.0中,有两种中,有两种ADO对象库:一种叫对象库:一种叫ADODB,包,包含在含在MSA
100、DO*.DLL(*代表版本号)中;一种叫做代表版本号)中;一种叫做ADOR,包含在,包含在MSADOR15.DLL中。引用这两种类型库的方法是执行中。引用这两种类型库的方法是执行“工程工程”菜单中菜单中的的“引用引用”命令,将出现命令,将出现“引用引用”对话框,在该对话框中选中对话框,在该对话框中选中“Microsoft ActiveX Data Object 2.7 Library(ADODB)”或或“Microsoft ActiveX Data Object Recordset 2.7 Library(ADOR)”,然后按,然后按“确定确定”按钮即可。按钮即可。 n10.2.1 Conne
101、ction对象的常用属性对象的常用属性n10.2.2 Connection对象的常用方法对象的常用方法n10.2.3 连接到数据库的方法连接到数据库的方法10.2 Connection对象对象10.2 Connection对象对象 作用概述作用概述 Connection对象可以用来在应用程序和数据库之间建立一条数据对象可以用来在应用程序和数据库之间建立一条数据传输传输“通道通道”,利用这个,利用这个“通道通道”,应用程序就可使用,应用程序就可使用Command对象、对象、Recordse对象等来对对象等来对Connection对象所连接的数据库进行插入、删对象所连接的数据库进行插入、删除、更新
102、和查询等操作。除、更新和查询等操作。 打电话例打电话例 应用程序和数据库是通话的双方,建立一个应用程序和数据库是通话的双方,建立一个Connection对象就像对象就像是应用程序拿起了是应用程序拿起了“话筒话筒”,打开一个,打开一个Connection对象就好象应用程对象就好象应用程序在序在“拨号拨号”,“拨号拨号”即连接打开成功,应用程序和数据库就可以即连接打开成功,应用程序和数据库就可以“通话通话”了,即应用程序就可以使用了,即应用程序就可以使用Command对象及对象及Recordset对象操对象操作数据库了。作数据库了。 10.2.1 Connection对象的常用属性对象的常用属性
103、1ConnectionString属性属性 该属性是一个可读写该属性是一个可读写String类型的属性,用来设置或返回数据提供类型的属性,用来设置或返回数据提供者或服务提供者打开到数据源的连接所需要的特定信息,即连接字符串。者或服务提供者打开到数据源的连接所需要的特定信息,即连接字符串。 2ConnectionTimeout属性属性 该属性是一个可读写该属性是一个可读写Long类型的属性,用来指定中止一个失败的类型的属性,用来指定中止一个失败的Connection对象的对象的Open方法调用之前必须等待的时间,默认值为方法调用之前必须等待的时间,默认值为15秒。秒。 3CommandTimeo
104、ut属性属性 该属性是一个可读写的该属性是一个可读写的Long类型的属性,用来指定中止某个相关类型的属性,用来指定中止某个相关Command对象的对象的Execute方法调用之前必须等待的时间。默认值为方法调用之前必须等待的时间。默认值为30秒。秒。 10.2.1 Connection对象的常用属性对象的常用属性 4State属性属性 该属性是一个可读写该属性是一个可读写Long类型的属性,用来指定连接是处于打开类型的属性,用来指定连接是处于打开状态,还是处于关闭状态或中间状态。状态,还是处于关闭状态或中间状态。 5Version属性属性该属性是一个字符串型的属性,用来返回该属性是一个字符串型
105、的属性,用来返回ADO对象库的版本号。对象库的版本号。 10.2.2 Connection对象的常用方法对象的常用方法 1BeginTrans方法方法该方法用于启动新的事务,格式如下:该方法用于启动新的事务,格式如下:level = ConnectionObj.BeginTrans() 或或 ConnectionObj.BeginTrans其中其中ConnectionObj是连接对象变量名,如果该方法作为函数调用则返是连接对象变量名,如果该方法作为函数调用则返回指示事务嵌套层次的长整型数据。回指示事务嵌套层次的长整型数据。 2CommitTrans方法方法该方法用于保存所有更改并结束当前事务。
106、也可以使用它启动新事务。该方法用于保存所有更改并结束当前事务。也可以使用它启动新事务。格式如下:格式如下:ConnectionObj.CommitTrans 3RollbackTrans方法方法 该方法用于取消当前事务中所做的所有操作并结束事务。它也可以启该方法用于取消当前事务中所做的所有操作并结束事务。它也可以启动新事务。格式如下:动新事务。格式如下:ConnectionObj.RollbackTrans10.2.2 Connection对象的常用方法对象的常用方法 4Open方法方法 用来打开到数据源的连接。语法格式如下:用来打开到数据源的连接。语法格式如下:ConnectionObj.O
107、pen ConnectionString, UserID, Password, OpenOptions参数参数ConnectionString是一个字符串,包含连接信息;参数是一个字符串,包含连接信息;参数UserID也也是一个字符串属性,包含建立连接时所使用的用户名称;参数是一个字符串属性,包含建立连接时所使用的用户名称;参数Password也也是一个字符串属性,包含建立连接时所有的用户密码;是一个字符串属性,包含建立连接时所有的用户密码;OpenOptions参数参数使用场合不多,这里不再介绍。使用场合不多,这里不再介绍。UserID和和Password属性的值通常可在属性的值通常可在Co
108、nnectionString属性中一起设置。属性中一起设置。 设置连接参数有两种方法:一种是设置连接对象的设置连接参数有两种方法:一种是设置连接对象的ConnectionString属性,然后调用属性,然后调用Connection对象的不带参数的对象的不带参数的Open方法;二是在调用方法;二是在调用Connection对象的对象的Open方法时使用可选的参数方法时使用可选的参数ConnectionString,此时,此时ConnectionString属性将自动继承该参数的值。属性将自动继承该参数的值。 10.2.2 Connection对象的常用方法对象的常用方法5Close方法方法调用调
109、用Close方法可关闭方法可关闭Connection对象。使用格式如下:对象。使用格式如下:ConnectionObj.Close关闭连接并非将它从内存中删除,此后还可以更改它的属性设置并且还可以关闭连接并非将它从内存中删除,此后还可以更改它的属性设置并且还可以再次打开。要将对象从内存中完全删除,可将对象变量赋值为再次打开。要将对象从内存中完全删除,可将对象变量赋值为Nothing,例,例如:如:Set ConnectionObj=Nothing使用使用Close方法关闭方法关闭Connection对象的同时,也将关闭与此连接相关联的任对象的同时,也将关闭与此连接相关联的任何活动何活动Reco
110、rdset对象。关闭对象。关闭Connection对象后,调用任何需要与数据源对象后,调用任何需要与数据源连接的方法都将产生错误。连接的方法都将产生错误。 10.2.2 Connection对象的常用方法对象的常用方法6Execute方法方法该方法用来执行查询、该方法用来执行查询、SQL 语句、存储过程或特定提供者的文本命令等语句、存储过程或特定提供者的文本命令等。格式格式1: ConnectionObj.Execute CommandText, RecordsAffected, Options 格式格式2: Set RecordsetObj = ConnectionObj.Execute (
111、CommandText, RecordsAffected, Options) 参数说明:参数说明: 该方法有三个参数,参数该方法有三个参数,参数CommandText是一个字符串,包含要执行的是一个字符串,包含要执行的SQL语句、表名、存储过程或特定提供者的文本命令;语句、表名、存储过程或特定提供者的文本命令;RecordsAffected是是一个长整型的可选参数,里面存放着调用该方法所影响的记录数目;参数一个长整型的可选参数,里面存放着调用该方法所影响的记录数目;参数Options也是一个可选的长整型参数,用来说明也是一个可选的长整型参数,用来说明CommandText 参数中包含参数中包含
112、的是什么的是什么 。10.2.2 Connection对象的常用方法对象的常用方法7Cancel方法方法该方法用来终止异步执行的该方法用来终止异步执行的Execute或或Open方法调用。如果试图终止的方方法调用。如果试图终止的方法不是异步执行的方法,则将会出现运行错误。法不是异步执行的方法,则将会出现运行错误。 8OpenSchema方法方法 该方法用来返回数据库的纲要信息。该方法用来返回数据库的纲要信息。 10.2.3 连接到数据库的方法连接到数据库的方法概况:概况:连接到数据库的关键是形成连接字符串,然后把连接字符串赋连接到数据库的关键是形成连接字符串,然后把连接字符串赋值给值给Conn
113、ection对象的对象的ConnectionString属性,或在调用连接对象属性,或在调用连接对象的的Open方法时,把连接字符串作为它的方法时,把连接字符串作为它的ConnectionString参数值。参数值。下面主要介绍连接字符串的设置方法,采用的数据库类型为下面主要介绍连接字符串的设置方法,采用的数据库类型为Microsoft Access数据库和数据库和SQL Server数据库。数据库。 10.2.3 连接到数据库的方法连接到数据库的方法1通过通过ODBC的的DSN建立连接建立连接 (1)通过)通过ODBC的的DSN连接到连接到SQL Server数据库数据库 通过通过ODBC的
114、的DSN连接到连接到SQL Server数据库的连接字符串的一般形式如下:数据库的连接字符串的一般形式如下:DSN=SQLCollegeMIS;uid=sa;pwd=tah980808其中,其中,“SQLCollegeMIS”是已经创建好的是已经创建好的SQL Server数据库的数据库的DSN,“sa”是用户名(系统管理员),是用户名(系统管理员),“tah980808”是用户(系统管理员)密码。是用户(系统管理员)密码。(2)通过)通过ODBC的的DSN连接到连接到Access数据库数据库 通过通过ODBC的的DSN连接到连接到Access数据库的连接字符串的一般形式如下:数据库的连接字符
115、串的一般形式如下:DSN=AccessCMIS;uid=;pwd= 其中,其中,“AccessCMIS”是已经创建好的是已经创建好的Microsoft Access数据库的数据库的DSN。10.2.3 连接到数据库的方法连接到数据库的方法2通过通过ODBC建立连接建立连接(1)通过)通过ODBC连接到连接到SQL Server数据库数据库 该方式的连接字符串有两种:普通安全模式和信任安全模式。该方式的连接字符串有两种:普通安全模式和信任安全模式。使用普通安全模式的连接字符串的一般形式如下:使用普通安全模式的连接字符串的一般形式如下:Driver=SQL Server; Server=tahsj
116、; Database=CollegeMIS;uid =sa;pwd=tah980808 其中其中“tahsj”是服务器名,是服务器名,“CollegeMIS”是数据库名,是数据库名,“sa”是用户名,是用户名,“tah980808”是用户密码。是用户密码。使用信任安全模式的连接字符串的一般形式如下:使用信任安全模式的连接字符串的一般形式如下:Driver=SQL Server; Server=tahsj; Database=CollegeMIS;uid =;pwd= 与普通安全模式相比,只是不需要提供用户名和密码。与普通安全模式相比,只是不需要提供用户名和密码。(2)通过)通过ODBC连接到连
117、接到Access数据库数据库 通过通过ODBC连接到连接到Access数据库的连接字符串的一般形式如下:数据库的连接字符串的一般形式如下:DRIVER=Microsoft Access Driver (*.mdb);DBQ= & App.Path & JiaoXue.mdb该字符串的作用是连接到应用程序所在目录下的该字符串的作用是连接到应用程序所在目录下的JiaoXue.mdb数据库。数据库。10.2.3 连接到数据库的方法连接到数据库的方法3通过通过OLE-DB建立连接建立连接使用使用OLE-DB建立连接的连接字符串原型如下:建立连接的连接字符串原型如下:ProviderProviderNa
118、me;User IDUserName;PasswordUserPassword;initial CatalogDatabaseName;DataSource=ServerNameProvider:指定连接数据库的类型。如果连接的是:指定连接数据库的类型。如果连接的是Access数据库,则此数据库,则此处应赋值处应赋值 Microsoft Jet OLEDB 4.0;如果连接的为;如果连接的为SQL Server 2000数数据库,则此处赋值为据库,则此处赋值为SQLOLEDB.l。 UserID:用户:用户ID为访问数据库的用户名,例如为访问数据库的用户名,例如SQL Server 2000中
119、的中的sa用户。用户。Password:用户密码是指与用户:用户密码是指与用户ID对应的密码。对应的密码。 InitialCatalog:根据连接数据库的不同,该参数也有不同的含义,在:根据连接数据库的不同,该参数也有不同的含义,在SQL Server 2000中是指默认打开的数据库名称。中是指默认打开的数据库名称。 DataSource:指定连接的数据库服务器名称。不但可以是数据库服务器的:指定连接的数据库服务器名称。不但可以是数据库服务器的名称,还可以是数据库服务器的名称,还可以是数据库服务器的IP地址或数据库服务器的主机名称,若是本机地址或数据库服务器的主机名称,若是本机可以指定为可以指
120、定为127.0.0.1或或Local。 10.2.3 连接到数据库的方法连接到数据库的方法(1)通过)通过OLE-DB连接到连接到SQL Server数据库数据库通过通过OLE-DB连接到连接到SQL Server数据库的连接字符串的一般形式如下:数据库的连接字符串的一般形式如下:Provider=SQLOLEDB.1;User ID=sa;Password=tah980808; Initial Catalog=CollegeMIS; Data Source=TAHSJ其中,其中,Provider关键字用于指定要连接关键字用于指定要连接SQL Server 2000服务器;服务器;User I
121、Dsa和和PasswordTAH980808分别为连接到分别为连接到SQL Server 2000数据库服务数据库服务器的用户名和密码;器的用户名和密码;Initial Catalog指定打开的数据库为指定打开的数据库为CollegeMIS;DataSource指定指定SQL Server数据库服务器为数据库服务器为TAHSJ。 (2)通过)通过OLE-DB连接到连接到Access数据库数据库 通过通过OLE-DB连接到连接到Access数据库的连接字符串一般形式如下:数据库的连接字符串一般形式如下:Provider=Microsoft.Jet.oledb.4.0;Data Source= &
122、 App.Path & JiaoXue.mdb; & User ID=;Password=其中其中“User ID=”后面写用户名,后面写用户名,“Password=”后面写用户口令。后面写用户口令。n10.3.1 Recordset对象简介对象简介n10.3.2 Recordset对象的属性对象的属性n10.3.3 Recordset对象的方法对象的方法10.3 RecordSet对象对象n10.3.4 访问访问Recordset对象中的字段的方法对象中的字段的方法10.3.1 Recordset对象简介对象简介1.概述概述Recordset 对象表示的是来自基本表或对象表示的是来自基本表或
123、SQL命令查询结果的记录集,命令查询结果的记录集,由一系列的行和列组成,每一行称为一条记录,每一列称为一个字段。由一系列的行和列组成,每一行称为一条记录,每一列称为一个字段。在任何时候,在任何时候,Recordset 对象所指的当前记录均为记录集中的单个记录。对象所指的当前记录均为记录集中的单个记录。可以使用可以使用 Recordset 对象进行数据操作,如移动记录、添加记录、删除对象进行数据操作,如移动记录、添加记录、删除记录、查询记录等。由于数据提供者所支持的功能不同,某些记录、查询记录等。由于数据提供者所支持的功能不同,某些 Recordset 方法或属性有可能无法使用。方法或属性有可能
124、无法使用。 10.3.1 Recordset对象简介对象简介2.四种不同的游标类型四种不同的游标类型 (1)动态游标)动态游标用于查看其他用户所作的添加、更改和删除,并用于不依用于查看其他用户所作的添加、更改和删除,并用于不依赖书签的赖书签的 Recordset中各种类型的移动。如果提供者支持,可使用书签。中各种类型的移动。如果提供者支持,可使用书签。 (2)键集游标)键集游标其行为类似动态游标,不同的只是禁止查看其他用户添加其行为类似动态游标,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然的记录,并禁止访问其他用户删除的记录,其他用户所作的数
125、据更改将依然可见。它始终支持书签,因此允许可见。它始终支持书签,因此允许Recordset中各种类型的移动。中各种类型的移动。 (3)静态游标)静态游标提供记录集合的静态副本以查找数据或生成报告。它始终提供记录集合的静态副本以查找数据或生成报告。它始终支持书签,因此允许支持书签,因此允许Recordset中各种类型的移动。其他用户所作的添加、中各种类型的移动。其他用户所作的添加、更改或删除将不可见。更改或删除将不可见。 (4)仅向前游标)仅向前游标除仅允许在记录中向前滚动之外,其行为类似动态游标。除仅允许在记录中向前滚动之外,其行为类似动态游标。这样,当需要在这样,当需要在Recordset中
126、单程移动时就可提高性能。中单程移动时就可提高性能。 注意:注意:在打开在打开Recordset对象之前可通过设置对象之前可通过设置CursorType属性值来选择游标类属性值来选择游标类型,或使用型,或使用Open方法传递方法传递CursorType参数来选择游标类型。部分数据提供者参数来选择游标类型。部分数据提供者不支持所有游标类型,如果没有指定游标类型,不支持所有游标类型,如果没有指定游标类型,ADO将默认打开仅向前游标。将默认打开仅向前游标。10.3.2 Recordset对象的属性对象的属性1AbsolutePage、PageCount与与PageSize属性属性用来控制对用来控制对R
127、ecordset对象的分页。对象的分页。PageSize属性是一个长整型属性属性是一个长整型属性,用于设置或返回一页中的记录数;,用于设置或返回一页中的记录数;PageCount属性是一个长整型属性,属性是一个长整型属性,用于返回用于返回Recordset对象包含的数据页数。即使最后页是不完整的页,该对象包含的数据页数。即使最后页是不完整的页,该页也会计入到页也会计入到PageCount属性值中。如果属性值中。如果Recordset对象不支持该属性,对象不支持该属性,属性值为属性值为-1,以表明,以表明PageCount无法确定;无法确定;AbsolutePage属性也是一个属性也是一个长整型
128、属性,用来设置或返回当前记录所在的页。其值在长整型属性,用来设置或返回当前记录所在的页。其值在1到到PageCount之间,或者取如表之间,或者取如表10-3所示的常量值。当设置该属性时,记录指针将移动所示的常量值。当设置该属性时,记录指针将移动到指定页的第一个记录。到指定页的第一个记录。10.3.2 Recordset对象的属性对象的属性2AbsolutePosition和和RecordCount属性属性 RecordCount属性是一个长整型属性,用来返回属性是一个长整型属性,用来返回Recordset对象中的记对象中的记录数目。若录数目。若ADO无法确定记录数,则该属性值为无法确定记录数
129、,则该属性值为1。AbsolutePosition属属性也是一个长整型属性,用来返回当前记录的位置或设置目标记录相对于第性也是一个长整型属性,用来返回当前记录的位置或设置目标记录相对于第一条记录的位置,其取值在一条记录的位置,其取值在1到到RecordCount之间。之间。 注意:注意:若对记录集进行了分页,则若对记录集进行了分页,则Eof、Bof、RecordCount属性值分别代属性值分别代表的是当前页的信息,而不是整个记录集的信息。表的是当前页的信息,而不是整个记录集的信息。 3ActiveConnection属性属性 该属性可以是该属性可以是Recordset对象相对应的对象相对应的C
130、onnection对象,也可以是对象,也可以是Connection对象的连接字符串。如果是第二种情况,则相应的对象的连接字符串。如果是第二种情况,则相应的Connection对象将被隐式要创建,创建时所需要的参数均使用默认值。对象将被隐式要创建,创建时所需要的参数均使用默认值。 10.3.2 Recordset对象的属性对象的属性4CacheSize属性属性 该属性是一个长整型属性,用来设置或返回缓存在本地内存中的记录数。该属性是一个长整型属性,用来设置或返回缓存在本地内存中的记录数。使用使用CacheSize属性可控制数据提供者在缓存中所保存的记录的数目,并可控属性可控制数据提供者在缓存中所
131、保存的记录的数目,并可控制一次恢复到本地内存的记录数。例如,如果制一次恢复到本地内存的记录数。例如,如果CacheSize为为30,首次打开,首次打开Recordset对象后,数据提供者将前面对象后,数据提供者将前面30条记录调入本地内存。当在条记录调入本地内存。当在Recordset对象中移动时,数据提供者返回本地内存缓冲区中的数据;一旦移对象中移动时,数据提供者返回本地内存缓冲区中的数据;一旦移动超过缓存中最后的记录,提供者便将数据源中随后的动超过缓存中最后的记录,提供者便将数据源中随后的30条记录恢复到缓存。条记录恢复到缓存。 5CursorType属性属性 用来设置或返回用来设置或返回
132、Record对象中使用的游标类型,是一个枚举类型值,对象中使用的游标类型,是一个枚举类型值,枚举常量及其含义如表枚举常量及其含义如表10-4所示。所示。 10.3.2 Recordset对象的属性对象的属性6EditMode属性属性 该属性用来返回当前记录的编辑状态,也是一个枚举型的常量。该属性用来返回当前记录的编辑状态,也是一个枚举型的常量。取值及其含义如表取值及其含义如表10-5所示。所示。 10.3.2 Recordset对象的属性对象的属性7Filter属性属性 是一个字符串属性,存放的是一个逻辑表达式,用来进行记录的筛选,记是一个字符串属性,存放的是一个逻辑表达式,用来进行记录的筛选
133、,记录集中只有符合该条件的记录才会参加处理。给该属性赋值的一般形式如下:录集中只有符合该条件的记录才会参加处理。给该属性赋值的一般形式如下:RecordsetObj.Filter=条件字符串条件字符串其中,条件字符串由其中,条件字符串由“FieldName Operator Value”格式的子句(如格式的子句(如“StuName=赵勇赵勇”)组成,各子句之间通过逻辑运算符连接。)组成,各子句之间通过逻辑运算符连接。 (1)FieldName 必须为必须为 Recordset 中的有效字段名。如果字段名包含空格,中的有效字段名。如果字段名包含空格,必须用方括号将字段名括起来。必须用方括号将字段
134、名括起来。注意点:注意点:(2)Operator 必须为关系运算符,即:必须为关系运算符,即:、=、= 或或 LIKE。(3)Value 是用于与字段值(如是用于与字段值(如 Smith、#8/24/95#、12.345 或或 $50.00)进)进行比较的值。字符串使用单引号作为定界符,日期使用行比较的值。字符串使用单引号作为定界符,日期使用“#”号作为定界符,号作为定界符,对于数字,可以使用小数点、货币符号和科学记数法。如果对于数字,可以使用小数点、货币符号和科学记数法。如果Operator为为 LIKE,Value还可以使用通配符(还可以使用通配符(“*”和和“%”)。)。Value 不可
135、为不可为 NULL。 注意:注意:如果数据提供者是如果数据提供者是SQL Server,日期型数据用,日期型数据用“”括起来,而不是用括起来,而不是用“#”括起来。但对于括起来。但对于Microsoft Access数据库,日期型数据一定要用数据库,日期型数据一定要用“#”括括起来。起来。 10.3.2 Recordset对象的属性对象的属性8LockType属性属性主要用在多用户环境中,实现并发控制,属性值表示记录使用的锁定类型,主要用在多用户环境中,实现并发控制,属性值表示记录使用的锁定类型,是一个枚举类型的值,取值及其含义如表是一个枚举类型的值,取值及其含义如表10-6所示。由于该属性默
136、认值为所示。由于该属性默认值为adLockReadOnly,所以要创建一个可以更新的记录集,该属性值必须设置。,所以要创建一个可以更新的记录集,该属性值必须设置。 10MaxRecords属性属性该属性是一个长整型属性,用来设定记录集对象能够包含的最多记录个数,该属性是一个长整型属性,用来设定记录集对象能够包含的最多记录个数,默认设置为零,表明返回所有所需的记录。默认设置为零,表明返回所有所需的记录。Recordset对象关闭时,对象关闭时,MaxRecords 属性为可读可写,打开时为只读。属性为可读可写,打开时为只读。 10.3.2 Recordset对象的属性对象的属性11Sort属性属
137、性 字符串属性,用来设置或返回字符串属性,用来设置或返回Recordset对象记录集中记录的排列顺序。对象记录集中记录的排列顺序。该属性值是一个字段名或用逗号分隔的多个字段名,在字段名后可选加空格和该属性值是一个字段名或用逗号分隔的多个字段名,在字段名后可选加空格和用于指定字段排列顺序的关键字用于指定字段排列顺序的关键字 ASCENDING(升序)(升序) 和和 DESCENDING(降(降序)。序)。 12Source属性属性用来设置或返回用来设置或返回Recordset 对象中数据的来源,可以是对象中数据的来源,可以是Command对象、对象、SQL 语句、表的名称或存储过程。语句、表的名
138、称或存储过程。Source 属性对于关闭的属性对于关闭的 Recordset 是可读是可读可写的,对于打开的可写的,对于打开的 Recordset 是只读的。如果设置是只读的。如果设置 Source 属性为属性为 Command 对象,对象,Recordset 对象的对象的 ActiveConnection 属性将继承指定属性将继承指定 Command 对象的对象的 ActiveConnection 属性的值。但是,读取属性的值。但是,读取 Source 属性将属性将不返回不返回 Command 对象,而是返回对象,而是返回Command 对象的对象的 CommandText 属性值。属性值。
139、 10.3.2 Recordset对象的属性对象的属性13State属性属性该属性是一个长整型属性,用来指示该属性是一个长整型属性,用来指示Recordset对象的状态是连接、执行对象的状态是连接、执行或是获取,是一个只读属性。取值及其含义如表或是获取,是一个只读属性。取值及其含义如表10-7所示。所示。 Recordset 对象的对象的State属性可以是组合值。例如,如果正在执行语句,属性可以是组合值。例如,如果正在执行语句,该属性将是该属性将是adStateOpen和和adStateExecuting的组合值。的组合值。 10.3.3 Recordset对象的方法对象的方法1Cancel
140、方法方法 使用该方法将终止异步执行的使用该方法将终止异步执行的Execute或或Open方法。如果试图终止的方法。如果试图终止的Execute或或Open方法不是异步执行的方法,则调用该方法将会产生运行错误。方法不是异步执行的方法,则调用该方法将会产生运行错误。该方法的使用格式如下:该方法的使用格式如下: Object.Cancel其中,其中,Object是要终止执行操作的对象名是要终止执行操作的对象名 。 使用该方法可取消对当前记录所作的更改或放弃新添加的记录。如果在调使用该方法可取消对当前记录所作的更改或放弃新添加的记录。如果在调用用AddNew方法后使用了方法后使用了CancelUpda
141、te 方法,则调用方法,则调用AddNew之前的当前记之前的当前记录将再次成为当前记录。如果尚未更改当前记录或添加新记录,调用录将再次成为当前记录。如果尚未更改当前记录或添加新记录,调用CancelUpdate方法将产生错误。方法将产生错误。 该方法的使用格式如下:该方法的使用格式如下:RecordsetObj.CancelUpdate 2CancelUpdate方法方法10.3.3 Recordset对象的方法对象的方法3CancelBatch方法方法 使用该方法将取消批更新模式下记录集中所有挂起的更新。如果记录集处使用该方法将取消批更新模式下记录集中所有挂起的更新。如果记录集处于立即更新模
142、式,调用不带于立即更新模式,调用不带adAffectCurrent的的CancelBatch将产生错误。该将产生错误。该方法的使用格式如下:方法的使用格式如下: RecordsetObj.CancelBatch AffectRecords 其中,其中,RecordsetObj记录集对象变量名。参数记录集对象变量名。参数AffectRecords决定该方法决定该方法影响的记录数影响的记录数 。10.3.3 Recordset对象的方法对象的方法4Clone方法方法该方法用来复制一份现有的该方法用来复制一份现有的Recordset对象。该方法的使用格式如下:对象。该方法的使用格式如下:Set Re
143、cordsetObj2= RecordsetObj1.Clone (LockType)其中,其中, RecordsetObj1代表原来的记录集,代表原来的记录集, RecordsetObj2代表复制的代表复制的记录集。该方法有一个参数记录集。该方法有一个参数LockType,该参数只能取两个值:,该参数只能取两个值:adLockUnspecified(默认值。使用与原始类型相同的锁定类型创建副本)和(默认值。使用与原始类型相同的锁定类型创建副本)和adLockReadOnly(副本创建为只读)。(副本创建为只读)。5Open方法方法该方法用来执行一条该方法用来执行一条SQL语句或者调用数据库的
144、存储过程以返回一个记录语句或者调用数据库的存储过程以返回一个记录集。集。Open方法的使用格式如下:方法的使用格式如下: RecordsetObj.Open Source, ActiveConnection, CursorType, LockType, Options其中其中RecordsetObj是记录集对象变量名,是记录集对象变量名,Source、ActiveConnection、 CursorType、LockType与与RecordSet对象相应属性的含义完全一致。对象相应属性的含义完全一致。Options参数的含义同参数的含义同Connection的的Execute方法中的方法中的O
145、ptions参数含义基本参数含义基本一致一致。10.3.3 Recordset对象的方法对象的方法6Requery方法方法该方法用来重新执行查询以便重新生成该方法用来重新执行查询以便重新生成Recordset对象。该方法的使对象。该方法的使用格式如下:用格式如下: RecordsetObj.Requery其中其中RecordsetObj是记录集对象变量名是记录集对象变量名 。7UpdateBatch方法方法该方法的作用是将所有挂起的批更新写入到数据库。该方法的使用格式如该方法的作用是将所有挂起的批更新写入到数据库。该方法的使用格式如下:下: RecordsetObj.UpdateBatch A
146、ffectRecords其中其中RecordsetObj是执行该方法的记录集对象变量名是执行该方法的记录集对象变量名 10.3.3 Recordset对象的方法对象的方法8Resync方法方法用现行数据库中的数据刷新当前用现行数据库中的数据刷新当前Recordset对象中的数据,使用该方对象中的数据,使用该方法将当前法将当前Recordset中的记录与现行数据库重新同步。这在使用静态或仅中的记录与现行数据库重新同步。这在使用静态或仅向前的游标但希望看到现行数据库中的改动时十分有用。与向前的游标但希望看到现行数据库中的改动时十分有用。与Requery方法方法不同,不同,Resync方法不重新执行
147、生成方法不重新执行生成Recordset对象的查询,因此,现行数对象的查询,因此,现行数据库中刚添加的新记录将不可见。该方法的使用格式如下:据库中刚添加的新记录将不可见。该方法的使用格式如下: RecordsetObj.Resync AffectRecords, ResyncValues10.3.3 Recordset对象的方法对象的方法9Supports方法方法 该方法是将返回一个布尔型值,用来指示该方法是将返回一个布尔型值,用来指示Recordset对象是否支持某对象是否支持某种功能。该方法的使用格式如下:种功能。该方法的使用格式如下: Boolean变量变量 = RecordsetObj
148、.Supports( CursorOptions )其中其中Boolean变量是用来接收返回值的布尔型变量,变量是用来接收返回值的布尔型变量,RecordsetObj是是执行该方法的记录集对象变量名,参数执行该方法的记录集对象变量名,参数CursorOption的作用是指出是否支的作用是指出是否支持的功能持的功能。如果如果Recordset对象支持表对象支持表10-10所示的相应常量的功能,那么所示的相应常量的功能,那么Supports方法将返回方法将返回True,否则将返回,否则将返回False。 10.3.4 访问访问Recordset对象中的字段的方法对象中的字段的方法访问访问Recor
149、dset对象中的字段,可使用字段名,也可以使用字段编对象中的字段,可使用字段名,也可以使用字段编号,字段编号从号,字段编号从0开始。开始。 假设假设Recordset对象对象StuRs的第一个字段名为的第一个字段名为“StuNo”,则访问该,则访问该字段可使用下列方法:字段可使用下列方法: StuRs (StuNo) StuRs (0) StuRs.Fields (StuNo) StuRs.Fields (0) StuRs1.Fields.Item (StuNo) StuRs1.Fields.Item (0)【例例10-1】使用使用ADO的相应对象把的相应对象把SQL Server数据库数据库
150、CollegeMIS中的中的Teacher表中的数据显示出来。程序设计表中的数据显示出来。程序设计界面如图界面如图10-5所示,程序的运行界面如图所示,程序的运行界面如图10-6所示。程序所示。程序运行时,单击运行时,单击“显示显示”按钮将在按钮将在MsFlexGrid控件中显示控件中显示Teacher表中的所有教师信息;单击表中的所有教师信息;单击“关闭关闭”按钮,将关按钮,将关闭闭ADO的相应对象并结束程序运行。的相应对象并结束程序运行。 可在窗体的可在窗体的Load事件中通过事件中通过Connection对象连接到对象连接到SQL Server数据库数据库CollegeMIS;在;在“显
151、示显示”按钮的按钮的Click事件中通过事件中通过Recordset对象产生记录集,记录集中的内容为表对象产生记录集,记录集中的内容为表Teacher中的中的所有记录,并把记录集中的数据在所有记录,并把记录集中的数据在MSFlexGrid控件中显示出来。控件中显示出来。要在要在MSFlexGrid控件中显示记录集的内容,可通过循环把记录控件中显示记录集的内容,可通过循环把记录集中的各字段的内容依次赋值给集中的各字段的内容依次赋值给MsFlexGrid的的MatrixText属性属性的各个元素。为使程序通用,把在的各个元素。为使程序通用,把在MSFlexGrid控件中显示记录控件中显示记录集的内
152、容定义成一个通用过程,过程应有两个参数,一个是要集的内容定义成一个通用过程,过程应有两个参数,一个是要Recordset对象,另一个是对象,另一个是MSFlexGrid对象。对象。 实现思路:实现思路:程序代码参见实例。程序代码参见实例。n10.4.1 Command对象简介对象简介n10.4.2 Command对象的常用属性对象的常用属性 n10.4.3 Command对象的常用方法对象的常用方法 10.4 Command对象对象10.4.1 Command对象简介对象简介1作用作用 通常使用通常使用Command对象对数据库进行查询操作和对数据表进行增、对象对数据库进行查询操作和对数据表进
153、行增、删、改操作,利用它可以执行删、改操作,利用它可以执行SQL语句、存储过程等,而且利用它还可以语句、存储过程等,而且利用它还可以进行参数化查询。进行参数化查询。 (1)可以通过调用)可以通过调用Connection对象的对象的Execute方法或调用方法或调用Recordset对象的对象的Open方法来执行查询,但若要多次执行命令文本,或使用查询参数时,则必方法来执行查询,但若要多次执行命令文本,或使用查询参数时,则必须使用须使用Command对象。对象。 2使用使用Command对象的注意点:对象的注意点: (2)可把)可把Command对象的对象的ActiveConnection属性设
154、置为有效的连接字符串属性设置为有效的连接字符串以创建以创建 Command对象,此时对象,此时ADO仍将隐式创建仍将隐式创建Connection对象。如果多个对象。如果多个Command对象使用相同的连接字符串,对象使用相同的连接字符串,ADO也将为每个也将为每个Command对象创建对象创建新的新的Connection对象。因此当需要让多个对象。因此当需要让多个Command对象与同一个对象与同一个Connection对象相连时,必须显式地创建并打开对象相连时,必须显式地创建并打开Connection对象,然后把该对象,然后把该Connection对象变量赋给相应的对象变量赋给相应的Comm
155、and对象的对象的ActiveConnection 属性。属性。 10.4.2 Command对象的常用属性对象的常用属性1ActiveConnection属性属性该属性是一个可读可写的属性,用来指示该属性是一个可读可写的属性,用来指示Command对象通过哪个对象通过哪个Connection对象操作数据库,取值可以是对象操作数据库,取值可以是Connection对象名或连接字符对象名或连接字符串。在将该属性有效设置之前,不得调用串。在将该属性有效设置之前,不得调用Command对象的对象的Execute方法,方法,否则将会产生错误。否则将会产生错误。 该属性是一个字符串属性,用来设置或返回该
156、属性是一个字符串属性,用来设置或返回Command对象所要执行的命对象所要执行的命令,可以是令,可以是SOL语句、表名称或存储过程名,默认值为语句、表名称或存储过程名,默认值为(零长度字符串)。(零长度字符串)。需注意一点:使用的需注意一点:使用的SQL 语句必须是数据提供者能够支持的特定版本。语句必须是数据提供者能够支持的特定版本。 2CommandText属性属性 3CommandTimeout属性属性 该属性是一长整型属性,用来设置等待命令执行的时间(单位为秒),默该属性是一长整型属性,用来设置等待命令执行的时间(单位为秒),默认值为认值为30。如果在指定的时间内命令尚未执行成功,将终止
157、执行并产生错误。如果在指定的时间内命令尚未执行成功,将终止执行并产生错误。 10.4.2 Command对象的常用属性对象的常用属性4CommandType属性属性是一个可读写的枚举型属性,用来指定是一个可读写的枚举型属性,用来指定Command对象要执行命令的对象要执行命令的类型。能够使用的枚举常量有:类型。能够使用的枚举常量有:AdCmdText、AdCmdTable、AdCmdTableDirect、AdCmdStoredProc、AdCmdUnknown、AdCommandFile和和AdExecuteNoRecords。其中前。其中前5项的含义与表项的含义与表10-2中的同名常量相同
158、。使用中的同名常量相同。使用AdCommandFile,表示,表示CommandText中存放中存放的是一个保存的的是一个保存的Recordset文件名,使用文件名,使用AdExecuteNoRecords,表示,表示CommandText为不返回记录集的命令或存储过程为不返回记录集的命令或存储过程 。 5Prepared属性属性 该属性是一个布尔型属性,用来设置或返回是否保存命令的编译版本。值该属性是一个布尔型属性,用来设置或返回是否保存命令的编译版本。值为为True时,在首次执行命令时将创建命令的编译版本,值为时,在首次执行命令时将创建命令的编译版本,值为False时,将不创建时,将不创建
159、命令的编译版本。命令的编译版本。 6State属性属性 用来指示当前对象的状态。用来指示当前对象的状态。 10.4.3 Command对象的常用方法对象的常用方法1Execute方法方法 执行在执行在CommandText属性中给出的命令。如果属性中给出的命令。如果CommandText属性给属性给出的是返回记录集的查询,执行所产生的结果将存储在新的出的是返回记录集的查询,执行所产生的结果将存储在新的Recordset对象中。如果对象中。如果CommandText属性给出的不是返回记录集的命令,也将属性给出的不是返回记录集的命令,也将返回一个返回一个Recordset对象,不过该对象,不过该R
160、ecordset对象是关闭的。某些应用对象是关闭的。某些应用程序语言允许忽略该返回值,可不需把返回值赋值给程序语言允许忽略该返回值,可不需把返回值赋值给Recordset对象。对象。对于返回记录集的对于返回记录集的Command对象,该方法的调用格式如下:对象,该方法的调用格式如下:Set recordsetobj = commandobj.Execute( RecordsAffected, Parameters, Options )对于不返回记录集的对于不返回记录集的Command对象,该方法的调用格式如下:对象,该方法的调用格式如下:commandobj.Execute RecordsAf
161、fected, Parameters, Options2Cancel方法方法 该方法的作用是取消挂起的异步调用的该方法的作用是取消挂起的异步调用的Command对象的对象的Execute方法。使方法。使用方法同用方法同Recordset对象的对象的Cancel方法。方法。【例例10-2】为为CollegeMIS数据库编写一个通用查询程序,程序的设计数据库编写一个通用查询程序,程序的设计界面如图界面如图10-7所示,程序的运行界面如图所示,程序的运行界面如图10-8所示。程序运行时,在所示。程序运行时,在第一个组合框中选择字段名,在第二个组合框中选择比较方式,在随第一个组合框中选择字段名,在第二
162、个组合框中选择比较方式,在随后出现的文本框中输入比较值或在出现的组合框中选择值以构成查询后出现的文本框中输入比较值或在出现的组合框中选择值以构成查询条件。查询条件设置完成后,单击条件。查询条件设置完成后,单击“查询查询”按钮,符合条件的记录将按钮,符合条件的记录将在在MSFlexGrid网格中显示出来,如图网格中显示出来,如图10-8所示。单击所示。单击“退出退出”按钮,按钮,将关闭记录集、连接并结束程序。将关闭记录集、连接并结束程序。 首先根据查询条件形成首先根据查询条件形成SQL的查询字符串,然后通过的查询字符串,然后通过Command对象执行该查对象执行该查询字符串得到查询结果。使用询字
163、符串得到查询结果。使用Command对象执行对象执行SQL语句的方法是调用它的语句的方法是调用它的Execute方法,处理过程一般分成如下方法,处理过程一般分成如下4步:步:(1)设置)设置Command对象的对象的ActiveConnection属性为所需要的连接对象名;属性为所需要的连接对象名;(2)设置)设置Command对象的对象的CommandText属性为要执行的查询字符串;属性为要执行的查询字符串;(3)设置)设置Command对象的对象的CommandType属性为要执行的命令类型;属性为要执行的命令类型;(4)调用)调用Command对象的对象的Execute方法执行查询。若
164、查询返回一个记录集,方法执行查询。若查询返回一个记录集,可把结果赋值给一个记录集对象变量。可把结果赋值给一个记录集对象变量。实现思路:实现思路:程序代码见实例。程序代码见实例。在在ADO中,可使用三种方法执行中,可使用三种方法执行SQL语句,如下:语句,如下:(1)调用记录集对象的)调用记录集对象的Open方法执行方法执行SQL语句;语句;(2)调用连接对象的)调用连接对象的Execute方法执行方法执行SQL语句;语句;(3)调用命令对象的)调用命令对象的Execute方法执行方法执行SQL语句。语句。这三种方法均可以执行返回记录集的这三种方法均可以执行返回记录集的SELECT语句,这也是三
165、种形成记录语句,这也是三种形成记录集的方法。其实调用连接对象的集的方法。其实调用连接对象的Execute方法和调用命令对象的方法和调用命令对象的Execute方法方法执行的执行的SQL语句不仅可以是返回记录集的语句不仅可以是返回记录集的SQL语句,也可以是不返回记录集的语句,也可以是不返回记录集的SQL语句。语句。 n10.5.1 Field对象的常用属性对象的常用属性 n10.5.2 Field对象的常用方法对象的常用方法 n10.5.3 Fields对象的常用属性对象的常用属性 10.5 Field对象和对象和Fields集合集合n10.5.4 Fields对象的常用方法对象的常用方法10
166、.5.1 Field对象的常用属性对象的常用属性1ActualSize属性属性 使用该属性可返回使用该属性可返回Field对象值的实际长度,只能读。如果对象值的实际长度,只能读。如果ADO无法确定无法确定Field对象值的实际长度,对象值的实际长度,ActualSize属性的返回值将为属性的返回值将为adUnknown。 2Attributes属性属性 该属性是一个长整型只读属性,用来设置或返回该属性是一个长整型只读属性,用来设置或返回Field对象的一些特征。对象的一些特征。具体的取值及含义请参考相关资料。具体的取值及含义请参考相关资料。 3DefinedSize属性属性 该属性用来确定该属
167、性用来确定Field对象的数据容量。对象的数据容量。 4Name属性属性 该属性是字符串属性,用来返回或设置该属性是字符串属性,用来返回或设置Field对象的名称。对象的名称。 5NumericScale属性属性 Byte型属性,用来设置或返回指示数值型字段所精确到的小数点位数。型属性,用来设置或返回指示数值型字段所精确到的小数点位数。 10.5.1 Field对象的常用属性对象的常用属性6OriginalValue属性属性 该属性用来返回当前记录中某字段的原始字段值该属性用来返回当前记录中某字段的原始字段值 。 7Precision属性属性 该属性是一个该属性是一个Byte型的属性,用来表示
168、值的最大位数,只能读。型的属性,用来表示值的最大位数,只能读。 8Type属性属性 该属性用来返回字段的类型,只能读。该属性用来返回字段的类型,只能读。 9UnderlyingValue属性属性 该属性用来返回字段的当前值。该属性用来返回字段的当前值。 10Value属性属性该属性用来设置或返回字段的值该属性用来设置或返回字段的值 。 10.5.2 Field对象的常用方法对象的常用方法1AppendChunk方法方法该方法用来将大型文本、二进制数据填写到该方法用来将大型文本、二进制数据填写到Field对象中。该方法对象中。该方法的使用格式如下:的使用格式如下:Field对象对象.Append
169、Chunk Data其中,其中,Field对象是字段对象名,对象是字段对象名,Data是一个变体型变量,其中是一个变体型变量,其中含有要追加到含有要追加到Field对象中的数据。对象中的数据。 2GetChunk方法方法该方法用于从大型文本或二进制数据的该方法用于从大型文本或二进制数据的Field对象中返回部分或全对象中返回部分或全部内容。该方法的使用格式如下:部内容。该方法的使用格式如下:variable = Field对象对象.GetChunk( Size )其中其中variable是用来存放返回数据的变体型变量,是用来存放返回数据的变体型变量,Field对象是字对象是字段对象变量名,参数
170、段对象变量名,参数Size是一个长整型表达式,用来指定所要检索的是一个长整型表达式,用来指定所要检索的字节或字符数。字节或字符数。 10.5.3 Fields对象的常用属性对象的常用属性Fields对对象象是是Field对对象象的的集集合合,它它有有一一个个属属性性Count,该该属属性性用用来来返返回回Fields对对象象中中包包含含的的Field对对象象个个数数。如如果果Count属属性性值值为为零零,集集合合中中将将不不存存在在对对象象。Field集集合合对对象象的的每每个个成成员员都都有有一一个个编编号号,从从0开始,以开始,以Count属性值减属性值减1结束。结束。10.5.4 Fi
171、elds对象的常用方法对象的常用方法经常使用的经常使用的Fields对象的方法只有对象的方法只有Item。该方法用来根据名称或顺序号。该方法用来根据名称或顺序号返回返回Fields集合中的特定集合中的特定Field成员。使用格式如下:成员。使用格式如下:Set Field对象变量名对象变量名= Fields.Item ( Index )其中,其中,“Field对象变量名对象变量名”是用来接收返回的是用来接收返回的Field对象的变量名,对象的变量名,Index是要返回的是要返回的Field对象的序号对象的序号。所有的集合对象均有所有的集合对象均有Item方法,使用的方法基本一致。同时方法,使用
172、的方法基本一致。同时Item方法也方法也是集合对象的默认方法,下列语法格式是等价的:是集合对象的默认方法,下列语法格式是等价的:Collection.Item (Index)Collection (Index)其中其中Collection是集合对象名,如是集合对象名,如Fields等。等。List1.Clear本循环把本循环把RS1记录集中的所有字段的字段名添加到列表框记录集中的所有字段的字段名添加到列表框List1中中 For I = 0 To RS1.Fields.Count - 1 List1.AddItem RS1.Fields(I).Name Next IText1.Text = R
173、S1.Fields(List1.ListIndex).DefinedSize 显示选显示选定字段的定字段的DefineSize属性属性 Text2.Text = RS1.Fields(List1.ListIndex).Type 显示选定显示选定字段的字段的Type属性属性 Text3.Text = RS1.Fields(List1.ListIndex).Value 选定选定选定选定字段的字段的Value属性属性n10.6.1 Error对象的常用属性对象的常用属性 n10.6.2 Errors对象的常用属性与方法对象的常用属性与方法 10.6 Error对象和对象和Errors集合集合10.6
174、.1 Error对象的常用属性对象的常用属性1Description属性属性 该属性是一个字符串属性,用来获得错误的简要说明。该属性是一个字符串属性,用来获得错误的简要说明。 2NativeError属性属性 该属性是一个长整型属性,用来返回给定该属性是一个长整型属性,用来返回给定Error对象的、特定提供者的错误代码。对象的、特定提供者的错误代码。 3Number属性属性 该属性是一个长整型属性,使用它可确定发生的错误类型,该属性的值是与错误条该属性是一个长整型属性,使用它可确定发生的错误类型,该属性的值是与错误条件对应的唯一数字。件对应的唯一数字。 4Source属性属性 该属性是一个字符
175、串属性,用来确定产生错误的原始对象或应用程序的名称。该名该属性是一个字符串属性,用来确定产生错误的原始对象或应用程序的名称。该名称可以是对象的类名或编程称可以是对象的类名或编程ID。对于。对于ADODB的错误,属性值将是的错误,属性值将是ADODB.ObjectName,ObjectName是触发错误的对象名称。只读。是触发错误的对象名称。只读。 5SQLState属性属性 该属性是一个字符串属性,用来指示给定该属性是一个字符串属性,用来指示给定Error对象的对象的SQL状态。当提供者在处理状态。当提供者在处理SQL语句过程中出现错误时,使用该属性可返回语句过程中出现错误时,使用该属性可返回
176、5个字符的错误代码。个字符的错误代码。 10.6.2 Errors对象的常用属性与方法对象的常用属性与方法Errors对象是从属于某个对象是从属于某个Connection对象的集合对象,它的成员是对象的集合对象,它的成员是Error对象,可通过对象,可通过Errors对象的对象的Count属性返回它所包含的属性返回它所包含的Error对象的对象的个数。个数。 Errors对象的方法有两个,分别是对象的方法有两个,分别是Item和和Clear,Item方法的格式和方法的格式和功能基本同功能基本同Fields集合的集合的Item方法。方法。Clear方法的作用是清除方法的作用是清除Errors集合
177、集合中的中的Error对象。对象。Clear方法的使用格式如下:方法的使用格式如下: Errors.Clear其中,其中,Errors是集合对象名。是集合对象名。10.7 ADO对象综合应用例对象综合应用例【例例10-3】编写一个对编写一个对CollegeMIS数据库中的数据库中的Student表进行浏览和维表进行浏览和维护的程序,程序的设计界面如图护的程序,程序的设计界面如图10-9所示,程序的运行界面如图所示,程序的运行界面如图10-10所示。所示。“首记录首记录”、“前移前移”、“后移后移”、“末记录末记录”、“删除删除”、“添加添加”、“修改修改”、“确定确定”、“取消取消”按钮的作用
178、与例按钮的作用与例9-5中对应按中对应按钮的功能一样。程序运行时,在钮的功能一样。程序运行时,在“修改修改”记录或记录或“添加添加”记录的状态下,记录的状态下,可以通过可以通过“照片照片”文本框后面的文本框后面的“”按钮来打开一个对话框,选择图按钮来打开一个对话框,选择图像文件作为当前学生的照片;单击像文件作为当前学生的照片;单击“退出退出”按钮将关闭、释放连接和记按钮将关闭、释放连接和记录集对象并结束应用程序。录集对象并结束应用程序。 实现要求如下:实现要求如下:(1)只有在添加记录和修改记录时,才能通过界面上的控件输入内容;)只有在添加记录和修改记录时,才能通过界面上的控件输入内容;(2)
179、执行相应操作时,按钮的状态要发生变化。如记录指针移到了首记录,)执行相应操作时,按钮的状态要发生变化。如记录指针移到了首记录,“首记录首记录”和和“前移前移”按钮不能使用;单击按钮不能使用;单击“添加添加”按钮后,所有的移动按钮、按钮后,所有的移动按钮、“删除删除”按钮、按钮、“添加添加”和和“修改修改”按钮均不可用等等;按钮均不可用等等;(3)使用)使用ADO对象编程实现。对象编程实现。实现思路(要完成本题的任务,需解决以下几个关键点):实现思路(要完成本题的任务,需解决以下几个关键点):(1)当前记录的显示与当前记录的修改。由于每当记录指针发生了移动,均)当前记录的显示与当前记录的修改。由
180、于每当记录指针发生了移动,均需用当前记录的内容更新界面上的控件,因此可把当前记录的显示编写成一个需用当前记录的内容更新界面上的控件,因此可把当前记录的显示编写成一个过程,在需要时调用即可。在该过程中只需依次把记录集的各过程,在需要时调用即可。在该过程中只需依次把记录集的各Field对象的值对象的值显示在界面的各控件中即可。显示在界面的各控件中即可。“添加添加”记录和记录和“修改修改”记录均需根据界面上控记录均需根据界面上控件的值更新当前记录,因此可把对当前记录的更新也编写成一个过程,在需要件的值更新当前记录,因此可把对当前记录的更新也编写成一个过程,在需要时调用即可。在该过程中只需依次把界面上
181、控件的内容赋值给记录集的各时调用即可。在该过程中只需依次把界面上控件的内容赋值给记录集的各Field对象即可。对象即可。 (2)由于所有的功能按钮操作的记录集都是同一个记录集,故记录集变量应)由于所有的功能按钮操作的记录集都是同一个记录集,故记录集变量应该是模块级的。该是模块级的。 实现思路(要完成本题的任务,需解决以下几个关键点):实现思路(要完成本题的任务,需解决以下几个关键点):(3)照片的显示和保存。照片是一个二进制字段,这就涉及到二进制字段的)照片的显示和保存。照片是一个二进制字段,这就涉及到二进制字段的存取。可利用存取。可利用Field对象的对象的AppendChunk和和GetC
182、hunk方法来实现二进制字段方法来实现二进制字段的存取。将二进制文件存入二进制字段的方法是先将二进制文件打开,读取里的存取。将二进制文件存入二进制字段的方法是先将二进制文件打开,读取里面的数据,再使用面的数据,再使用AppendChunk方法将读出的数据存入数据库的二进制字段。方法将读出的数据存入数据库的二进制字段。读出数据的时候,使用读出数据的时候,使用GetChunk将数据库中二进制字段的数据读入内存,然将数据库中二进制字段的数据读入内存,然后再存入二进制文件中。使用后再存入二进制文件中。使用AppendChunk和和GetChunk的时候必须小心,的时候必须小心,否则输出的文件将面目全非
183、。本例编写了两个过程否则输出的文件将面目全非。本例编写了两个过程SaveToDB和和SaveToFile,分别用来进行二进制字段数据的存取,其中分别用来进行二进制字段数据的存取,其中SaveToDB过程的作用是把磁盘文过程的作用是把磁盘文件存放到当前记录的二进制字段中,件存放到当前记录的二进制字段中,SaveToFile过程的作用是把当前记录的过程的作用是把当前记录的二进制字段内容存放到磁盘文件中。二进制字段内容存放到磁盘文件中。 程序代码见实例。程序代码见实例。注意:注意:可以使用可以使用ADO Data控件和数据绑定控件快速地建立控件和数据绑定控件快速地建立ADO数据库应数据库应用程序。用
184、程序。ADO Data控件是数据绑定控件与数据提供者之间连接的桥梁,要控件是数据绑定控件与数据提供者之间连接的桥梁,要使用它必须把它加载到使用它必须把它加载到Visual Basic的工程中。的工程中。 数据库应用教程数据库应用教程n11.1 数据报表设计器数据报表设计器 n11.2 数据环境设计器数据环境设计器 n11.3 设计一个简单的数据报表设计一个简单的数据报表 第第11章章 数据报表设计数据报表设计n11.4 使用使用SQL语句创建基于多个数据表的数据报表语句创建基于多个数据表的数据报表n11.5 通过分组通过分组Command对象设计分组数据报表对象设计分组数据报表n11.6 根据
185、层次结构根据层次结构Command对象设计分组数据报表对象设计分组数据报表 n11.7 数据报表中的统计与计算数据报表中的统计与计算 n11.8 数据报表的打印数据报表的打印 n11.1.1 在工程中加载数据报表设计器在工程中加载数据报表设计器n11.1.2 报表设计器的组成报表设计器的组成 11.1 数据报表设计器数据报表设计器11.1 数据报表设计器数据报表设计器概述概述报表是重要的打印文档,报表设计是数据库应用程序开发的一个报表是重要的打印文档,报表设计是数据库应用程序开发的一个重要组成部分。在重要组成部分。在Visual Basic中,可以使用报表设计器(中,可以使用报表设计器(Dat
186、a Report Designer)来设计报表。)来设计报表。报表主要包括两部分内容:数据源和布局。数据源是报表的数据报表主要包括两部分内容:数据源和布局。数据源是报表的数据来源,在来源,在Visual Basic中可通过数据环境设计器(中可通过数据环境设计器(Data Environment Designer)来设计。报表的布局是指数据的排列形式,在)来设计。报表的布局是指数据的排列形式,在Visual Basic中可通过数据报表设计器来设计。中可通过数据报表设计器来设计。 11.1.1 在工程中加载数据报表设计器在工程中加载数据报表设计器如果在如果在“工程工程”菜单中找不到菜单中找不到“添
187、加添加Data Report”菜单项,菜单项,可先执行可先执行“工程工程”菜单中的菜单中的“部件部件”菜单项,在出现的菜单项,在出现的 “部件部件”对话框的对话框的“设计器设计器”选项卡中选中选项卡中选中“Data Report”(若要加(若要加载数据环境设计器也应选中载数据环境设计器也应选中“Data Environment”),然后按),然后按“确定确定”按钮。然后执行按钮。然后执行“工程工程”菜单中的菜单中的“添加添加Data Report”菜单项,将会出现菜单项,将会出现 “报表设计器报表设计器”窗口。在该窗口中窗口。在该窗口中可以设计数据报表。可以设计数据报表。 11.1.2 报表设
188、计器的组成报表设计器的组成1数据报表设计器包含的对象数据报表设计器包含的对象(1)DataReport对象对象 一个数据报表就是一个一个数据报表就是一个DataReport对象,它类似于对象,它类似于Visual Basic窗体,窗体,具有一个可视的报表设计器窗口和一个代码模块。在报表设计器窗口中具有一个可视的报表设计器窗口和一个代码模块。在报表设计器窗口中可以创建报表的布局。也可以在设计器的代码模块中编写程序代码,通可以创建报表的布局。也可以在设计器的代码模块中编写程序代码,通过编程控件数据报表设计器中包含的过编程控件数据报表设计器中包含的Section对象和控件对象。对象和控件对象。 (2
189、)Section对象对象 数据报表设计器的每一个部分都是一个数据报表设计器的每一个部分都是一个Section对象,各对象,各Section对象包对象包含在一个集合对象含在一个集合对象Sections中。设计时,每一个中。设计时,每一个Section对象均由一个对象均由一个可以单击以选择该对象的标头和可以放置或定位控件的窗格组成,每一可以单击以选择该对象的标头和可以放置或定位控件的窗格组成,每一个个Section对象均有一些属性,可以通过属性窗口对其进行配置。对象均有一些属性,可以通过属性窗口对其进行配置。 (3)Data Report控件控件 在数据报表设计器中不能使用在数据报表设计器中不能使
190、用Visual Basic的内部控件或任何的内部控件或任何ActiveX控控件,必须使用数据报表设计器自带的工具箱中的控件,该工具箱的名称件,必须使用数据报表设计器自带的工具箱中的控件,该工具箱的名称为为“数据报表数据报表”。 11.1.2 报表设计器的组成报表设计器的组成2数据报表设计器的组成部分数据报表设计器的组成部分 (1)报表标头)报表标头 数据报表设计器主要由报表标头、页标头、分组标头、分组注脚、细节、数据报表设计器主要由报表标头、页标头、分组标头、分组注脚、细节、页注脚、报表注脚等几类页注脚、报表注脚等几类Section对象组成。对象组成。 对于任何报表文件,报表标头的内容最先显示
191、和打印且仅显示和打印一次,对于任何报表文件,报表标头的内容最先显示和打印且仅显示和打印一次,一般用来设置报表总标题或设计报表封面。如果想把报表标头作为报表的第一般用来设置报表总标题或设计报表封面。如果想把报表标头作为报表的第一页,可把它的一页,可把它的ForcePageBreak属性值设置为属性值设置为rptPageBreakAfter。 (2)页标头)页标头 设置在页标头中的信息在每一页顶部都会出现,可用于设置报表的标题、显设置在页标头中的信息在每一页顶部都会出现,可用于设置报表的标题、显示字段的标题以及需要的图形等。示字段的标题以及需要的图形等。 (3)分组标头)分组标头/分组注脚分组注脚
192、 这两个部分只在分组报表中使用。每组数据将根据细节区安置的控件来打印这两个部分只在分组报表中使用。每组数据将根据细节区安置的控件来打印或显示,在每组数据显示或打印之前显示或打印分组标头信息,在每组数据或显示,在每组数据显示或打印之前显示或打印分组标头信息,在每组数据显示或打印之后显示或打印分组注脚信息。分组标头与分组注脚相匹配,不显示或打印之后显示或打印分组注脚信息。分组标头与分组注脚相匹配,不能单独出现。能单独出现。 11.1.2 报表设计器的组成报表设计器的组成2数据报表设计器的组成部分数据报表设计器的组成部分 (4)细节)细节 该部分对于每个记录均显示或打印一次,细节部分与数据环境层次结
193、构中最该部分对于每个记录均显示或打印一次,细节部分与数据环境层次结构中最低层的低层的Command对象相关联。对象相关联。 (5)页注脚)页注脚 页注脚的内容打印或显示在每一页的底部,用来打印每页的一般信息,如页页注脚的内容打印或显示在每一页的底部,用来打印每页的一般信息,如页号、日期等号、日期等 。 (6)报表注脚)报表注脚 报表注脚用来包含在报表结束处出现的信息,出现在最后一个页标头和页注报表注脚用来包含在报表结束处出现的信息,出现在最后一个页标头和页注脚之间,对于每个报表文件仅打印或显示一次。脚之间,对于每个报表文件仅打印或显示一次。 11.1.2 报表设计器的组成报表设计器的组成3数据
194、报表设计器控件箱中的控件数据报表设计器控件箱中的控件 11.1.2 报表设计器的组成报表设计器的组成各报表控件及其作用如下:各报表控件及其作用如下:(1)RptTextBox控件:用来在报表中显示文本并可以规定文本格式。控件:用来在报表中显示文本并可以规定文本格式。(2)RptLabel控件:用来在报表中放置标签,用来标识字段或添加控件:用来在报表中放置标签,用来标识字段或添加说明信息。说明信息。(3)RptImage控件:用来在报表上添加图像,该控件不能被绑定到数据字控件:用来在报表上添加图像,该控件不能被绑定到数据字段。段。(4)RptLine控件:用来在报表中汇制线条。控件:用来在报表中
195、汇制线条。(5)RptShape控件:用来在报表中汇制矩形、三角形或圆形(椭圆型)。控件:用来在报表中汇制矩形、三角形或圆形(椭圆型)。(6)RptFunction控件:该控件是一个特殊的文本框,用来在生成报表时计控件:该控件是一个特殊的文本框,用来在生成报表时计算函数或表达式的值。算函数或表达式的值。n11.2.1 Connection对象对象n11.2.2 Command对象对象11.2 数据环境设计器数据环境设计器11.2 数据环境设计器数据环境设计器概述:概述:可以通过数据环境设计器来可以通过数据环境设计器来设计报表的数据环境,数据环境设计报表的数据环境,数据环境也是一个对象,报表的数
196、据来源也是一个对象,报表的数据来源于该对象。加载数据环境设计器于该对象。加载数据环境设计器的方法同加载数据报表设计器的的方法同加载数据报表设计器的操作一样。每一个数据环境都是操作一样。每一个数据环境都是一个树型的层次结构,可以拥有一个树型的层次结构,可以拥有多个多个Connection对象,每个对象,每个Connection对象又可拥有多个对象又可拥有多个Command对象,每个对象,每个Command对象又可拥有多个对象又可拥有多个Field对象和多个子对象和多个子Command对象。对象。 11.2.1 Connection对象对象1Connection对象的添加对象的添加 在数据环境设计
197、器中单击右键,在出现的快捷菜单中选中在数据环境设计器中单击右键,在出现的快捷菜单中选中“添加连接添加连接”。然后就可以看到在数据环境设计器中出现了新的连接。然后就可以看到在数据环境设计器中出现了新的连接。 2设置连接属性设置连接属性 数据环境中的数据环境中的Connection对象具有对象具有ADO的的Connection对象的所有属性对象的所有属性和方法,使用和方法,使用Connection对象的第一步是建立到物理数据库的连接。对象的第一步是建立到物理数据库的连接。 【例例11-1】通过数据环境设计器建立到通过数据环境设计器建立到SQL Server数据库数据库CollegeMIS的连接。的
198、连接。 注意:注意:在在“Provider”选项卡的选项卡的“OLE DB Provider”列表框中,选中列表框中,选中“Microsoft OLE DB Provider for SQL Server”。 11.2.1 Connection对象对象3Connection对象的其它属性设置对象的其它属性设置 (1)DesignUserName和和DesignPassword属性:设计时的登录用户名和属性:设计时的登录用户名和密码。密码。(2)RunUserName和和RunPassword属性:运行时的登录用户名和属性:运行时的登录用户名和密码。密码。(3)DesignSaveAuthent
199、ication属性:该属性决定设计时的登录信息是否属性:该属性决定设计时的登录信息是否保存。如果保存。如果DesignSaveAuthentication属性值为属性值为True,指定的信息在设计,指定的信息在设计时保存下来。如果该属性值为时保存下来。如果该属性值为 False,则一旦关闭并重新打开该工程时,则一旦关闭并重新打开该工程时,DesignUserName和和DesignPassword中的所有信息都将丢失。中的所有信息都将丢失。(4)CursorLocation、ConnectionSource、ConnectionTimeout和和CommandTimeout属性:其含义与属性:
200、其含义与ADO Connection对象的同名属性完全对象的同名属性完全一致。一致。11.2.2 Command对象对象1Command对象的概念与作用对象的概念与作用 数据环境中的数据环境中的Command对象类似于对象类似于ADO Command对象,用于执对象,用于执行命令。一个行命令。一个Command对象必须要和一个对象必须要和一个Connection对象相关联,对象相关联,它具体定义了从一个数据库连接中获取何种数据或执行何种操作。它具体定义了从一个数据库连接中获取何种数据或执行何种操作。在运行时,用户如何访问在运行时,用户如何访问Command对象取决于对象取决于Command对象
201、执对象执行的命令是否是记录集返回的。如果是记录集返回的,用户既可以将行的命令是否是记录集返回的。如果是记录集返回的,用户既可以将Command对象作为对象作为DataEnvironment对象的一个属性,也可以作为它对象的一个属性,也可以作为它的一个方法来使用。如果不是记录集返回的,用户只能把的一个方法来使用。如果不是记录集返回的,用户只能把Command对对象作为象作为DataEnvironment对象的一个方法来使用。对象的一个方法来使用。 2Command对象的创建与属性设置对象的创建与属性设置 【例例11-2】在例在例11-1建立的连接的基础上,创建一个名为建立的连接的基础上,创建一个
202、名为CmdTeacher的的Command对象,该对象,该Command对象用来获取对象用来获取Teacher表中的数据。表中的数据。11.3 设计一个简单的数据报表设计一个简单的数据报表【例例11-3】创建一个显示创建一个显示CollegeMIS数据库中数据库中Teacher表基本表基本信息的数据报表,报表的运行界面如图信息的数据报表,报表的运行界面如图11-11所示。所示。 创建步骤如下:创建步骤如下: (1)执行)执行“工程工程”菜单中的菜单中的“添加添加Data Report”菜单项,将自动添加一菜单项,将自动添加一个数据报表窗口到当前工程中,数据报表名为个数据报表窗口到当前工程中,数
203、据报表名为“DataReport1” 。(2)根据表)根据表11-1设置设置DataReport1对象的属性。对象的属性。 (3)在)在“报表标头报表标头”中添加一个中添加一个RptLabel控件,按照表控件,按照表11-2设置它的属性设置它的属性 。 注意:注意:如果要想报表标头打印在新的一页,可设置报表标头的如果要想报表标头打印在新的一页,可设置报表标头的ForcePageBreak属性值为属性值为“1-rptPageBreakBefore”。数据报表设计器允许在任何分组标头。数据报表设计器允许在任何分组标头/注注脚之前或之后、或是在报表标头之后、报表注脚之前强制分页。脚之前或之后、或是在
204、报表标头之后、报表注脚之前强制分页。 (4)在)在“工程资源管理器工程资源管理器”窗口中双击窗口中双击“DataEnvironment1”,打开数据环境,打开数据环境设计器,单击设计器,单击“CmdTeacher”Command对象前面的对象前面的“+”号,展开该对象,以便看号,展开该对象,以便看到其中的字段。到其中的字段。(5)从数据环境设计器中拖动)从数据环境设计器中拖动“TeaNo”字段到字段到“细节细节”部分中去,将会产生一部分中去,将会产生一个名为个名为“TeaNo”的报表文本框和一个名为的报表文本框和一个名为“TeaNo”的报表标签控件,把报表标的报表标签控件,把报表标签控件拖放到
205、签控件拖放到“页标头页标头”部分,并把它的部分,并把它的Caption属性值设置为属性值设置为“教师号教师号”。(6)采用同样的方法把)采用同样的方法把“TeaName”、“Sex”、“Title”、“Birthday”、“Marriage”、“Telephone”字段拖放到字段拖放到“细节细节”部分,并把相应的报表标签部分,并把相应的报表标签控件拖动到控件拖动到“页标头页标头”部分,并更改报表标签控件的部分,并更改报表标签控件的Caption属性值为相应字段属性值为相应字段的中文名称。的中文名称。(7)除了可以直接拖动字段到报表中以建立控件来显示字段的内容外,还可以)除了可以直接拖动字段到报
206、表中以建立控件来显示字段的内容外,还可以先创建控件,然后设置它的属性来显示字段信息。现在来用一个报表文本框控件先创建控件,然后设置它的属性来显示字段信息。现在来用一个报表文本框控件来显示来显示“DepartNo”字段的值,方法如下:在字段的值,方法如下:在“细节细节”部分的适当位置创建一个部分的适当位置创建一个报表文本框,然后设置该文本框的报表文本框,然后设置该文本框的DataMember属性值为属性值为“cmdTeacher”,设置,设置其其DataField属性值为属性值为“DepartNo”。再在。再在“页标头页标头”部分的适当位置创建一个部分的适当位置创建一个报表标签控件,设置其报表标
207、签控件,设置其Caption属性值为属性值为“系号系号”。注意:注意:有时要移动报表控件的位置,会发现控件只能一个网格一个网格地移动,有时要移动报表控件的位置,会发现控件只能一个网格一个网格地移动,不方便。为了能够自由地移动,可在报表设计器中单击鼠标右键,在出现的快捷不方便。为了能够自由地移动,可在报表设计器中单击鼠标右键,在出现的快捷菜单中取消对菜单中取消对“抓取到网格抓取到网格”菜单项的选中。菜单项的选中。(8)为)为“页注脚页注脚”部分添加页号,方法是在部分添加页号,方法是在“页注脚页注脚”部分单击右键,在出现部分单击右键,在出现的快捷菜单中选的快捷菜单中选“插入控件插入控件”子菜单中的
208、子菜单中的“当前页码当前页码”菜单项,将会在菜单项,将会在“页注脚页注脚”部分出现一个报表标签控件,用来显示当前页码。部分出现一个报表标签控件,用来显示当前页码。注意:注意:数据报表设计器包含几个预先配置的控件,可以用来快速地向报表的任何数据报表设计器包含几个预先配置的控件,可以用来快速地向报表的任何部分添加日期、时间、页号或报表标题。部分添加日期、时间、页号或报表标题。 (9)在报表注脚中添加一个报表标签控件,设置它的)在报表注脚中添加一个报表标签控件,设置它的Caption属性值为属性值为“2007年年7月月4日制日制 制表人:童爱红制表人:童爱红”。(10)使用)使用RptLine报表控
209、件绘制直线,使报表数据显示在表格中。报表控件绘制直线,使报表数据显示在表格中。 报表创建完成后,还需写代码来显示(预览)报表。本报表的显示步骤如下:报表创建完成后,还需写代码来显示(预览)报表。本报表的显示步骤如下:(1)在)在“工程资源管理器工程资源管理器”窗口中,双击窗口中,双击“Form1”图标,显示窗体设计器。图标,显示窗体设计器。(2)在)在“工具箱工具箱”上,单击上,单击“General”选项卡。选项卡。 (3)在窗体上绘制一个命令按钮控件,设置它的)在窗体上绘制一个命令按钮控件,设置它的Caption属性值为属性值为“显示教师显示教师基本信息报表基本信息报表”。(4)在按钮的)在
210、按钮的Click事件中,编写代码:事件中,编写代码:RptTeacher.Show。(5)保存并运行工程,单击窗体上的)保存并运行工程,单击窗体上的“显示教师基本信息报表显示教师基本信息报表”按钮,将会出按钮,将会出现如图现如图11-13所示的所示的“SQL Server Login”对话框,输入密码后,单击对话框,输入密码后,单击“OK”按钮,按钮,将会出现报表运行界面。将会出现报表运行界面。 注意:注意:也可将数据报表作为启也可将数据报表作为启动对象,从而在不需要代码的动对象,从而在不需要代码的情况下,也可显示报表。情况下,也可显示报表。 11.4 使用使用SQL语句创建基于多个数据表语句
211、创建基于多个数据表的数据报表的数据报表Command对象的数据来源不仅可以是一个表,而且还可以是视图、对象的数据来源不仅可以是一个表,而且还可以是视图、存储过程和存储过程和SQL语句,通过视图、存储过程和语句,通过视图、存储过程和SQL语句创建报表,不语句创建报表,不但能使报表的数据来源于多个表,而且还可以创建计算字段。但能使报表的数据来源于多个表,而且还可以创建计算字段。 【例例11-4】根据根据CollegeMIS数据数据库,创建一个报表,库,创建一个报表,用来显示所有教师用来显示所有教师的教师号、姓名、的教师号、姓名、性别、年龄、职称性别、年龄、职称和系名信息,报表和系名信息,报表的运行
212、界面如图的运行界面如图11-14所示。所示。 实现思路:实现思路:Teacher表中没有系名信息,系名信息在表中没有系名信息,系名信息在Department表中,因此表中,因此需使用需使用SQL的的SELECT语句从两个表中提取数据。而年龄信息在数据语句从两个表中提取数据。而年龄信息在数据库中也不存在,但年龄信息可以通过当前日期和出生日期计算得出,库中也不存在,但年龄信息可以通过当前日期和出生日期计算得出,因此可在因此可在SQL的的SELECT语句中使用计算字段来实现。语句中使用计算字段来实现。实现步骤实现步骤 (在例(在例11-1基础上实现)基础上实现) :(1)为连接对象)为连接对象Con
213、nCollegeMIS添加一个添加一个Command对象,默认名为对象,默认名为Command1。 (2)在)在Command1对象上单击右键,在出现的快捷菜单中选择对象上单击右键,在出现的快捷菜单中选择“重重命名命名”,把,把Command1对象名称改为对象名称改为“cmdTeacherb”。再次在命令。再次在命令对象对象cmdTeacherb上单击右键,在出现的快捷菜单中选择上单击右键,在出现的快捷菜单中选择“属性属性”,将会出现将会出现 “cmdTeacherb属性属性”对话框,在该对话框中选中对话框,在该对话框中选中“SQL语句语句”单选钮,在其下面的文本框中输入单选钮,在其下面的文本
214、框中输入SQL语句:语句: SELECT Teacher.TeaNo, Teacher.TeaName,Teacher.Sex,(year(getdate()-year(Teacher.birthday)+1) as Age,Teacher.Title, Department.DepartName FROM Department INNER JOIN Teacher ON Department.DepartNo = Teacher.DepartNo 单击单击“确定确定”按钮,在数据环境设计器中可以看到按钮,在数据环境设计器中可以看到SQL语句的各输出字段语句的各输出字段(Age为计算字段)为计
215、算字段) 。(3)向工程中加载报表设计器,按表)向工程中加载报表设计器,按表11-4设置报表属性。设置报表属性。 (4)从数据环境设计器中依次把所有字段拖放到)从数据环境设计器中依次把所有字段拖放到“细节细节”部分,并把相应的部分,并把相应的报表标签控件拖动到报表标签控件拖动到“页标头页标头”部分,并更改报表标签控件的部分,并更改报表标签控件的Caption属性值属性值为相应字段的中文名称。再用为相应字段的中文名称。再用RptLine控件绘制线条以便形成表格控件绘制线条以便形成表格 。(5)在)在“工程属性工程属性”对话框中,把对话框中,把“RptTeacherb”报表设为启动对象。运行报表设
216、为启动对象。运行工程,出现登录窗口,输入密码后单击工程,出现登录窗口,输入密码后单击“OK”按钮后,得到报表的运行界面按钮后,得到报表的运行界面 。n11.5.1 分组分组Command对象的概念对象的概念n11.5.2 分组数据报表的创建分组数据报表的创建11.5 通过分组通过分组Command对象设计分对象设计分组数据报表组数据报表11.5.1 分组分组Command对象的概念对象的概念用户可通过对一个用户可通过对一个Command对象分组,创建一个对象分组,创建一个command层次结构。当一个层次结构。当一个Command对象被分组时,分组的字段被添加到一个组对象被分组时,分组的字段被
217、添加到一个组Command对象中,分组对象中,分组字段的每一个唯一值占一行。原来的字段的每一个唯一值占一行。原来的Command对象称为细节对象称为细节Command对象,对象,并且组并且组Command对象中的每一条记录与细节对象中的每一条记录与细节Command对象中的一组记录相关对象中的一组记录相关联,关联的条件是根据分组字段值相等。联,关联的条件是根据分组字段值相等。例如,例如,如果想分组的如果想分组的Command对象为教师表,可以通过它的对象为教师表,可以通过它的“Title”字段对象字段对象指定分组,并命名组指定分组,并命名组Command对象为对象为“ByTitle”。那么。那
218、么ByTitle中的每一行(一中的每一行(一种职称)就对应于教师表种职称)就对应于教师表Command对象中的具有该职称的所有教师。对象中的具有该职称的所有教师。 使用分组使用分组Command对象可以创建分组数据报表,即显示出分组字段的一个值,对象可以创建分组数据报表,即显示出分组字段的一个值,然后把与该分组字段值相同的所有记录显示出来。然后把与该分组字段值相同的所有记录显示出来。注意:注意:组组Command对象的名字不能与当前数据环境中的其它对象的名字不能与当前数据环境中的其它Command对象同对象同名。名。11.5.2 分组数据报表的创建分组数据报表的创建【例例11-5】为为SQL
219、Server数据库数据库CollegeMIS中的中的Teacher表建立一个分表建立一个分组报表,分组字段为组报表,分组字段为Sex,设计完成后的报表运行情况如图,设计完成后的报表运行情况如图11-18所示。所示。(为使报表更加清晰,可在(为使报表更加清晰,可在Teacher表中再增加几条记录。)表中再增加几条记录。) 实现步骤实现步骤 (在例(在例11-基础上实现)基础上实现) :(1)在数据环境设计器中,打开)在数据环境设计器中,打开Command对象对象cmdTeacher的属性对话框。的属性对话框。单击对话框中单击对话框中“分组分组”选项卡,选中选项卡,选中“分组命令对象分组命令对象”
220、复选框,在分组命令名复选框,在分组命令名称中输入称中输入“BySex”,在,在“命令中的字段命令中的字段”列表框中选中列表框中选中“Sex”字段,然后按字段,然后按“”按钮把按钮把“Sex”字段添加到字段添加到“用于分组的字段用于分组的字段”列表框中。列表框中。 (2)单击)单击“确定确定”按钮,在按钮,在“数据环境设计器数据环境设计器”中可看到创建的分组命令对中可看到创建的分组命令对象情况,如图象情况,如图11-20所示。所示。 (3)把数据报表设计器加载到当前项目中,按表)把数据报表设计器加载到当前项目中,按表11-5设置报表属性。设置报表属性。 (4)在报表设计器中单击右键,在出现的快捷
221、菜单中选择)在报表设计器中单击右键,在出现的快捷菜单中选择“检索结构检索结构”菜单菜单项,在出现的项,在出现的SQL Server服务器登录对话框中输入密码后按服务器登录对话框中输入密码后按“OK”按钮,数按钮,数据报表将自动出现一个分组标头部分和一个分组注脚部分据报表将自动出现一个分组标头部分和一个分组注脚部分 。 (5)从数据环境设计器中拖动)从数据环境设计器中拖动“Sex”字段到报表设计器中的字段到报表设计器中的“分组标头分组标头(BySex _Header)”部分中,把出现的报表标签控件的部分中,把出现的报表标签控件的Caption属性值设置属性值设置为为“性别为性别为”。再在报表文本
222、框控件后面添加一个报表标签控件,设置它的。再在报表文本框控件后面添加一个报表标签控件,设置它的Caption属性值为属性值为“的教师详细情况如下:的教师详细情况如下:”。 (6)从数据环境设计器中拖动)从数据环境设计器中拖动“TeaNo”字段到报表设计器中的字段到报表设计器中的“细节细节”部分部分中,将会产生一个报表标签控件和一个报表文本框控件。把报表标签控件拖动中,将会产生一个报表标签控件和一个报表文本框控件。把报表标签控件拖动到到“分组标头分组标头”部分中,并把它的部分中,并把它的Caption属性值设置为属性值设置为“教师号教师号”。 (7)采用与步骤()采用与步骤(6)一样的方法向报表
223、中添加)一样的方法向报表中添加TeaName、Title、Birthday和和Telephone字段。然后用字段。然后用RptLine控件绘制线条以便形成表格控件绘制线条以便形成表格 。 (8)在)在“工程属性工程属性”对话框中,把对话框中,把“RptSexGroup”报表设为启动对象。运行报表设为启动对象。运行工程,出现登录窗口,输入密码后单击工程,出现登录窗口,输入密码后单击“OK”按钮后,得到报表的运行界面按钮后,得到报表的运行界面 。 n11.6.1 层次结构层次结构Command对象的设计对象的设计n11.6.2 利用层次结构的利用层次结构的Command对象设对象设计数据报表计数据
224、报表11.6 根据层次结构根据层次结构Command对象设对象设计分组数据报表计分组数据报表11.6.1 层次结构层次结构Command对象的设计对象的设计在数据环境设计器中,可以构造出层次结构在数据环境设计器中,可以构造出层次结构Command对象,并可以对象,并可以在报表设计器中基于它创建分组数据报表。构造出层次结构在报表设计器中基于它创建分组数据报表。构造出层次结构Command对对象的方法是先创建一个父象的方法是先创建一个父Command对象,然后为父对象,然后为父Command对象创建对象创建一个子一个子Command对象。需注意的是:父对象。需注意的是:父Command对象和子对象
225、和子Command对象都应该是记录集返回的。对象都应该是记录集返回的。 【例例11-6】基于基于SQL Server数据库数据库CollegeMIS中的表,在数据环中的表,在数据环境中创建层次结构的境中创建层次结构的Command对象,父对象,父Command对象名为对象名为CmdStudent,数据来源为,数据来源为Student表,子表,子Command对象名为对象名为cmdSelectCourse,数据来源为一个,数据来源为一个SQL-SELECT查询语句,该查询语句,该查询语句从查询语句从Course表和表和SelectCourse表中查询出所有学生的选课表中查询出所有学生的选课情况,
226、包括情况,包括StuNo(学号)、(学号)、CourseNo(课程号)、(课程号)、CourseName(课程名)、(课程名)、Credit(学分)、(学分)、Score(成绩)等字(成绩)等字段。按照段。按照StuNo(学号)创建关联。(学号)创建关联。 实现步骤实现步骤 (在例(在例11-1基础上实现)基础上实现) :(1)为连接对象)为连接对象ConnCollegeMIS添加一个添加一个Command对象,默认名为对象,默认名为Command1。打开该。打开该Command对象的属性对话框,按图对象的属性对话框,按图11-23所示进行设置,所示进行设置,设置好后按设置好后按“确定确定”按
227、钮。在数据环境设计器中可以看到按钮。在数据环境设计器中可以看到Command1的名称的名称变为变为cmdStudent。 (2)在)在Command对象对象cmdStudent上单击右键,在出现的快捷菜单中选择上单击右键,在出现的快捷菜单中选择“添加子命令添加子命令”,将会出现一个子命令对象,在该命令对象上单击右键,在出,将会出现一个子命令对象,在该命令对象上单击右键,在出现的快捷菜单中选择现的快捷菜单中选择“属性属性”,按照如图,按照如图11-24所示设置所示设置“通用通用”选项卡。选项卡。 (3)单击)单击“关联关联”选项卡,设置关联定义中的父字段和子字段均为选项卡,设置关联定义中的父字段
228、和子字段均为StuNo,然后按然后按“添加添加”按钮按钮 。 (4)单击)单击“确定确定”按钮,可以在数据环境设计器中看到设计好的层次按钮,可以在数据环境设计器中看到设计好的层次Command对象对象 。 11.6.2 利用层次结构的利用层次结构的Command对象设对象设计数据报表计数据报表【例例11-7】根据例根据例11-6所创建的数据环境创建一个报表,该报表能所创建的数据环境创建一个报表,该报表能够显示每个学生所选修的课程情况,包括课程号、课程名、学分和够显示每个学生所选修的课程情况,包括课程号、课程名、学分和成绩等信息。报表运行界面如图成绩等信息。报表运行界面如图11-27所示。所示。
229、 实现步骤实现步骤 :(1)把报表设计器加载到工程中,按表)把报表设计器加载到工程中,按表11-6设置报表属性。设置报表属性。 (2)在报表设计器中单击右键,在出现的快捷菜单中选择)在报表设计器中单击右键,在出现的快捷菜单中选择“检索结构检索结构”菜单菜单项,数据报表将自动出现出一个组标头部分和一个组注脚部分项,数据报表将自动出现出一个组标头部分和一个组注脚部分 。 (3)分别拖动)分别拖动cmdStudent命令对象中的命令对象中的StuNo和和StuName两个字段到两个字段到“分分组标头(组标头(cmdStudent_Header)”部分中,并把产生的两个报表标签控件的部分中,并把产生的
230、两个报表标签控件的Caption属性值分别设置为属性值分别设置为“学号学号”和和“姓名姓名” 。 (4)拖动)拖动cmdSelectCourse命令对象的命令对象的“CourseNo”字段到报表设计器中的字段到报表设计器中的“细节细节”部分中,将会产生一个报表标签控件和一个报表文本框控件。把报表部分中,将会产生一个报表标签控件和一个报表文本框控件。把报表标签控件拖动到标签控件拖动到“分组标头分组标头”部分中,并把它的部分中,并把它的Caption属性值设置为属性值设置为“课程课程号号”。 (5)采用与步骤()采用与步骤(4)一样的方法向报表中添加)一样的方法向报表中添加CourseName、C
231、redit和和Score字段。然后用字段。然后用RptLine控件绘制线条以便形成表格控件绘制线条以便形成表格 。 (6)在)在“工程属性工程属性”对话框中,把对话框中,把“RptStudentScore”报表设为启动对象。报表设为启动对象。运行工程,出现登录窗口,输入密码后单击运行工程,出现登录窗口,输入密码后单击“OK”按钮后,得到报表的运行界按钮后,得到报表的运行界面面 。 n11.7.1 使用使用RptFunction控件进行统计汇总控件进行统计汇总n11.7.2 向数据报表添加一个合计字段向数据报表添加一个合计字段11.7 数据报表中的统计与计算数据报表中的统计与计算11.7.1 使
232、用使用RptFunction控件进行统计汇控件进行统计汇总总1.概述概述RptFunction控件是报表设计器中比较有特色的控件,它使用一些控件是报表设计器中比较有特色的控件,它使用一些内置的函数,在报表生成时显示运行中计算得到的数据,利用它可以对内置的函数,在报表生成时显示运行中计算得到的数据,利用它可以对分组或命令对象形成的整个记录集进行统计汇总。它与前面讲的计算字分组或命令对象形成的整个记录集进行统计汇总。它与前面讲的计算字段不同:段不同:RptFunction 控件仅在一个分组(或整个记录集)的所有记录控件仅在一个分组(或整个记录集)的所有记录都被处理后,才可以计算值,而都被处理后,才
233、可以计算值,而SQL- SELECT语句中的计算字段则是语句中的计算字段则是在记录被处理时,作为一个字段进行处理。在记录被处理时,作为一个字段进行处理。 2.添加一个添加一个RptFunction控件的步骤控件的步骤 (1)在数据报表设计器的组注脚部分或报表注脚部分的适当位置绘制一个)在数据报表设计器的组注脚部分或报表注脚部分的适当位置绘制一个RptFunction控件。控件。(2)设置)设置DataMember和和DataField属性的值,属性的值,DataMember属性的值为属性的值为数据环境的一个数据环境的一个Command对象,对象,DataField属性的值是一个数值字段。属性的
234、值是一个数值字段。11.7.1 使用使用RptFunction控件进行统计汇控件进行统计汇总总(3)设置)设置FunctionType属性的值,该属性的值决定属性的值,该属性的值决定RptFunction控件的控件的函数类型,常用的函数类型如表函数类型,常用的函数类型如表11-7所示。所示。 11.7.1 使用使用RptFunction控件进行统计汇控件进行统计汇总总【例例11-8】在例在例11-7的基础上,统计出每个学生的总学分及平均分。的基础上,统计出每个学生的总学分及平均分。报表的运行界面如图报表的运行界面如图11-30所示。所示。 实现步骤实现步骤 :(1)在)在“分组注脚(分组注脚(
235、cmdStudent_Footer)”中放置三个报表标签控件,分中放置三个报表标签控件,分别设置它的别设置它的Caption属性为属性为“选课信息汇总选课信息汇总”、“总学分总学分”和和“平均分平均分”,并,并把它们调整到适当的位置。把它们调整到适当的位置。 (2)在)在“分组注脚(分组注脚(cmdStudent_Footer)”中的中的“总学分总学分”后面放置一个后面放置一个RptFunction控件,设置它的控件,设置它的DataMember属性为属性为“cmdSelectCourse”,DataField属性为属性为“Credit”,FunctionType属性为属性为“0RptFunc
236、Sum”。再在再在“平均分平均分”后面放置一个后面放置一个RptFunction控件,设置它的控件,设置它的DataMember属性属性为为“cmdSelectCourse”,DataField属性为属性为“Score”,FunctionType属性为属性为“1RptFuncAve”。 (3)用)用RptLine控件绘制线条以便形成表格控件绘制线条以便形成表格 ,保存后运行报表,保存后运行报表 。 注意:注意:以上是把以上是把RptFunction控件放置在组注脚位置,是对每一组的控件放置在组注脚位置,是对每一组的该字段值进行统计汇总,如果把该字段值进行统计汇总,如果把RptFunction控
237、件放置在报表注脚位控件放置在报表注脚位置,则将对整个记录集中该字段的所有值进行统计汇总。置,则将对整个记录集中该字段的所有值进行统计汇总。 11.7.2 向数据报表添加一个合计字段向数据报表添加一个合计字段1.概述概述所谓合计字段就是对分组数据进行合计的字段,在数据环境设计器所谓合计字段就是对分组数据进行合计的字段,在数据环境设计器中也可以创建合计字段。合计字段与中也可以创建合计字段。合计字段与RptFunction 控件相似,因为两者控件相似,因为两者都是在报表生成时计算。但也有一些不同点:都是在报表生成时计算。但也有一些不同点:RptFunction控件只能被控件只能被放置在分组注脚部分中
238、,而一个合计字段可以被放置在数据报表设计器放置在分组注脚部分中,而一个合计字段可以被放置在数据报表设计器中除去报表标头、报表注脚和页标头部分的其它任何部分。中除去报表标头、报表注脚和页标头部分的其它任何部分。 2.添加一个合计字段的步骤添加一个合计字段的步骤 (1)在数据环境设计器中创建一个合计字段,需注意的是合计字段是在父)在数据环境设计器中创建一个合计字段,需注意的是合计字段是在父Command对象上建立。对象上建立。(2)从数据环境设计器中,把合计字段拖到数据报表设计器的相应部分中。)从数据环境设计器中,把合计字段拖到数据报表设计器的相应部分中。 11.7.2 向数据报表添加一个合计字段
239、向数据报表添加一个合计字段【例例11-9】改善例改善例11-8的报表功能,要求在组标头部分中显示出该的报表功能,要求在组标头部分中显示出该学生的选课门数。报表运行界面如图学生的选课门数。报表运行界面如图11-32所示所示 。 实现步骤实现步骤 (在例(在例11-8基础上):基础上):(1)打开)打开Command对象对象cmdStudent的属性窗口,单击的属性窗口,单击“合计合计”选项卡,选项卡,单击单击“添加添加”按钮,添加一个合计字段,具体设置如图按钮,添加一个合计字段,具体设置如图11-33所示。建好后按所示。建好后按“确定确定”按钮,在数据环境中将会出现一个按钮,在数据环境中将会出现
240、一个“CourseCount”合计字段合计字段 。 (2)从数据环境设计器中把合计字段)从数据环境设计器中把合计字段“CourseCount”拖动到报表设计器的分拖动到报表设计器的分组标头的适当位置,把产生的报表标签控件的组标头的适当位置,把产生的报表标签控件的Caption属性值设置为属性值设置为“课程数:课程数:”。(3)运行工程,出现登录窗口,输入密码后单击)运行工程,出现登录窗口,输入密码后单击“OK”按钮后,得到报表的按钮后,得到报表的运行界面运行界面 。11.8 数据报表的打印数据报表的打印打印方法打印方法 在在“打印预览打印预览”时单击数据报表上的时单击数据报表上的“打印打印“按
241、钮来打印数据报表,按钮来打印数据报表,也可以通过使用数据报表的也可以通过使用数据报表的PrintReport方法编程打印数据报表。如方法编程打印数据报表。如果打印过程中发生错误,可以在果打印过程中发生错误,可以在Error事件中进行错误捕获。事件中进行错误捕获。 PrintReport方法方法 作用是在程序运行时打印用数据报表设计器创建的数据报表。作用是在程序运行时打印用数据报表设计器创建的数据报表。 格式:格式:Rptobject.PrintReport(ShowDialog, Range, PageFrom, PageTo) 11.8 数据报表的打印数据报表的打印要把要把RptStuden
242、tScore报表全部打印出来,可使用如下语句:报表全部打印出来,可使用如下语句: RptStudentScore.PrintReport False, rptRangeAllPages如果仅希望打印第一页到第五面,可使用如下语句:如果仅希望打印第一页到第五面,可使用如下语句:RptStudentScore.PrintReport False, rptRangeFromTo, 1,5报表除了可以打印以后,还可以导出成其它的文件格式,以便报表除了可以打印以后,还可以导出成其它的文件格式,以便在一定的应用场合使用,如在在一定的应用场合使用,如在Internet上发布。导出数据报表可使上发布。导出数据
243、报表可使用数据报表设计器的用数据报表设计器的ExportReport方法,还可以使用方法,还可以使用ExportFormat对象对已导出的文件的内容或外观进行任意的格式设对象对已导出的文件的内容或外观进行任意的格式设定。定。 数据库应用教程数据库应用教程n12.1 ASP动态网页设计的基本概念动态网页设计的基本概念n12.2 HTML语言概述语言概述 n12.3 VBScript脚本语句脚本语句 第第12章章 Web数据库应用程序的开发数据库应用程序的开发n12.4 利用利用ASP开发数据库应用程序开发数据库应用程序 n12.5 一个实际一个实际Web数据库应用程序开发实例数据库应用程序开发实
244、例网上书城网上书城 n12.1.1 Internet与与Web服务服务n12.1.2 网页与网站网页与网站12.1 ASP动态网页设计的基本概念动态网页设计的基本概念n12.1.3 HTML语言语言 n12.1.4 统一资源定位器统一资源定位器URL n12.1.5 静态网页、动态网页与静态网页、动态网页与ASP技术技术 n12.1.6 ASP动态网页的运行环境动态网页的运行环境 12.1.1 Internet与与Web服务服务Web服务是目前服务是目前Internet上最有吸引力的服务之一,它由遍布在上最有吸引力的服务之一,它由遍布在Internet网上的被称为网上的被称为Web服务器的计算
245、机和安装了服务器的计算机和安装了Web浏览器软件浏览器软件的计算机组成。的计算机组成。Web服务器中存放着大量以超文本形式表示的、可公服务器中存放着大量以超文本形式表示的、可公开发布的或在一定范围内可共享的信息,这些超文本信息互相链接,开发布的或在一定范围内可共享的信息,这些超文本信息互相链接,形成了一个全球范围内的可相互引用的信息网络。安装了形成了一个全球范围内的可相互引用的信息网络。安装了Web浏览器浏览器(如(如IE 6.0)的用户,可以查询和获取分布在世界各地的)的用户,可以查询和获取分布在世界各地的Web服务器上服务器上的信息资源。的信息资源。通常把通常把Web服务器称为服务器端,而
246、把安装了服务器称为服务器端,而把安装了Web浏览器的用户浏览器的用户端称为客户端。端称为客户端。 12.1.2 网页与网站网页与网站Internet上各种超文本文件称为网页(上各种超文本文件称为网页(Page)。其中超文本)。其中超文本(Hypertext)是一种文本格式,是一种对信息的描述方法,这种描述)是一种文本格式,是一种对信息的描述方法,这种描述方法不受系统平台的限制,可以在不同的平台上使用,用户也可以在方法不受系统平台的限制,可以在不同的平台上使用,用户也可以在各种操作系统上浏览这些超文本文件。每个超文本文件中可以包含文各种操作系统上浏览这些超文本文件。每个超文本文件中可以包含文字、
247、图片、表格、表单等多种对象。在每一个页面上,可以有一些词、字、图片、表格、表单等多种对象。在每一个页面上,可以有一些词、语句或图片等作为语句或图片等作为“链接点(链接点(Link)”,通过这些链接点可以快速地,通过这些链接点可以快速地跳转到本网站的其它页面或其它网站上的页面。这种跳转到本网站的其它页面或其它网站上的页面。这种“链接点链接点”称为称为超链接。正是因为这些超链接的存在才使得超链接。正是因为这些超链接的存在才使得Internet上的无数页面能够上的无数页面能够关联到了一起。关联到了一起。网站是一个由超链接连在一起的多个网页的集合,它包含的网页网站是一个由超链接连在一起的多个网页的集合
248、,它包含的网页可以是一个也可以是多个,甚至成千上万个。可以是一个也可以是多个,甚至成千上万个。Internet上的网站是通过上的网站是通过地址进行定位的。网站通常也称之为站点。地址进行定位的。网站通常也称之为站点。 12.1.3 HTML语言语言HTML(Hypertext Markup Language)超文本标记语言是一种)超文本标记语言是一种用于编写超文本文档的标记语言,是用于编写超文本文档的标记语言,是Web网上描述页面内容和结构的网上描述页面内容和结构的标准语言。标准语言。Web上最基本的传输单位是网页,而这些网页都是用上最基本的传输单位是网页,而这些网页都是用HTML语言编写的。通
249、过浏览器打开语言编写的。通过浏览器打开HTML文件时,经过浏览器的识别文件时,经过浏览器的识别和解释,就会显示出精彩纷呈的网页来。和解释,就会显示出精彩纷呈的网页来。HTML具有平台无关性,无具有平台无关性,无论是何种操作系统,只要有相应的浏览器程序,就可以浏览论是何种操作系统,只要有相应的浏览器程序,就可以浏览HTML文文档。档。 12.1.4 统一资源定位器统一资源定位器URLURL用来唯一标识用来唯一标识Web网上的信息资源,使用它可以定位到服务器网上的信息资源,使用它可以定位到服务器上的某一文件(网页)或文件中的某位置。它由两个部分组成,第上的某一文件(网页)或文件中的某位置。它由两个
250、部分组成,第1部部分指出客户端希望得到主机提供的哪一种服务,第分指出客户端希望得到主机提供的哪一种服务,第2部分是主机名和网部分是主机名和网页在主机上的位置。当用户需要访问页在主机上的位置。当用户需要访问Web服务器上的网页时,就可以在服务器上的网页时,就可以在Web浏览器的地址栏中输入浏览器的地址栏中输入URL。 URL的表示形式如下:的表示形式如下: 协议类型协议类型:/主机域名主机域名:端口号端口号/文件路径文件路径/文件名文件名 协议类型用来指出使用协议类型用来指出使用Internet的服务类型,最常用的是的服务类型,最常用的是http,它是指在客,它是指在客户端和服务器端执行户端和服
251、务器端执行HTTP协议,将远程协议,将远程Web服务器上的文件传输到用户的服务器上的文件传输到用户的浏览器。还有其它的协议类型(如浏览器。还有其它的协议类型(如ftp、mailto、telnet、news等)。等)。主机域名是指提供此服务的计算机域名;端口号通常是默认的,如主机域名是指提供此服务的计算机域名;端口号通常是默认的,如Web服务使用的是服务使用的是80,一般不需要给出。,一般不需要给出。“/文件路径文件路径/文件名文件名”指的是资源在指的是资源在Web服务器中的位置和文件名。如果没服务器中的位置和文件名。如果没有给出路径和文件名,表示访问的是默认的网站主页文件(主页文件的主文有给出
252、路径和文件名,表示访问的是默认的网站主页文件(主页文件的主文件名一般为件名一般为Index或者或者Default),主页是),主页是Web站点上一组网页或其他文件的站点上一组网页或其他文件的起始页。起始页。12.1.5 静态网页、动态网页与静态网页、动态网页与ASP技术技术 静态网页的内容是在编写的时候就已经确定了,未经修改不会变化,静态网页的内容是在编写的时候就已经确定了,未经修改不会变化,对静态网页的每次访问都返回相同的结果。扩展名一般为对静态网页的每次访问都返回相同的结果。扩展名一般为.htm或或.html。 动态网页的内容是在浏览器访问动态网页的内容是在浏览器访问Web服务器时创建的,
253、当浏览器要服务器时创建的,当浏览器要求下载网页的请求到达时,求下载网页的请求到达时,Web服务器便运行网页中的一些应用程序创服务器便运行网页中的一些应用程序创建动态文档,并把创建的文档传送给浏览器。建动态文档,并把创建的文档传送给浏览器。 ASP(Active Server Pages)是一种开发动态网页的综合技术,它穿)是一种开发动态网页的综合技术,它穿插使用插使用HTML语言、语言、VBScript等脚本语言、等脚本语言、ASP内置对象、内置对象、ActiveX组件、组件、ADO数据访问技术等来编写动态网页。目前运行数据访问技术等来编写动态网页。目前运行ASP动态网页的最常用的服动态网页的
254、最常用的服务器是集成在务器是集成在Windows 2000、Windows XP都操作系统中的都操作系统中的IIS 4.0/5.0/5.1。用用ASP编写的动态网页的扩展名为编写的动态网页的扩展名为.asp,它运行于服务器端。,它运行于服务器端。 动态网页和静态网页都存放在动态网页和静态网页都存放在Web服务器中,当用户在浏览器地址栏输服务器中,当用户在浏览器地址栏输入网页的入网页的URL并按回车键,浏览器将向并按回车键,浏览器将向Web服务器发出了一个服务器发出了一个HTTP请求,请求,Web服务器根据请求网页的扩展名,确定相应的响应方式。服务器根据请求网页的扩展名,确定相应的响应方式。 1
255、2.1.6 ASP动态网页的运行环境动态网页的运行环境1安装安装IIS 5.1 “虚拟目录虚拟目录”是物理上未包含在主目录中的目录,但客户端浏览器却认为是物理上未包含在主目录中的目录,但客户端浏览器却认为是包含在主目录中的目录。虚拟目录具有是包含在主目录中的目录。虚拟目录具有“别名别名”,客户端浏览器用此别名,客户端浏览器用此别名来访问该目录。别名一般要比目录的路径名称短,便于用户键入。使用别名来访问该目录。别名一般要比目录的路径名称短,便于用户键入。使用别名也更加安全,并且在站点上移动目录非常容易,因为只更改别名和目录之间也更加安全,并且在站点上移动目录非常容易,因为只更改别名和目录之间的映
256、射关系,而并不更改网页的的映射关系,而并不更改网页的URL。 2创建虚拟目录创建虚拟目录 12.1.6 ASP动态网页的运行环境动态网页的运行环境3本机网页的访问本机网页的访问 (1)使用)使用IP地址。本地主机的地址。本地主机的IP地址为地址为127.0.0.1,例如要运行,例如要运行a1.asp网页,网页,就可以在浏览器的地址栏中输入就可以在浏览器的地址栏中输入“http:/127.0.0.1/a1.asp”;(2)使用本地主机的别名)使用本地主机的别名LocalHost。LocalHost是是IP地址地址127.0.0.1的别名,的别名,如要运行如要运行a1.asp网页,可在浏览器的地址
257、栏中输入网页,可在浏览器的地址栏中输入“http:/LocalHost/a1.asp”;(3)使用计算机名。若本地计算机名为)使用计算机名。若本地计算机名为js1,要运行,要运行a1.asp网页,可在浏览网页,可在浏览器的地址栏中输入器的地址栏中输入“http:/js1/a1.asp”; 要访问虚拟目录下的网页,在浏览器的地址栏中输入的要访问虚拟目录下的网页,在浏览器的地址栏中输入的URL形式如下:形式如下:http:/127.0.0.1/虚拟目录别名虚拟目录别名/网页文件名网页文件名例如,要访问例如,要访问MYASP虚拟目录下的网页虚拟目录下的网页A2.ASP,URL为:为:http:/12
258、7.0.0.1/myasp/a2.asp n12.2.1 HTML语言的基本概念语言的基本概念n12.2.2 HTML文档的基本结构文档的基本结构 12.2 HTML语言概述语言概述n12.2.3 HTML的常用标记的常用标记 12.2.1 HTML语言的基本概念语言的基本概念HTML是是Hyper Text Markup Language(超文本标记语言)的缩写,它是(超文本标记语言)的缩写,它是构成构成Web页面(页面(Page)的主要工具,是用来表示网上信息的符号标记语言,)的主要工具,是用来表示网上信息的符号标记语言,但不是一种编程语言,没有编程语言程序的控制结构但不是一种编程语言,没
259、有编程语言程序的控制结构 。HTML文档属于纯文本文件,可用任意的文本编辑器(如记事本)编写。文档属于纯文本文件,可用任意的文本编辑器(如记事本)编写。HTML文档可以运行在不同操作系统的平台上。文档可以运行在不同操作系统的平台上。 HTML文档由标记和被标记的内容组成,标记用于修饰、设置被标记内容的文档由标记和被标记的内容组成,标记用于修饰、设置被标记内容的格式。格式。 标记一般格式如下:标记一般格式如下: 受标记影响的内容受标记影响的内容 标记可能具有一些属性,为设置标记的属性,标记的格式可表示如下:标记可能具有一些属性,为设置标记的属性,标记的格式可表示如下:受标记影响的内容受标记影响的
260、内容 12.2.2 HTML文档的基本结构文档的基本结构12.2.3 HTML的常用标记的常用标记【例例12-1】编写编写“文学天地文学天地”框架网页及相关网页。在框架网页及相关网页。在IE浏览器浏览器中,框架网页初始运行情况如图中,框架网页初始运行情况如图12-5所示(右边框架显示的网页所示(右边框架显示的网页底部有一个底部有一个“返回返回”超链接,没有显示出来)。此时单击左边框超链接,没有显示出来)。此时单击左边框架中显示的网页中的文章名超链接,将在右边的框架中出现相应架中显示的网页中的文章名超链接,将在右边的框架中出现相应文章的网页,图文章的网页,图2-14就是单击了就是单击了“两份金陵
261、两份金陵”后的网页浏览情况。后的网页浏览情况。此时在右边框架网页中单击此时在右边框架网页中单击“第一部分第一部分”、“第二部分第二部分”、“第第三部分三部分”、“第四部分第四部分”超链接,将会跳转到相应部分的开头。超链接,将会跳转到相应部分的开头。单击单击“返回到开头返回到开头”文字或文字前的图像,均会跳转到文章的开文字或文字前的图像,均会跳转到文章的开头。头。 图图12-5 网页运行界面网页运行界面 注意:注意:网页代码参见实例。网页代码参见实例。n12.3.1 VBScript脚本语言概述脚本语言概述n12.3.2 在在HTML文档中加入文档中加入VBScript脚本脚本语言代码的方法语言
262、代码的方法 12.3 VBScript脚本语句脚本语句12.3.1 VBScript脚本语言概述脚本语言概述为了使为了使Web网页能够与用户进行交互,或者是为了完成某种特定的功能,网页网页能够与用户进行交互,或者是为了完成某种特定的功能,网页设计者通常要编写一些小程序并嵌入到网页中。这种完成某种特定功能的小程设计者通常要编写一些小程序并嵌入到网页中。这种完成某种特定功能的小程序,我们称之为脚本程序。服务器对脚本程序采用解释方式执行。编写脚本的序,我们称之为脚本程序。服务器对脚本程序采用解释方式执行。编写脚本的语言称为脚本语言。目前常用的脚本语言有语言称为脚本语言。目前常用的脚本语言有VBScr
263、ipt和和JavaScript 。VBScript可以作为客户端编程语言。客户端编程语言是可以由浏览器解释执可以作为客户端编程语言。客户端编程语言是可以由浏览器解释执行的语言。行的语言。 VBScript也可以作为服务器端编程语言。服务器端编程语言是在服务器上执也可以作为服务器端编程语言。服务器端编程语言是在服务器上执行的语言。当用户请求网页时,用行的语言。当用户请求网页时,用VBScript编写的服务器端执行的脚本将被编写的服务器端执行的脚本将被服务器执行。服务器执行。 12.3.1 VBScript脚本语言概述脚本语言概述关于关于VBScript脚本语言,需注意以下问题:脚本语言,需注意以
264、下问题: (1)作为客户端编程语言,)作为客户端编程语言, VBScript脚本程序一般只能被脚本程序一般只能被Microsoft Internet Explorer浏览器解释执行浏览器解释执行 。 (2)用)用VBScript语言编写的服务器端执行的脚本程序,在网页通过网络传语言编写的服务器端执行的脚本程序,在网页通过网络传送给浏览器之前被执行,送给浏览器之前被执行,Web浏览器收到的只是标准的浏览器收到的只是标准的HTML文件。文件。 (3)VBScript脚本语言的语法和脚本语言的语法和Visual Basic基本相同,可以看成是基本相同,可以看成是Visual Basic的缩微版本,所
265、以学过的缩微版本,所以学过Visual Basic的读者,基本上不需重新的读者,基本上不需重新学习。学习。 12.3.2 在在HTML文档中加入文档中加入VBScript脚脚本语言代码的方法本语言代码的方法1加入在客户端运行的加入在客户端运行的VBScript代码代码 在网页文件中使用在网页文件中使用标记可以嵌入标记可以嵌入VBScript代码:代码:VBScript代码序列代码序列2加入在服务器端运行的加入在服务器端运行的VBScript代码代码 在网页文件中使用标记在网页文件中使用标记“”可以嵌入在服务器端运行的可以嵌入在服务器端运行的ASP代码,可以根据需要在其中编写代码,可以根据需要在
266、其中编写VBScript脚本程序。脚本程序。 例:例: 在在HTML中加入中加入VBScript代码代码 script代码块,默认由客户浏览器执行代码块,默认由客户浏览器执行 !- document.write 欢迎您进入欢迎您进入VBscript编程世界!编程世界! & - n12.4.1 ASP的对象及其作用的对象及其作用n12.4.2 表单与交互表单与交互 12.4 利用利用ASP开发数据库应用程序开发数据库应用程序n12.4.3 Application对象、对象、Session对象和对象和Global.asa文件文件 n12.4.4 使用使用ASP和和ADO开发开发Web数据库应数据库
267、应用程序的注意事项用程序的注意事项 12.4.1 ASP的对象及其作用的对象及其作用1Server对象对象 Server对象是对象是ASP七大内置对象之中与服务器关系最为密切的一七大内置对象之中与服务器关系最为密切的一个对象,它允许用户使用个对象,它允许用户使用Web服务器提供的功能。服务器提供的功能。该对象是该对象是ASP的请示对象,它所包含的信息是客户端浏览器提出的请示对象,它所包含的信息是客户端浏览器提出的请求。利用的请求。利用Request对象可以接收用户发送给服务器的信息和请求,对象可以接收用户发送给服务器的信息和请求,客户端发送的所有信息连同请求均被封装在客户端发送的所有信息连同请
268、求均被封装在Request对象中。对象中。 2Request对象对象3Response对象对象该对象可以通过多种方式将服务器端数据发送到客户端,如向客该对象可以通过多种方式将服务器端数据发送到客户端,如向客户端户端IE窗口输出信息、用户浏览页面的重定向以及在客户端创建窗口输出信息、用户浏览页面的重定向以及在客户端创建cookies等。等。 12.4.1 ASP的对象及其作用的对象及其作用4Session对象对象Session对象是对象是ASP技术中实现用户会话管理的手段,主要用来技术中实现用户会话管理的手段,主要用来存储用户会话所需的信息。存储用户会话所需的信息。 Application对象可
269、以控制服务器端应用程序的启动和终止状态,对象可以控制服务器端应用程序的启动和终止状态,并保存整个应用程序运行过程中的信息。可将虚拟目录及其子目录也并保存整个应用程序运行过程中的信息。可将虚拟目录及其子目录也看成一个应用程序,看成一个应用程序,Application对象用于在访问同一应用程序的所有对象用于在访问同一应用程序的所有用户之间共享信息。虽然它与用户之间共享信息。虽然它与Session对象比较相似,但在本质上是对象比较相似,但在本质上是不同的。不同的。 5Application对象对象12.4.1 ASP的对象及其作用的对象及其作用6ObjectContext对象对象ObjectCont
270、ext对象是微软在对象是微软在IIS 4.0中开始提供的对象,它主要中开始提供的对象,它主要用来处理与事务相关的问题。与用来处理与事务相关的问题。与ASP的其它对象有所不同,的其它对象有所不同,ObjectContext对象没有属性和集合,只有方法和事件。对象没有属性和集合,只有方法和事件。 该对象包含了运行该对象包含了运行ASP网页发生错误的详细内容网页发生错误的详细内容 。 7ASPError对象对象12.4.2 表单与交互表单与交互1表单的定义表单的定义 表单的标记是表单的标记是。表单标记的基本语法格式如下:。表单标记的基本语法格式如下:在表单中可使用在表单中可使用、等标记向表单添加等标
271、记向表单添加DHTML内部控件。内部控件。DHTML内部控件是一种预制的对象,由客户端浏览器内部控件是一种预制的对象,由客户端浏览器直接提供,无需从服务器上下载。其中,直接提供,无需从服务器上下载。其中,标记用来向表单添加标记用来向表单添加列表框控件、列表框控件、标记用来向表单添加多行文本区控件,而标记用来向表单添加多行文本区控件,而标记则可以向表单中添加多种标记则可以向表单中添加多种DHTML控件。控件。 2DHTML控件控件 (1)使用)使用标记添加控件标记添加控件 (2)用)用标记添加列表框标记添加列表框 选项文本选项文本1 选项文本选项文本2 标记定义列表框,即标记定义列表框,即Sel
272、ect对象,对象, 标记定义列表框中标记定义列表框中的选项,即的选项,即Option对象;列表框的对象;列表框的Size属性用来表示在带滚动条的列表框中属性用来表示在带滚动条的列表框中一次可见的列表项数,没有设置该属性则为下拉式列表框;列表框的一次可见的列表项数,没有设置该属性则为下拉式列表框;列表框的Multiple可选项用来表示列表框是否可以多选,加上本选项,列表框可以多选,否则可选项用来表示列表框是否可以多选,加上本选项,列表框可以多选,否则只能单选。只能单选。列表框还有两个重要的属性:列表框还有两个重要的属性:Length属性和属性和SelectedIndex属性。其中,属性。其中,L
273、ength属性用来返回列表框中选项的个数,属性用来返回列表框中选项的个数,SelectedIndex属性用来指出或属性用来指出或设置哪个选项被选中。设置哪个选项被选中。列表框中的每一项是一个列表框中的每一项是一个Option对象,主要使用该对象的对象,主要使用该对象的Selected和和Value两个属性,两个属性,Selected是一个可选项,加上它表示该项是被预选的,同一个是一个可选项,加上它表示该项是被预选的,同一个标记中只能有一个该可选项。标记中只能有一个该可选项。Value属性用来指定选项的值。属性用来指定选项的值。(3)使用)使用标记添加多行文本框标记添加多行文本框 其中,行数和列
274、数是指不用滚动条就可看到的部分;在其中,行数和列数是指不用滚动条就可看到的部分;在之间的内容是文本框的初始值,为多行文本之间的内容是文本框的初始值,为多行文本框的框的value属性值。属性值。 12.4.2 表单与交互表单与交互3处理表单提交的数据处理表单提交的数据(1)使用)使用Request对象的对象的Form集合获取表单提交的数据集合获取表单提交的数据 格式二:格式二: Request.Form(控件名控件名)(index) 格式一:格式一: Request.Form(控件名控件名) 当请求提交数据的表单的当请求提交数据的表单的METHOD属性值为属性值为POST时,请求提交的表时,请求
275、提交的表单中的单中的DHTML控件的值将存放在控件的值将存放在Request对象的对象的Form集合中,该集集合中,该集合的每个成员均为只读。因此在表单处理程序中,可用合的每个成员均为只读。因此在表单处理程序中,可用Request对象对象的的Form集合获取表单提交的数据。集合获取表单提交的数据。 格式三:格式三: Request.Form(控件名控件名).Count 【例例12-2】编写一个爱好选择表单及相应的表单处理程序,爱好选择编写一个爱好选择表单及相应的表单处理程序,爱好选择表单运行界面如图表单运行界面如图12-7所示,表单处理程序的运行结果如图所示,表单处理程序的运行结果如图12-8
276、所示。所示。 实现思路:实现思路:本题需编写两个网页文件,一个是表单网页用来显示供用户本题需编写两个网页文件,一个是表单网页用来显示供用户输入信息的表单,在表单定义的时候应把输入信息的表单,在表单定义的时候应把METHOD属性值指定为属性值指定为POST,把,把ACTION属性值指定为表单处理程序的属性值指定为表单处理程序的URL(可采用相对路(可采用相对路径)。保存表单处理程序时,一定要注意根据所取的文件名所构成的径)。保存表单处理程序时,一定要注意根据所取的文件名所构成的URL与表单与表单ACTION属性的值应相同。在表单处理程序中,可使用属性的值应相同。在表单处理程序中,可使用Reque
277、st对象的对象的Form集合获取用户提交的数据。集合获取用户提交的数据。 12.4.2 表单与交互表单与交互3处理表单提交的数据处理表单提交的数据(2)使用)使用Request对象的对象的QueryString集合获取表单提交的数据集合获取表单提交的数据 格式二:格式二:Request. QueryString (控件名控件名)(index) 格式一:格式一: Request.QueryString(控件名控件名) 表单不但可以使用表单不但可以使用POST方式向服务器提交数据,而且可以使用方式向服务器提交数据,而且可以使用GET方式向方式向服务器提交数据,这种方式只需把请求提交数据的表单的服务
278、器提交数据,这种方式只需把请求提交数据的表单的METHOD属性值属性值设置为设置为GET。若表单通过。若表单通过GET方式向服务器提交数据,则在表单处理程序中,方式向服务器提交数据,则在表单处理程序中,可用可用Request对象的对象的QueryString集合获取表单提交的数据。集合获取表单提交的数据。 格式三:格式三: Request. QueryString (控件名控件名).Count 思考:思考:如何使用如何使用Request. QueryString改造上例?改造上例? 12.4.2 表单与交互表单与交互3处理表单提交的数据处理表单提交的数据(3)直接使用查询字符串向)直接使用查询
279、字符串向ASP网页传送数据网页传送数据 在运行网页的时候,也可在网页的在运行网页的时候,也可在网页的URL中直接使用参数和参数中直接使用参数和参数的值构成查询字符串,通过查询字符串在网页间传送数据。使用查的值构成查询字符串,通过查询字符串在网页间传送数据。使用查询字符串的一般形式如下:询字符串的一般形式如下:URL?参数参数1=值值1 & 参数参数2=值值2参数及值将提交给参数及值将提交给URL指定的指定的ASP网页,在网页,在ASP网页中可以也网页中可以也只能使用只能使用Request对象的对象的QueryString集合获取数据。集合获取数据。 在浏览器的地址栏输入地址在浏览器的地址栏输入
280、地址“http:/localhost/myasp/ch12/E1.asp?XM=童军童军&ZC=教授教授” 12.4.2 表单与交互表单与交互3处理表单提交的数据处理表单提交的数据(4)把表单与表单处理程序合并到一个文件)把表单与表单处理程序合并到一个文件把两个文件合并成一个文件的思路是:当第一次访问文件时,应执行显示表把两个文件合并成一个文件的思路是:当第一次访问文件时,应执行显示表单部分(表单网页),而当表单内容输入后提交时,应执行接受并处理表单单部分(表单网页),而当表单内容输入后提交时,应执行接受并处理表单信息的部分(表单处理程序)。信息的部分(表单处理程序)。根据访问该网页时是否同时
281、采用根据访问该网页时是否同时采用POST方式发送了表单信息,可以判断出该方式发送了表单信息,可以判断出该网页是不是第一次被访问,可以使用如下形式的表达式:网页是不是第一次被访问,可以使用如下形式的表达式:Request.ServerVariables(CONTENT_LENGTH)0 如果上述条件为如果上述条件为False,表示没有发送信息,应是第一次访问网页,如果上,表示没有发送信息,应是第一次访问网页,如果上述条件为述条件为True,表示发送了信息,应是第二次访问网页。,表示发送了信息,应是第二次访问网页。 同理,当表单采用同理,当表单采用GET方式提交了数据,则表达式方式提交了数据,则表
282、达式“Request.servervariables(QUERY_STRING)”的值为包含提交数据的查的值为包含提交数据的查询字符串,不为空字符串。如果没有提交数据,则表达式询字符串,不为空字符串。如果没有提交数据,则表达式“Request.servervariables(QUERY_STRING)”的值为空字符串。因此通的值为空字符串。因此通过判断表达式过判断表达式“Request.servervariables(QUERY_STRING)”的值是的值是False还是还是True,就可以知道是显示表单,还是执行表单处理程序。,就可以知道是显示表单,还是执行表单处理程序。 由于在定义表单时,
283、其由于在定义表单时,其Action属性值要设置为表单处理程序的属性值要设置为表单处理程序的URL,当合并,当合并在一起时,该属性值应为本网页自身的在一起时,该属性值应为本网页自身的URL,可以使用如下语句完成:,可以使用如下语句完成: Action=例如,例如,可把例可把例12_2的两个文件合并成一个文件,代码如下:的两个文件合并成一个文件,代码如下: 爱好选择程序爱好选择程序 form name=frmhobby method=post action= 12.4.3 Application对象、对象、Session对象对象和和Global.asa文件文件1Application对象对象 (1
284、)应用程序级变量的创建与访问)应用程序级变量的创建与访问 创建应用程序级变量的一般格式为:创建应用程序级变量的一般格式为:Application(变量名变量名)=值值 或或 Application.Contents(变量名变量名)=值值其中其中Contents是是Application对象的一个集合,用来存放所有非对象变量,对象的一个集合,用来存放所有非对象变量,也是也是Application对象的默认集合。对象的默认集合。同样要访问应用程序级变量,可使用如下格式。同样要访问应用程序级变量,可使用如下格式。Application(变量名变量名) 或或 Application.Contents(
285、变量名变量名)创建的应用程序级变量可以为访问该应用程序的所有用户共享。创建的应用程序级变量可以为访问该应用程序的所有用户共享。 12.4.3 Application对象、对象、Session对象对象和和Global.asa文件文件1Application对象对象 (2)Application对象的方法对象的方法 Application对象只有对象只有Lock和和Unlock两个方法。两个方法。 Application对象响应两个事件:对象响应两个事件:OnStart事件和事件和OnEnd事件。事件。Application_OnStart事件是在事件是在Application对象开始时被触发,并
286、且只在第对象开始时被触发,并且只在第一个用户的第一次请求时触发一次。它主要用于初始化变量、创建对象和运一个用户的第一次请求时触发一次。它主要用于初始化变量、创建对象和运行其它代码。行其它代码。Application_OnEnd事件是在整个事件是在整个Application对象结束时才对象结束时才被触发的,当它被触发时应用程序的所有变量也相应地被取消。被触发的,当它被触发时应用程序的所有变量也相应地被取消。(3)Application对象的事件对象的事件 Application对象的对象的Application_OnStart和和Application_OnEnd事件过程事件过程只能在只能在Gl
287、obal.asa文件中创建。文件中创建。12.4.3 Application对象、对象、Session对象对象和和Global.asa文件文件2Session对象对象 (1)会话级变量的创建与访问)会话级变量的创建与访问 创建会话级变量的一般格式为:创建会话级变量的一般格式为:Session(变量名变量名)=值值 或或 Session.Contents(变量名变量名)=值值访问会话级变量,可使用如下格式。访问会话级变量,可使用如下格式。Session(变量名变量名) 或或 Session.Contents(变量名变量名)(2)Session对象的事件对象的事件 Session对象响应对象响应S
288、ession_OnStart和和Session_OnEnd两个事件,它们分两个事件,它们分别用于别用于Session对象的启动和结束时的运行相应的代码。在一个对象的启动和结束时的运行相应的代码。在一个Session开开始时,始时,Session_OnStart事件被触发,而在一个事件被触发,而在一个Session结束时,结束时,Session_OnEnd事件被触发。事件被触发。 12.4.3 Application对象、对象、Session对象对象和和Global.asa文件文件3Global文件文件Global文件是一个可选的纯文本文件,程序编写者可以在该文件中指定事件文件是一个可选的纯文本
289、文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的变量或对象。脚本,并声明具有会话和应用程序作用域的变量或对象。Global文件的名称文件的名称必须是必须是Global.asa且必须存放在且必须存放在Web应用程序的根目录(主目录下或虚拟目应用程序的根目录(主目录下或虚拟目录下)中,并且每个录下)中,并且每个Web应用程序只能有一个应用程序只能有一个Global.asa文件。文件。 Global.asa文件中存放着文件中存放着ASP应用程序运行期间所需的应用程序运行期间所需的Application对象和对象和Session对象的事件,即对象的事件,即Applicati
290、on_OnStart事件、事件、Application_OnEnd事件、事件、Session_OnStart事件和事件和Session_OnEnd事件。另外,在事件。另外,在Global.asa文件中还存放有文件中还存放有标记声明的对象。标记声明的对象。 可以用任何支持脚本的语言编写可以用任何支持脚本的语言编写Global.asa文件中包含的脚本。如果多个事文件中包含的脚本。如果多个事件使用同一种脚本语言,就可以将它们组织在一个件使用同一种脚本语言,就可以将它们组织在一个标记中。标记中。 Global.asa文件的基本结构如下。文件的基本结构如下。 Sub Application_OnStar
291、t此处编写应用程序启动时需执行的代码此处编写应用程序启动时需执行的代码End SubSub Session_OnStart此处编写一个会话开始时需执行的代码此处编写一个会话开始时需执行的代码End SubSub Session_OnEnd 此处编写一个会话结束时需执行的代码此处编写一个会话结束时需执行的代码End SubSub Application_OnEnd此处编写应用程序结束时需执行的代码此处编写应用程序结束时需执行的代码End Sub12.4.4 使用使用ASP和和ADO开发开发Web数据库数据库应用程序的注意事项应用程序的注意事项1Connection对象的创建对象的创建创建创建Co
292、nnection对象的一般格式为:对象的一般格式为: Set 连接对象变量名连接对象变量名= server.createobject(adodb.connection)例如有下列代码:例如有下列代码: Dim objcon set objcon=server.createobject(adodb.connection)该代码就创建了一个连接对象的实例并赋值给对象变量名该代码就创建了一个连接对象的实例并赋值给对象变量名objcon。 创建创建Recordset对象的一般格式为:对象的一般格式为: Set 记录集对象变量名记录集对象变量名= server.createobject(adodb.re
293、cordset) 2Recordset对象的创建对象的创建例如有下列代码:例如有下列代码: Dim objrs set objrs=server.createobject(adodb.recordset)该代码就创建了一个记录集对象的实例并赋值给对象变量名该代码就创建了一个记录集对象的实例并赋值给对象变量名objrs。12.4.4 使用使用ASP和和ADO开发开发Web数据库数据库应用程序的注意事项应用程序的注意事项3Command对象的创建对象的创建创建创建Command对象的一般格式为:对象的一般格式为: Set 命令对象变量名命令对象变量名= server.createobject(ma
294、nd) 例如有下列代码:例如有下列代码:Dim objcmdset objcmd=server.createobject(mand)该代码就创建了一个命令对象的实例并赋值给对象变量名该代码就创建了一个命令对象的实例并赋值给对象变量名objcmd。 在网页中准备使用内部常量的代码之前加入类似如下的代码:在网页中准备使用内部常量的代码之前加入类似如下的代码: 4使用使用ADO的内部常量的内部常量 假设假设msado15.dll文件保存在文件保存在C:Program FilesCommon FilesSystemado文件中,则只需加入如下代码:文件中,则只需加入如下代码:然后,就可以在程序中直接使
295、用然后,就可以在程序中直接使用ASP的内部常量了。的内部常量了。例如在加入上述代码之前,有如下打开记录集的语句:例如在加入上述代码之前,有如下打开记录集的语句: objRs.open Student,objCon,1,2,2加入上述代码之后,就可以直接使用常量,可以写成如下的加入上述代码之后,就可以直接使用常量,可以写成如下的语句:语句:objRs.open Student,objCon, adOpenKeyset,adLockPessimistic,AdCmdTablen12.5.1 网上书城功能介绍网上书城功能介绍 12.5 一个实际一个实际Web数据库应用程序开数据库应用程序开发实例发实
296、例网上书城网上书城n12.5.2 网上书城实现思路及功能模块网上书城实现思路及功能模块 n12.5.3 网上书城的实现网上书城的实现 12.5.1 网上书城功能介绍网上书城功能介绍“网上书城网上书城”的基本功能是售书。进入网上书城时,首先出的基本功能是售书。进入网上书城时,首先出现如图现如图12-10所示的登录网页。用户输入名字和电话号码后单击所示的登录网页。用户输入名字和电话号码后单击“登录登录”按钮,将会出现如图按钮,将会出现如图12-11所示的网上书城网页,用户可以所示的网上书城网页,用户可以单击表格上面的页号超链接来按页查看图书信息。找到要购买的单击表格上面的页号超链接来按页查看图书信
297、息。找到要购买的书籍后在其后的书籍后在其后的“数量数量”列文本框中输入要购买的数量,然后单列文本框中输入要购买的数量,然后单击其后的击其后的“放入购物车放入购物车”按钮,将会出现如图按钮,将会出现如图12-12所示的提示网所示的提示网页。在该网页上单击页。在该网页上单击“网上书城网上书城”超链接或超链接或“返回网上书城返回网上书城”超超链接,均会返回到图链接,均会返回到图12-11的网上书城网页。在网上书城订购了一的网上书城网页。在网上书城订购了一些书籍后,单击些书籍后,单击“购物车购物车”按钮将出现如图按钮将出现如图12-13所示的订购图书所示的订购图书列表网页,供用户查看已订书籍情况。当用
298、户不需要某种图书时,列表网页,供用户查看已订书籍情况。当用户不需要某种图书时,可通过单击可通过单击“操作操作”列下面的列下面的“删除删除”超链接来删除该项订购信超链接来删除该项订购信息。单击息。单击“删除删除”超链接将会出现如图超链接将会出现如图12-14的提示信息网页。的提示信息网页。 12.5.2 网上书城实现思路及功能模块网上书城实现思路及功能模块1实现思路实现思路 为存放待售图书信息和用户订购的图书信息,可使用一个数据库为存放待售图书信息和用户订购的图书信息,可使用一个数据库(假设数据库名为(假设数据库名为BookShop),该数据库应有两个表,一个表用来存),该数据库应有两个表,一个
299、表用来存放待售图书信息(假设表名为放待售图书信息(假设表名为Store),另一个表用来存放客户订购的图),另一个表用来存放客户订购的图书信息(假设表名为书信息(假设表名为OrderBook)。客户登录时,把客户姓名、客户电)。客户登录时,把客户姓名、客户电话号码和登录时间保存下来,以便查询使用。在网上书城中,客户在订话号码和登录时间保存下来,以便查询使用。在网上书城中,客户在订购某本书时,应把这本书的相关信息及客户姓名、客户电话号码和登录购某本书时,应把这本书的相关信息及客户姓名、客户电话号码和登录时间作为一条记录添加到表时间作为一条记录添加到表OrderBook中。当查看购物车时,应根据客中
300、。当查看购物车时,应根据客户姓名和登录时间从表户姓名和登录时间从表OrderBook中查询出符合条件的记录即为本次购中查询出符合条件的记录即为本次购书情况,可使用书情况,可使用SQL语言的语言的SELECT语句来实现。要在购物车中删除某语句来实现。要在购物车中删除某本不需要的书,只需在表本不需要的书,只需在表OrderBook中删除相应记录即可。中删除相应记录即可。 2功能模块功能模块 根据网上书城功能说明,可分成根据网上书城功能说明,可分成7个模块个模块: (1)Index.asp:网上书城登录网页。:网上书城登录网页。(2)ShoppingFrame.asp:网上书城框架网页,上部显示书名
301、列表,:网上书城框架网页,上部显示书名列表,下部显示下部显示“网上书城网上书城”和和“购物车购物车”超链接。超链接。(3)BookList.asp:显示在网上书城框架网页的上部,用来显示待售图:显示在网上书城框架网页的上部,用来显示待售图书信息,允许用户输入书籍数量并订购。书信息,允许用户输入书籍数量并订购。(4)Select.asp:显示在网上书城框架网页的下部,显示:显示在网上书城框架网页的下部,显示“网上书城网上书城”和和“购物车购物车”超链接,供用户选择。超链接,供用户选择。(5)AddToOrder.asp:添加到购物车网页,对用户订购信息进行处理,:添加到购物车网页,对用户订购信息
302、进行处理,并把用户订购的图书作为一条新记录添加到并把用户订购的图书作为一条新记录添加到OrderBook表中。表中。(6)ShoppingCar.asp:购物车网页,用来显示用户已购书籍情况,并:购物车网页,用来显示用户已购书籍情况,并提供删除超链接供用户删除不需要的书籍。提供删除超链接供用户删除不需要的书籍。(7)DelFromCar.asp:从购物车删除指定书籍的网页。:从购物车删除指定书籍的网页。12.5.3 网上书城的实现网上书城的实现1数据库设计数据库设计使用使用SQL Server企业管理器创建一个名为企业管理器创建一个名为BookShop的数据库,为该的数据库,为该数据库创建两个表:数据库创建两个表:Store和和OrderBook。表。表Store用来存放待售图书信用来存放待售图书信息,表息,表OrderBook用来存放客户订购图书信息。用来存放客户订购图书信息。 12.5.3 网上书城的实现网上书城的实现2代码设计代码设计参见实例程序代码。参见实例程序代码。