Visual Basic快速入门 ADO数据控件与数据绑定控件 VB数据库编程举例 VB开发数据库应用系统实例分析
17.1 Visual Basic快速入门 Visual Basic集成式开发环境 对象、属性和方法 控件 事件驱动的程序设计 界面设计(窗体、菜单与工具栏) 工程资源管理器 VB设计程序的一般步骤 Visual Basic语言简介
17.1.1 Visual Basic集成式开发环境 菜单栏 工具栏 工具箱 窗体设计器 工程资源管理器 属性窗口 窗体布局窗口 立即窗口
工具箱 菜单栏 工具栏 工程资源管理器 属性窗口 窗体设计器 立即窗口 窗体布局窗口
VB6.0集成环境--菜单栏 文件:包含了与访问文件有关的菜单项。主要功能有新建工程、打开工程、保存工程、生成工程等。 编辑:包含了与编辑代码、控件等有关的菜单项。 视图:包含了显示或隐藏Visual Basic6.0的各种窗口的菜单项,如代码窗口、对象窗口、属性窗口、工具栏等。 工程:包含了与工程管理有关的菜单项。如向工程添加窗体、模块,以及从工程中移除部件等。 格式:包含了编辑用户界面时调整控件的菜单项。如对齐控件、统一大小、锁定控件等。 调试:包含了常用的调试应用程序的菜单项。 运行:包含了启动、中断、暂停应用程序的菜单项。 查询:包含了操作数据库表时的查询及其他数据访问命令的菜单项。 图表:包含了相关的图表处理菜单项。 工具:包含了向模块和窗体添加过程、过程属性,向窗体添加菜单及设置Visual Basic6.0集成开发环境等菜单项。 外接程序:包含了与操作和管理外接程序相关的菜单项。如为工程增加和删除外接程序等。 窗口:包含了与屏幕布局窗口相关的菜单项。 帮助:提供相关的帮助信息。
VB6.0集成环境--工具栏
VB6.0集成环境--工具箱 用户可以利用这些工具在窗体上设计各种控件。 可以通过“工程”菜单栏的“部件”菜单项加入扩充控件(Active X控件)。
VB6.0集成环境--窗体设计器 窗体设计器在设计Visual Basic6.0应用程序的过程中,界面设计是最基本的工作。 窗体是设计应用程序的界面的地方。每个窗体设计器窗口只容纳一个窗体。在开发应用程序时可以使用多个窗体,窗体窗口也就有多个。 每一个窗体都有与其他窗体不同的名字,系统默认窗体名称依为Form1、Form2、Form3…… 对于每个窗体,窗体设计器显示两个窗口: 对象窗口(用户接口元素,包括窗体和控件) 代码窗口(程序代码)
对象窗口
代码窗口
VB6.0集成环境--工程资源管理器窗口 工程是指建立一个VB应用程序时所包含的文件的集合。 工程资源管理器窗口可以对当前使用的工程进行管理,可以添加、删除各个组成部分,可以快捷地在代码和界面之间进行切换,对整个工程进行宏观的控制。
VB6.0集成环境--属性窗口 属性窗口:在进行界面设计时,窗体和控件的标题、大小字体等特征是由它的属性所决定的,所有窗体和控件都要进行属性设置。 可以通过属性窗口来进行属性设置。 属性窗口主要由四个部分组成。
对象列表框:包含了所选窗体的对象列表,用户可以单击对象列表框右边的箭头,查看并选择对象。 属性排列显示方式:有两个选项卡,用户可以选择“按字母序”和“按分类序”两种方式排列显示属性。 属性列表框:列出所选对象可以设置的属性及其默认值。不同的对象,所列出的属性不同。属性列表框分为左右两列,左边是各种属性的名称,右边是相应的属性值。用户可以在左边选择某种属性,在右边设置或修改属性值。 属性含义说明:当在属性列表框中选择某种属性时,在属性含义说明框中显示所选属性的含义。
VB6.0集成环境--窗体布局窗口 窗体布局窗口用于指定程序运行时的初始位置,主要使所开发的应用程序能在各种不同分辨率的显示器上使用,在多窗体应用程序中较有用。 在窗体布局窗口中,可以使用拖动鼠标的方法更改单个或多个窗体的位置,同时观察多个窗体的相对布局。
VB6.0集成环境--立即窗口 立即(Immediate)窗口是辅助差错窗口。
17.1.2 对象、属性和方法 面向对象的程序设计 对象 属性 方法
1. 面向对象的程序设计 面向对象(Object)的程序设计方法把系统中的所有资源(数据、模块以及系统)都看成对象。 对象是一个功能和数据独立的单元,它有其自身的属性和方法。 一般来说属性描述对象的性质;而方法说明对象的动作。
2. 对象 Visual Basic是一种面向对象的程序设计语言。将数据和处理该数据的过程(函数和子程序)打包在一起而生成的新的数据类型称之为对象。在Visual Basic中,窗体、菜单和控件都是对象。 窗体是Visual Basic应用程序中的顶层对象,每个应用程序都是从窗体开始设计的。窗体用来定制应用程序的界面,构成用户接口的所有控件的容器。 控件是由系统预先定义好的,在程序中可以直接使用的一类对象,是用户对象的图形表示。控件的类型主要包括命令按钮控件、文本框控件、列表框控件、组合框控件、滚动条控件、公共对话框控件等。
3. 属性 若把Visual Basic中的对象看作名词,那么属性便是它的形容词。 属性可看作对象的静态特性。程序运行时,通过对这些属性的改变,使对象的状态发生变化。 所有Visual Basic6.0程序中的对象都有许多属性,它们是用来描述和反映对象特性的参数。 例如,文本框的属性包括BackColor、ForeColor、Enabled、Height、Width、Left、Top,Name等属性。 要更改一个对象的属性,可以修改属性的值。
属性的设置 在属性窗口直接设置。 在程序代码中通过赋值实现,格式如下: 在Visual Basic6.0中,对象属性的设置有两种方法: [对象名.]属性=属性值 当对象是当前窗体时,对象名可省略。 例如:Form1.Backcolor=&H000000FF 表示窗体对象Form1的背景色属性值为&H000000FF,即红色。
4. 方法 对象的动作和行为称为对象的方法。 方法就像动词。 例如,对窗体的显示或隐藏就是窗体对象的方法。 例:显示窗体语句 Form1.show show是显示窗体Form1是方法。 VB中对象的方法以程序代码形式在代码窗口给出。
17.1.3 控件 控件分类 内部控件 Active X控件 可插入的对象控件
1. 控件分类 VB6.0中的控件通常分为三类: 内部控件:在默认状态下,工具箱中的控件都是内部控件。注意:有的控件没有图形表示,如时钟(Timer)控件。 Active X控件:可以是Visual Basic6.0提供的控件,也可以是由其他软件供应商提供的控件。使用这类控件需要将控件添加到工具箱中。 可插入的对象:用户可将Excel工作表或者PowerPoint幻灯片等作为一个对象添加到工具箱中,可根据需要添加到窗体中。
2. 内部控件
3. Active X控件 将Active X控件添加到工具箱中
新添的Active X控件
4. 可插入的对象控件 将可插入的对象控件添加到工具箱中
新添的幻灯片对象控件
17.1.4 事件驱动的程序设计 事件的概念 VB中的对象、事件与事件过程 编写对象代码的具体操作步骤 事件过程语法结构
1.事件的概念 事件是由用户或系统触发,可以由对象识别的操作。如用户对对象(窗体、菜单或控件等)的鼠标的单击操作,就是Click事件。另外,关闭窗口操作也是一个事件。 在事件驱动的应用程序中,代码在响应不同的事件时执行的不同代码片段。因此,编程人员只需对每一个对象的特定事件编写相应的代码即可。
2.VB中的对象、事件与事件过程 转到事件过程编码窗口 “确定”按钮的对象名称 “确定”按钮(控件)对象
对象名 事件名 事件过程代码
3.编写对象事件过程代码 编写对象代码的具体操作步骤: 双击要编写代码的对象,打开代码编辑器。 从对象列表框中选取要编写代码的对象,从过程列表框中选取事件,系统将自动产生过程模板。 在过程模板中填写处理事件的过程代码。 代码的编写要遵循如下规则: 字母不区分大小写。Visual Basic6.0对代码会自动进行相应的转换:Visual Basic6.0的关键字,转换为首字母大写,其余小写;对用户自定义字符,转换为第一次定义的形式。 注释以Rem开头,或用“ ’ ”(一个单引号)引导。
4. 事件过程的语法结构 事件过程的语法形式如下: Private Sub 对象名_事件() 处理事件的代码 End Sub 例如,设计按钮对象Command1的单击鼠标事件为退出程序,则相应的事件过程程序代码为: Private Sub Command1_Click() END
17.1.5 用户界面设计 用户界面是应用程序与用户的接口。 在Visual Basic中,应用程序的用户界面主要由窗体、控件、菜单及工具栏组成。 窗体设计 菜单设计 工具栏设计(略)
1.窗体设计 窗体是用户界面的容器,窗体对象中又可包含控件、菜单及工具栏等对象。 一个VB应用程序可以包含多个窗体,其中一个被设置为程序的启动窗体。 对于窗体,不用写任何代码,就可以对一些事件做出响应。 窗体的事件说明了用户或系统对窗体的操作。 在Visual Basic6.0中,窗体的事件有31种。
常用窗体事件有:
窗体设计与操作举例 通过一个实例来演示对窗体的操作,包括窗体的装载、显示、隐藏和卸载。 在本例中,使用了两个窗体MainForm,一个是主窗体,另一个是在主窗体中可以进行操作的窗体Form2。 该实例的界面设计见右图。
新建工程,添加一个窗体命名为MainForm
单击[工程]菜单的[工程1属性]命令,然后显示[工程属性]对话框
将窗体MainForm设置为启动窗体
在MainForm中填加四个按钮控件
单击[视图]菜单的[代码窗口],进入代码窗口
为四个按钮对象的单击事件编写相应的代码
单击[工程]菜单的[添加窗体]
添加新窗体Form2
pictureBox控件 指定图片文件路径及文件名 在Form2窗体中添加pictureBox控件,并添加一幅图片
执行程序 执行程序
停止执行 查看程序的执行结果
2.菜单设计 菜单对象和按钮控件功能相似 菜单设计是通过菜单编辑器完成的。 举例:设计菜单结构如下: 窗体操作 装载窗体 显示窗体 隐藏窗体 卸载窗体 退出系统 帮助
菜单标题与名称 标 题 名 称 窗体操作 User_option 装载窗体 LoadForm2 显示窗体 ShowForm2 隐藏窗体 HideForm2 卸载窗体 UnloadForm2 退出系统 User_Exit 帮助 User_Help
单击[工具]菜单的[采单编辑器]
编辑菜单选项
建立菜单结构
查看新建的菜单
为指定的菜单选项(对象)编写单击(Click)事件的过程代码
执行程序并显示结果
17.1.6 工程资源管理器 工程是指建立一个应用程序时所包含的文件的集合,包括窗体文件、模块文件以及可以由Visual Basic6.0应用程序使用的任何类型的文件。 工程资源管理器显示当前所打开的工程的信息状态和文件内容。若打开的是一个工程组,则将显示整个工程组的所有工程信息。 可通过视图菜单中的“工程资源管理器”菜单项来打开或关闭工程资源管理器窗口。
1.工程资源管理器的组成 工程资源管理器窗口如图所示:
工程资源管理器由三部分组成: 标题栏:位于该窗口的最顶端,显示工程的名称。 工具栏:工具栏上有三个按钮,功能分别如下: 查看代码:查看与当前选定的对象相关的代码。 查看对象:在窗体窗口显示选定的对象外观。 切换文件夹:切换文件夹显示的方式。 列表窗口:列出了当前工程中包含的所有文件。工程资源管理器采用类似于windows的资源管理器的树形文件结构图来显示工程中的资源。
2.工程文件类型 工程所包含的文件类型为: 工程文件(.vbp):存储所有对象。 窗体文件(.frm):存储有关窗体的信息。 二进制数据文件(.frx):每个窗体都有一个相应的二进制数据文件,它包含窗体上控件的属性数据。 模块文件(.bas):每个标准模块的一个文件,该文件是可选项。 类模块文件(.cls):每个类模块的一个文件,该文件是可选项。 Active X控件文件(.ocx):包含Active X控件的文件,该文件是可选项。 资源文件(.res):包含无须重新编辑代码便可以改变的位图、字符串和其他数据,该文件是可选项。
3.工程资源管理器的使用 一般情况下,工程资源管理器主要进行与工程相关的任务,而不进行工程文件的编辑工作。 在工程资源管理器中所能进行的工程管理操作主要有: 查看对象:单击该对象,单击工具栏上的“查看对象”按钮,包含该对象的窗体窗口将出现在屏幕上。 查看代码:单击该对象,单击工具栏上的“查看代码”按钮,与该对象相关的代码窗口将被打开。
添加对象:用鼠标指针指向工程名称,单击右键,系统会弹出一个快捷菜单。在该菜单上选择“添加”选项,稍侯出现二级菜单,选择所要添加的对象类型即可。 删除对象:选择要删除的对象,在要删除的对象项上单击右键,在弹出的快捷菜单中选择“删除”即可。 保存对象:当某些文件修改后,要及时保存这些文件。选择要保存的对象,在要保存的对象项上单击右键,在弹出的快捷菜单中选择“保存”或“另存为”即可。
17.1.7 VB程序设计的一般步骤 创建应用程序界面(添加对象)(略) 设置对象属性(略) 编写对象代码(略) 调试运行程序(略) 生成可执行文件 (打包)生成系统安装(SETUP)文件
生成可执行文件(脱离VB集成环境)
生成的可执行程序文件
双击执行程序
2.(打包)生成应用系统安装文件
17.1.8 Visual Basic语言简介 Const 常量名 [As 常量类型]=常量值 Dim 数组名(长度) As 数组类型 变量 子程序(过程Sub与函数Function)(略) 基本语句 数据的输入与输出
1.变量 变量是用于在程序执行期间保存数据的。 变量类型(略) 变量的范围 过程变量(局部变量) 窗体变量(在一个窗体范围内有效) 公共变量Public(在整个应用程序中有效)
变量的声明 VB中虽然不强制要求声明变量,但声明变量可提高程序的可读性、方便修改,有利于差错、生成优化代码。 声明变量的格式为: Dim 变量名 As 数据类型 例:Dim V As Integer 在声明变量时也可以不指明变量的类型 Dim 变量名 例:Dim V
2.常量与数组 Const 常量名 [As 常量类型]=常量值 Dim 数组名(长度) As 数组类型 声明常量 Const 常量名 [As 常量类型]=常量值 例如: Const Pai=3.14 声明数组 Dim 数组名(长度) As 数组类型 Dim a(10) As Integer
3.基本语句 赋值语句 选择结构流程控制语句 循环结构流程控制语句 With语句 Exit语句 注释、暂停与程序结束语句
赋值语句 格式一:变量=表达式 或 Let 变量=表达式 例:V=90 格式二:Set 变量=对象名 例:Dim a As CommandButton Set a=Command1 格式三:对象.属性=属性值 例:btnShow.caption=“显示Form2”
选择结构流程控制语句 选择结构是一种常用的基本结构,其特点是根据所给定的选择条件为真或假,来决定从不同操作中选择执行一种操作。VB提供三类选择结构控制语句: If…Then…End If If…Then…Else Select Case…End Select
循环结构流程控制语句 在程序中,凡是需要重复相同或相似的操作步骤,都可以使用循环结构来实现。 VB提供了三种不同风格的循环结构,分别是: 计数循环(For—Next循环) 当循环(While—Wend循环) Do循环(Do—Loop循环) 其中计数循环常用于已知循环次数的循环,而当循环和Do循环适合于循环次数未知,只知道循环结束条件的循环。
With 语句 With语句用于对某个对象执行一系列的操作,而不用重复指出对象的名称。 With Object [statements] End With Object指一个对象或用户自定义类型的名称。statements是要执行在Object(对象)上的一条或多条语句。
例:使用With语句来给标签控件MyLabel的几个属性赋值。 With MyLabel. Height = 2000 例:使用With语句来给标签控件MyLabel的几个属性赋值。 With MyLabel .Height = 2000 .Width = 2000 .Caption = “This is MyLabel” End With
Exit语句 Exit Do:用于退出Do…Loop循环,并且只能在Do…Loop循环中使用。 Exit For:用于退出For循环,并且只能在For…Next或For Each…Next循环中使用。 Exit Function:用于从包含该语句的Function过程中退出。 Exit Sub:用于从包含该语句的Sub过程中退出。
注释、暂停与程序结束语句 注释语句:VB中的注释语句以一个撇号(‘)或REM开始 格式:' | REM <注释内容> 暂停语句:用来暂停程序的执行,其作用类似于“运行”菜单中的“中断”命令,相当于在程序代码中设置断点。 格式:STOP 结束语句:用来结束一个程序的执行。 格式:END
数据的输入与输出 数据的输入 数据的输出 输入输出程序举例 使用文本框控件输入数据 使用输入框(InputBox)函数输入数据 用Print方法输出数据 用文本框和标签控件输出数据 用消息框(MsgBox)输出数据 输入输出程序举例 文本框和标签程序设计 对话框程序设计
使用文本框控件输入数据 文本框除了可以显示文本信息以外,还可以接收用户输入的数据,所以可以使用文本框来实现数据的输入。 当在窗体上加入一个文本框控件后,程序执行时用户可以在文本框中光标的指示下输入字符,用户输入的字符通过文本框的控件Text属性返回。
使用输入框(InputBox)函数输入数据 InputBox(<提示信息>[,<对话框标题>][,<默认值>][,<X>][,<Y>]) 该函数的功能是产生一个对话框,作为输入数据的界面,等待用户输入并返回所输入的内容。
参 数 说 明 InputBox函数的参数 提示信息 字符串表达式,在对话框内显示提示信息,提示用户输入数据的格式、作用等。如果包含多行,可以在各行之间用回车符Chr(13)、换行符Chr(10)或回车换行符的组合Chr(13)&Chr(10)来分隔。 对话框标题 字符串表达式,显示在标题栏中作为对话框的标题。缺省为当前工程的名字。 默认值 字符串表达式,显示在对话框的文本框中,在没有其他输入时作为默认输入值使用。缺省为空。 X 数值表达式,指定对话框左边与屏幕左边的水平距离。如果省略,对话框在水平方向居中 Y 数值表达式,指定对话框上边与屏幕上边的垂直距离。如果省略,对话框在屏幕垂直方向距下边1/3的位置显示。 InputBox函数的参数
用Print方法输出数据 Print方法可以在窗体、图片框、打印机等对象上输出数据。其格式为: 其中,<对象名>可以是窗体、图片框或打印机等可以使用该方法的对象。如果省略对象,则在当前窗体上输出数据。 <表达式表>中的表达式是要输出的输出项,可以是算术表达式、字符串表达式、关系表达式或布尔表达式,多个表达式之间可以用逗号或分号隔开。
用文本框和标签控件输出数据 文本框和标签控件都可以用来显示文本信息,所以可以把要输出的数据以字符的形式在文本框或标签中显示出来。 文本框和标签在输出数据时的区别在于使用文本框输出的文本可以允许用户进行编辑,而使用标签显示的文本用户不能进行任何的编辑操作。 文本框控件的Text属性和标签控件的Caption属性分别用来表示要在其中显示的文本内容,所以,要在文本框或标签中显示文本,只需要把要显示的内容赋给它们相应的属性即可。
用消息框(MsgBox)输出数据 消息框是一类特殊的窗口。VB中提供了一个函数MsgBox,专门用来产生消息框,它可以向用户传送信息,并可以通过用户在对话框上的选择识别用户所作的响应,作为程序继续执行的依据。使用MsgBox函数,可以快速的得到各类对话框。 MsgBox函数格式: MsgBox(<提示信息>[,<按钮类型>] [,<对话框标题>] 功能:产生一个对话框,在对话框中显示消息,等待用户单击按钮,并返回一个整数确定用户单击了哪个按钮。
该函数的参数含义说明如下: (1) <提示信息>:字符串表达式,该字符串的内容将在由MesgBox函数产生的对话框上显示,作为系统提示信息。当字符串在一行内显示不下时,将自动换行,也可以用“Chr$(13)+Chr$(10)”强制换行。 (2) <按钮类型>:该参数由四类数值组成,其组成原则是:从每一类中选择一个值,把这几个值加在一起就是该参数的值。不同的组合会得到不同的结果。
分类 按钮值 系统符号常量 含义 “按钮类型”的设置值及含义 按钮类型 VbOKOnly 只显示“确定”按钮 1 VbOKCancel VbOKOnly 只显示“确定”按钮 1 VbOKCancel 显示“确定”及“取消”按钮 2 VbAbortRetrylgnore 显示“终止”、“重试”和“忽略”按钮 3 VbYesNoCancel 显示“是”、“否”和“取消”按钮 4 VbYesNo 显示“是”、“否”按钮 5 VbRetryCancel 显示“重试”、“取消”按钮 图标类型 16 VbCritical 显示Critical Message图标x 32 VbQuestion 显示Warning Query图标? 48 VbExclamation 显示Warning Message图标! 64 VbInformation 显示Information Message图标i 默认按钮 VbDefaultButton1 第一个按钮是默认值 256 VbDefaultButton2 第二个按钮是默认值 512 VbDefaultButton3 第三个按钮是默认值 768 VbDefaultButton4 第四个按钮是默认值 强制返 回类型 VbApplication 应用程序强制返回:应用程序一直被挂起,直到用户对消息框做出响应才继续工作 “按钮类型”的设置值及含义
(3)<对话框标题>:字符串,显示在对话框的标题栏中作为标题。 (4)MsgBox函数的返回值是一个整数,这个整数与所选择的命令按钮有关,可以通过返回的这个整数的数值确定用户在对话框中单击的是哪个按钮,即用户在对话框中作出了什么响应。 返回值 按下的按钮 系统符号变量 1 确定 VkOk 2 取消 VbCancael 3 终止 VbAbort 4 重试 VbRetry 5 忽略 Vblgnore 6 是 VbYes 7 否 VbNo MsgBox函数的返回值
(5)MsgBox函数也可以写成语句形式,即: 其中各参数的含义及作用与MsgBox函数相同。
文本框和标签程序设计 【例】设计一个简单的加法运算器,由用户从键盘上输入两个加数,然后求它们的和并将结果显示出来。 程序中用到的对象及其属性 属性值 作用 窗体 Caption 加法运算 标签1 加数1 说明文本框1的作用 标签2 加数2 说明文本框2的作用 标签3 + 显示“+”号 标签4 = 显示“=”号 文本框1 Text 空 接收加数1 文本框2 接收加数2 文本框3 显示结果 Locked True 命令按钮1 清除 命令按钮2 运算 命令按钮3 退出
Private Sub Command2_Click() op1 = Val(Text1.Text) “运算”按钮的事件过程: Private Sub Command2_Click() op1 = Val(Text1.Text) op2 = Val(Text2.Text) Sum = op1 + op2 Text3.Text = Str(Sum) End Sub 文本框只能接收字符型数据,为了能够进行加法运算,首先要将用户在文本框1和文本框2中输入的字符通过Val()函数转换为数值型数据,然后分别赋给变量op1和op2,op1和op2相加之后的结果赋给变量Sum。再按文本框的使用要求用Str()函数把Sum转换成字符型数据,赋给文本框3的Text属性,以在文本框3中显示出来。 “清除”按钮的事件过程: Private Sub Command1_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" Text1.SetFocus '将光标定位到Text1 该按钮的作用是清除3个文本框中的原有信息,使其显示的内容为空白,并将光标自动定位到第1个文本框内,以便进行下次输入。
对话框程序设计 【例】利用输入对话框输入一个学生的姓名和电话,然后以消息框的形式给出提示,最后显示在窗体上。 代码如下: Private Sub Form_Load() n = InputBox("请输入姓名:", "姓名") s = InputBox("请输入电话", "电话") str1 = "你的输入为" & n & "和" & s MsgBox str1 Label1.Caption = "姓名:" & n Label2.Caption = "电话:" & s End Sub 程序执行后,首先要求用户输入姓名,输入姓名后赋给变量n,随后出现同样的要求输入电话的输入框,并把输入的值赋给变量s。输入结束系统会通过MsgBox函数产生消息框。
17.2 ADO数据控件与数据绑定控件 ADO数据控件是使用ADO数据对象来快速建立应用程序和数据源之间的连接,并快速创建数据访问结果记录集的工具。 由于ADO数据控件不具有显示数据的功能,因此要将数据操作结果在用户界面上显示出来,就要靠数据绑定控件来实现。
17.2.1 ADO数据控件 在VB的工具箱中添加ADO数据控件 ADODC对象的属性 ConnectionString属性 (用于连接数据源) Command属性 RecordSource属性 CommandType属性 RecordSet对象的主要属性和方法 RecordSet对象的属性 Fields对象的属性 RecordSet对象的方法 ADODC对象的方法 ADODC对象的事件
1.在VB的工具箱中添加ADO数据控件
ADODC在窗体中的样式 ADO数据控件(ADODC)
2.ADODC对象的主要属性 ConnectionString属性 (用于连接数据源) Command属性 Recordset属性 RecordSource属性 CommandType属性 Recordset属性
ConnectionString属性设置 使用ODBC数据资源名称 建立ODBC数据源时使用 使用连接字符串 未建立ODBC数据源时使用
使用ODBC数据资源名称
使用连接字符串
RecordSource属性 此属性用于设置ADO结果集的内容,这个内容可以来自于一张表,也可以来自一个查询语句,也可以来自一个存储过程的执行结果。 RecordSource属性的值与CommandType属性的值有关,两者协同使用。
CommandType属性 此属性指明命令的类型,即要访问的数据的来源。一般这个属性和RecordSource(记录源)属性配合使用。 adCmdUnknown:默认值。表示RecordSource中的命令类型未知。 adCmdTable:RecordSource属性的内容是一个表名,表示其结果集是对此表执行的无条件查询的结果。 adCmdText:RecordSource属性的内容是一个查询语句文本串,表示其结果集是执行此查询语句文本串产生的结果。 adCmdStoredProc:RecordSource属性的内容是一个存储过程名,表示其结果集是执行此存储过程产生的结果。 设置CommandType属性的方法参见设置RecordSource部分。
CommandType属性设置步骤
RecordSet对象的主要属性和方法 Recordset属性也称为结果集或记录集,用于存放从数据提供者那里获得的查询结果,这个结果一般存放在客户端内存中,可以理解为是客户端的游标。 每个结果集有一个当前行指针,指向正在操作的记录。 在VB数据库应用程序中,一般不直接对数据库中的数据进行操作,而是通过结果集进行的。因此,结果集是VB应用程序和数据库之间相互连接的桥梁。 对数据库中的数据操作主要是通过RecordSet对象完成的。 Recordset属性是ADO数据控件中实现数据记录操作的最重要的属性,这个属性本身又是一个对象,也有自己的属性和方法,它直接指向ADO对象模型中的Recordset对象。
RecordSet对象的主要属性 BOF:布尔值,如果结果集中记录的当前行指针移到了第一条记录的前边,则此值为真,否则为假。 EOF:布尔值,如果结果集中记录的当前行指针移到了最后一条记录的后边,则此值为真,否则为假。 RecordCount:存放结果集中的记录个数。 Sort:将结果集中的记录按某个字段排序。 AbsolutePosition:记录当前行记录在结果集中的顺序号,结果集记录序号从1开始。 Bookmark:结果集中当前行记录的标识号。 Fields:结果集中的字段集合。由于一行记录可以包含多个字段,因此Fields属性是一个数组形式,数组中的每个元素代表一个字段。
Fields对象属性 Fields属性本身也是一个对象,它直接指向ADO对象模型中的Fields对象。Fields对象用下述属性来描述结果集字段的信息: Fields.Name:字段名称。 Fields.Value:字段的值。 Fields.OrdinalPosition:字段在Fields集合中的顺序。 Fields.Type:字段的数据类型。 Fields.Size:字段的最大字节数。 Fields.SourceTable:字段来自的表。 Fields.SourceField:字段来自的表中的列。
RecordSet对象的主要方法 RecordSet对象的方法是实现结果集操作的关键。 Move方法组 AddNew方法 Update方法 Delete方法 CancelUpdate方法 Find方法
Move方法组 Move方法组就是实现在结果集中通过移动记录行指针而浏览数据的方法。 Move方法组中又包括四个相应的移动指针的方法。 MoveFirst方法:将当前行记录指针移到结果集中的第一行。 MovePrevious方法:将当前行记录指针向前移动一行。 MoveNext方法:将当前行记录指针向后移动一行。 MoveLast方法:将当前行记录指针移到结果集中的最后一行。
AddNew方法 AddNew方法用于在结果集中添加一个新记录。 注意,当使用AddNew方法时,实际上只是在内存中开辟了一个新记录的缓冲区,缓冲区中的初始值均为空,新输入的记录被保存在这个缓冲区中。要使缓冲区中新输入的记录永久地保存到数据库中,还必须使用Update方法,或者对当前行记录指针作一个移动操作。
Update方法 Update方法将新记录缓冲区中的记录或者对当前记录的修改真正写到数据库中,使新添加的记录或修改后的结果被永久保存在数据库中。
Delete方法 Delete方法删除结果集中当前行记录指针所指的记录,并且这个删除是直接对数据库数据操作的,删除后的数据不可恢复。 因此,在使用此方法删除数据前,最好提示用户是否真的要删除数据,以避免由于误操作而造成数据丢失。
CancelUpdate方法 CancelUpdate方法用于取消新添加的记录或对当前记录所做的修改。 注意,此方法应在调用Update方法之前调用,调用了Update方法之后的修改是不能撤销的。 另外需要注意的是,如果没有添加新记录,也没有对当前记录进行任何修改,则调用CancelUpdate方法将产出错误。
Find方法 Find方法用于在当前结果集中查找满足条件的记录。 如果结果集较大,则可以使用此方法在结果集快速定位找到满足要求的记录。 ADODC控件名.Recordset. Find(“查找条件表达式”) “查找条件表达式”中可以包含比较运算符、逻辑运算符和Like查找符。例如:查找年龄在20到25之间的学生: Find(“Sage >= 20 AND Sage <= 25”)
3.ADODC对象的主要方法 ADODC控件最常用的是Refresh方法。 Refresh方法用于更新ADODC控件属性,使修改后的ADO数据控件属性生效。 当修改了ADODC控件的ConnectionString属性的值时,使用Refresh方法会重新连接一次数据库; 当修改了ADODC控件的RecordSource属性的值时,使用Refresh方法会重新执行RecordSource属性的内容,重新产生结果集。 使用Refresh方法的格式为: ADODC控件名.Refresh
4.ADODC对象的主要事件 EndOfRecordset事件:当在结果集中移动记录指针时,当记录指针超出了结果集的最后一条记录时,触发此事件。 Error事件:只有在没有执行任何VB代码而发生了一个数据访问错误时,才会触发此事件。 WillChangeField事件和FieldChangeComplete事件:当对结果集中的一个或多个字段值进行修改前,触发WillChangeField事件;当对结果集中的一个或多个字段值修改之后,触发FieldChangeComplete事件。 WillChangeRecord事件和RecordChangeComplete事件:当对结果集中的一个或多个记录进行修改前,触发WillChangeRecord事件;当对结果集中的一个或多个记录修改之后,触发RecordChangeComplete事件。 WillMove事件和MoveComplete事件:在结果集的当前行记录指针移动之前,触发WillMove事件;在结果集的当前行记录指针移动完成后,触发MoveComplete事件。
17.2.2 数据绑定控件 数据绑定控件概念 数据绑定控件分类 数据绑定控件的主要属性 DataGrid控件
1. 数据绑定控件概念 数据绑定实际上就是将结果集中的数据同应用程序界面中的控件联系起来,通过这些界面上的控件将结果集中的数据显示给用户。能够实现将结果集中的数据显示出来的功能的控件就称为数据绑定控件。 数据绑定控件不但可以实现将结果集中的数据显示出来,而且用户还可以通过这些控件实现对数据库数据的增、删、改操作。
2.数据绑定控件分类 常用的有:TextBox、CheckBox、ListBox、ComboBox等 。 标准控件 常用的有:TextBox、CheckBox、ListBox、ComboBox等 。 这些控件只用于显示结果集中的一个列的值,因此,除了需要设置这些控件的DataSource属性,还需要设置这些控件的DataField属性,以确定绑定到结果集中的哪个列。 Active X控件 主要有: DataGrid 、DataList、 DataCombo 、MSHFGrid、Microsoft Chart等 。
3.数据绑定控件的主要属性 数据绑定控件主要通过两个属性来实现数据绑定,这两个属性是:DataSource和DataField属性。 DataSource属性用于指定要绑定的数据源,一般其值为ADO数据控件的名称。一个数据绑定控件在一个时刻只能连接一个数据源。 DataField属性用于指定控件要显示的结果集中的字段,其值为结果集中的列名。一个控件在一个时刻只能绑定到一个字段。
4.DataGrid控件 添加DataGrid控件到工具箱中 DataGrid控件应用举例
添加DataGrid控件到工具箱中
DataGrid控件
DataGrid控件应用举例 假设在窗体Form1中已设置好了一个ADO数据控件(名字为Adodc1),并且连接的数据源为 “学生管理” 中的“Student”表。 在窗体Form1添加一DataGrid控件(名字为DataGrid1),其DataSource属性设置为Adodc1。 执行程序显示结果为Student表。
在Form1中添加DataGrid1控件 DataGrid1控件绑定Adodc1控件
执行结果
17.3 VB数据库编程举例 本节结合 “学生管理数据库”以及其中的三张表,利用数据访问接口技术和ADO数据控件以及数据绑定控件,介绍在Visual Basic中开发数据库应用程序的过程。
17.3.1 示例1 本示例说明如何利用ADO数据控件实现对Student表中全部数据的浏览,以及如何实现按用户指定的系查找相应学生信息的功能。数据浏览方式采用单行浏览方式,即一次查看一条记录。 通过本示例我们可以看到,设置好ADO数据控件的属性后,用户不需要编制任何代码就可以实现对数据的查询。如果查找条件变化了,用户只需要编写很少的代码就可以实现对数据源的重新查询。
示例1窗体布局
其中“学号”、“姓名”、“性别”、“年龄”、“所在系”及“查找系”用标签控件(Label)实现。 对Student表中的各列数据用文本框控件(TextBox)实现,界面上各文本框控件内显示的内容为此文本框的对象名。 ADO数据控件对象名AdodcStudent。 “查找”命令按钮的对象名为“cmdSearch”,“退出”命令按钮的对象名为“cmdExit”。
示例1控件的属性设置 对象名 属性名 属性值 AdodcStudent ConnectionString 连接到SQL Server的“学生管理”数据库 CommandType adCmdTable RecordSource Student TxtSno DataSource DataField Sno TxtSname Sname TxtSsex Ssex TxtSage Sage TxtSdept Sdept
示例1程序代码 “退出”按钮单击(Click)鼠标事件程序代码 “查找”按钮单击(Click)鼠标事件程序代码 窗体加载(Load事件)时初始化程序代码
“退出”按钮单击(Click)鼠标事件程序代码 Private Sub CmdExit_Click() ' "退出"按钮 End End Sub
“查找”按钮单击(Click)鼠标事件程序代码 Private Sub CmdSearch_Click() ' "查找"按钮 If Len(TxtSearchDept.Text) > 0 Then '如果用户指定了系名 AdodcStudent.CommandType = adCmdText AdodcStudent.RecordSource = “ select * from student where Sdept = ‘ “ & Trim(TxtSearchDept.Text) & “ ‘ “ AdodcStudent.Refresh ' 使所设置的属性生效 Else ' 若用户未指定列名 MsgBox (“请指定要查找的系”) ' 则提示用户输入系名 End If End Sub
窗体加载(Load事件)时初始化程序代码 Private Sub Form_Load() '窗体加载时初始化查找系的内容 '初始化要查找的系为空 TxtSearchDept.Text = "" End Sub
示例1实现过程展示 设置控件和属性
编写程序代码
执行程序观察结果
观察查找前后的结果
17.3.2 示例2 示例2在示例1的基础上增加了两组供用户操作的按钮。 一组是为了说明如何实现数据更改操作,即如何使用Recordset对象的AddNew、Update、Delete和CancelUpdate方法; 另一组是为了说明如何编程控制结果集中浏览记录的移动,即如何使用Recordset对象的Move方法组。 在这个示例中我们不使用ADO数据库控件移动记录,而是使用四个命令按钮实现此功能,因此在运行时将ADO数据控件隐藏起来。
示例2窗体布局
新增各命令按钮控件的对象名分别为: “添加”命令按钮:cmdAdd “删除”命令按钮:cmdDel “更新”命令按钮:cmdUpdate “取消”命令按钮:cmdCancel “第一条”命令按钮:cmdFirst “上一条”命令按钮:cmdPrevious “下一条”命令按钮:cmdNext “末一条”命令按钮:cmdLast “退出”命令按钮:cmdExit
示例2控件的属性设置 示例2窗体上的ADO数据控件以及各文本框控件的属性设置同示例1。 为了在运行时隐藏ADO数据控件,我们将AdodcStudent的Visible属性设置为:False。
示例2程序代码 窗体启动时的初始化代码 数据操作按钮组代码 移动指针方法组代码 结束程序代码 “添加”命令按钮 “取消”命令按钮 “删除”命令按钮 “更新”命令按钮 移动指针方法组代码 “第一条”命令按钮 “末一条”命令按钮 “下一条”命令按钮 “上一条”命令按钮 结束程序代码
窗体启动时的初始化代码 Private Sub Form_Load() '初始时使“取消”按钮为不可用状态 CmdCancel.Enabled = False End Sub
“添加”命令按钮 Private Sub CmdAdd_Click() ' “添加”命令按钮 AdodcStudent.Recordset.AddNew '使“添加”和“删除”按钮为不可用状态 CmdAdd.Enabled = False CmdDel.Enabled = False '使“更改”和“取消”按钮为可用状态 CmdUpdate.Enabled = True CmdCancel.Enabled = True End Sub
“取消”命令按钮 Private Sub CmdCancel_Click() ' “取消”命令按钮 AdodcStudent.Recordset.CancelUpdate '使“添加”和“删除”按钮为可用状态 CmdAdd.Enabled = True CmdDel.Enabled = True '使“取消”按钮为不可用状态 CmdCancel.Enabled = False End Sub
“删除”命令按钮 Private Sub CmdDel_Click() ' “删除”命令按钮 Dim res As Integer res = MsgBox("确实要删除此行记录吗?", _ vbExclamation + vbYesNo + vbDefaultButton2) '提示用户 If res = vbYes Then '如果确实要删除 AdodcStudent.Recordset.Delete AdodcStudent.Recordset.MoveNext If AdodcStudent.Recordset.EOF = True Then AdodcStudent.Recordset.MoveLast End If End Sub
“更新”命令按钮 Private Sub CmdUpdate_Click() ' “更新”命令按钮 '将文本框中的当前值写入结果集相应字段中 AdodcStudent.Recordset.Fields("Sno") = Trim(TxtSno.Text) AdodcStudent.Recordset.Fields("Sname") = Trim(TxtSname.Text) AdodcStudent.Recordset.Fields("Ssex") = Trim(TxtSsex.Text) AdodcStudent.Recordset.Fields("Sage") = CInt(Trim(TxtSage.Text)) AdodcStudent.Recordset.Fields("Sdept") = Trim(TxtSdept.Text) AdodcStudent.Recordset.Update '使更新生效 '使“添加”和“删除”按钮为可用状态 CmdAdd.Enabled = True CmdDel.Enabled = True CmdCancel.Enabled = False '使“取消”按钮为不可用状态 End Sub
“第一条”命令按钮 ' “第一条”命令按钮 Private Sub CmdFirst_Click() AdodcStudent.Recordset.MoveFirst End Sub
“末一条”命令按钮 ' “末一条”命令按钮 Private Sub CmdLast_Click() AdodcStudent.Recordset.MoveLast End Sub
“下一条”命令按钮 ' “下一条”命令按钮 Private Sub CmdNext_Click() AdodcStudent.Recordset.MoveNext If AdodcStudent.Recordset.EOF = True Then '如果已经移到了最后一行之后,则将指针定位在最后一行 AdodcStudent.Recordset.MoveLast End If End Sub
“上一条”命令按钮 ' “上一条”命令按钮 Private Sub CmdPrevious_Click() AdodcStudent.Recordset.MovePrevious If AdodcStudent.Recordset.BOF = True Then '如果已经移到了第一行之前,则将指针定位在第一行 AdodcStudent.Recordset.MoveFirst End If End Sub
结束程序代码 ' “退出”命令按钮 Private Sub CmdExit_Click() End End Sub
示例2实现过程展示 设置控件和属性
编写程序代码
执行程序观察结果
17.3.1 示例3 示例3说明 示例3控件的属性设置 示例3程序代码 示例3实现过程展示
17.3.1 示例3 示例3在示例1的基础上增加了一个窗体,这个窗体用DataGrid控件显示数据。 示例3中的两个窗体的布局分别图1和图2所示。 图1 Form1布局 图2 Form2布局
在图所示的Form1上,当用户单击“查找”命令按钮时,显示Form2。 Form2上DataGrid中的数据是根据Form1中当前显示的学号值去查找此学生的姓名、所修的课程名、课程的学分以及考试成绩。 在Form2上单击“返回”命令按钮(对象名为cmdReturn),可以返回到Form1,并且同时卸载Form2。
示例3控件的属性设置 Form1窗体上各控件属性的设置同示例1。 Form2窗体 DataGrid数据绑定控件的对象名为:dtgCond ADO数据控件名为:AdodcGrid ConnectionString属性的值同示例1的AdodcStudent CommandType和RecordSource属性我们在程序代码中设置。
示例3程序代码 Form1上的“查找”和“退出”命令按钮代码 Form2上的代码 Form2上的初始化dtgCond控件代码 Form2上的Load事件代码 Form2上“返回”按钮代码
Form1上的“查找”和“退出”命令按钮代码 Private Sub CmdExit_Click() ' "退出"按钮 End End Sub Private Sub CmdSearch_Click() ' "查找"按钮 Form2.Show ' 显示Form2窗体
Form2上的初始化dtgCond控件代码 Private Sub InitGrid() '初始化dtgCond控件 With DtgCond '设置DtgCond的列标题 .Columns(0).Caption = "学号" .Columns(1).Caption = "课程名" .Columns(2).Caption = "学分" .Columns(3).Caption = "成绩" '设置DtgCond的列宽 .Columns(0).Width = 1000 .Columns(1).Width = 2000 .Columns(2).Width = 800 .Columns(3).Width = 800 End With End Sub
Private Sub Form_Load() Dim strSno As String Dim strSelect As String strSno = Trim(Form1.TxtSno.Text) ' 得到Form1窗体上当前显示的学号的值 ‘ 编写满足要求的查询语句,查找学号值等于给定值的学生的姓名、 ‘ 修的课程名、 学分和成绩 strSelect = “ select Sname, Cname,Ccredit,Grade from student s join sc “ _ & “ on s.sno = sc.sno join course c on c.cno = sc.cno where “ _ & “ sc.sno = ‘ “ & strSno & “ ‘ “ '设置ADO数据控件相应的属性 AdodcGrid.CommandType = adCmdText AdodcGrid.RecordSource = strSelect AdodcGrid.Refresh '使ADO数据控件的新属性生效 '设置DataGrid控件的数据源为ADO数据控件的结果集 Set DtgCond.DataSource = AdodcGrid Call InitGrid '调用DtgCond控件的初始化过程 End Sub Form2上的Load事件代码
Form2上“返回”按钮代码 ' “返回”按钮 Private Sub CmdReturn_Click() Unload Me End Sub
示例3实现过程展示 设置Form1控件和属性
编写Form1程序代码
添加Form2控件并设置属性
编写Form2程序代码
执行程序观察结果