当前位置:首页 >> 高中教育 >>

VB数据库编程技术


第6章 VB数据库编程技术
6.1 数据库设计基础 6.2 本地数据库设计(ACCESS) 6.3 数据控件 6.4 ODBC 6.5 ADO数据控件 6.6 VB中SQL的实现 6.7 VB中使用ODBC 6.8 网络数据库设计

6.1 数据库设计基础
1. VB中的数据访问 ?VB提供的数据库引擎叫Jet。 ?VB提供了两种与Jet

数据库引擎接口的方法: Data控件(Data Control)和数据访问对象(DAO)。 这两种方法可以同时使用。
Data控件提供了有限的 不需编程就能访问现存 数据库的功能 DAO模型是全面控制 数据库的完整编程接口

?VB通过DAO、ADO和Jet引擎可以识别三类数据库: (1)VB数据库 ?也称本地数据库,本地数据库文件格式与Microsoft Access相同。Jet引擎直接创建和操作这些数据库。 (2)外部数据库 ?访问符合“索引顺序访问文件方法(ISAM)”数据库, 包括:dBase III、dBase IV、Foxpro 2.0和2.5以 及Paradox 3.x和4.x。 (3)ODBC数据库 ?访 问 符 合 ODBC 标 准 的 客 户 机 / 服 务 器 数 据 库 , 如 Microsoft SQL Server。

6.1 数据库设计基础

2 . VB数据库体系结构 ?Jet引擎负责处理存储、检索、更新数据的结构,并 提供了功能强大的面向对象的DAO编程接口。 (1) VB数据库应用程序的组成 ?VB数据库应用程序包含三部分,如图6.1所示。

用户界面
图6.1

Jet引擎

数据库

VB数据库应用程序的组成

6.1 数据库设计基础

①用户界面和应用程序代码 ?用户界面是用户所看见的用于交互的界面,它包 括显示数据并允许用户查看或更新数据的窗体。 驱动这些窗体的是应用程序的VB代码,包括用来 请求数据库服务的数据访问对象和方法,比如添 加或删除记录,或执行查询等。

6.1 数据库设计基础

②Jet引擎 ?Jet引擎实际是一组动态链接库(DLL)文件。在运行 时,这些文件被链接到VB程序。它把应用程序的请 求翻译成.mdb(Access文件后缀)文件或其他数据库 的物理操作。 ?Jet引擎真正读取、写入和修改数据库,并处理所有 内部事务,如索引、锁定、安全性和引用完整性。 ?Jet引擎包含一个查询处理器,接收并执行SQL查询, 实现所需的数据操作。 ?Jet引擎包含一个结果处理器,用来管理查询所返回 的结果。

6.1 数据库设计基础

③数据库 ?数据库是包含数据库表的一个或多个文件。 ?本地VB或Access数据库文件后缀为.mdb文件。 (2)数据库应用程序的存放 ?在单系统机中数据库、数据引擎和用户界面集中存 放。 ?在客户机/服务器系统中,数据库引擎和数据库一起 被放置在服务器上。数据库引擎可以同时对多个客 户机的应用程序提供服务、操作数据库并对每个本 地应用程序返回所请求的记录。

6.1 数据库设计基础

数据库
服务器

数据库引擎

用户界面

客户机

客户机/服务器引擎,通过ODBC方式使 用。在VB中,通过连接到ODBC数据源, 如 Microsoft SQL Server 等 , 可 直 接 把 查询传递给服务器数据库引擎。

6.1 数据库设计基础

6.2 本地数据库设计(ACCESS)
VB中创建和访问数据库的途径主要有3个: ?可视化数据管理器 使用可视化数据管理器,不需要编程就可以创建Jet 数据库。 ?DAO 使用VB的DAO部件通过编程的方法创建数据库。 ?ISAM或ODBC VB可通过ISAM或ODBC驱动程序来访问外部数据库数 据库。

1.可视化数据管理器 ?数据管理器(Data Manager)是VB的一个传统成员, 它可以用于快速地建立数据库结构及数据库内容。 ?可以完成有关数据库的操作,比如数据库结构的建 立、记录的添加及修改以及用ODBC连接到服务器端 的数据库如SQL Server等。 ?启动数据管理器 选择“外接程序”菜单下的“可视化数据管理器” 项就可以启动数据管理器,打开“VisData”窗口。

6.2 本地数据库设计(ACCESS)

显示数据库的结构, 2)工具栏按钮

包括表名、列名、 数据库窗口 索引

可 输 入 SQL命 令 , 对 SQL语句窗口 数据库中的表进行查 询操作

VisData窗口 6.2 本地数据库设计(ACCESS)

设置记录集

指定数据表中 数据的显示方

的访问方式

进行事务处




6.2 本地数据库设计(ACCESS)

动态集类型记录集按钮,将指 快照类型记录集,只能读数据 表类型记录集按钮,允许直接对 定的数据打开并读入到内存 不能修改,适用于只查询的 数据库中的数据进行增、删、改、 中,进行数据编辑操作。 情况 查等操作。

6.2 本地数据库设计(ACCESS)

指定数据表中数据的显示方 指定数据表中数据的显示 指定数据表中数据的显示方 式,在新窗体上不使用DATA控 式 , 在 新方 式 上在 新 DATA 控 使 用 窗体 , 使用 窗 体 上 件 件 DBGrid控件

进入

6.2 本地数据库设计(ACCESS)

2.具体实现 1)建立数据库 ?数据库student.mdb(学生数据库)中的表定义: 学生成绩表(学号,课程,成绩,学期)。 学生成绩表结构 字段名 类型 宽度 学号 Text 6 课程 Text 10 成绩 Long 4 学期 Text 2

6.2 本地数据库设计(ACCESS)

基本情况表(学号,姓名,性别,专业,出生年月, 照片,备注) 学生基本情况表结构 字段名 类型 宽度 学号 Text 6 姓名 Text 10 性别 Text 2 专业 Text 10 出生年月 Date 8 照片 Binary 0 备注 Memo 0 6.2 本地数据库设计(ACCESS)

?添加数据表 ?建立索引 建立索引可以加快检索速度。 2)录入数据 ?照片的输入: 静态设置:通过一个图片编辑程序将照片装入剪贴板, 等待从剪贴板复制到Picture1控件。

6.3.1 数据控件属性

?动态设置:通过Picture1_DblClick事件来完成剪 贴板到Picture1控件的复制,当移动记录指针时, Picture1控件内的照片存入数据库。 Private Sub Picture1_DblClick() Picture1.Picture = Clipboard.GetData End Sub 3)建立查询 ?VB的数据管理器提供了一个图形化的设置查询条 件的窗口——查询生成器。 ?例如:查询Authors ID=10或Authors ID=1的情况
进入

6.2 本地数据库设计(ACCESS)

6.3 数据控件
?Data控件数据控件提供有限的不需编程而能访问现 存数据库的功能,允许将Visual Basic的窗体与数 据库方便地进行连接。 ?使用数据控件获取数据库中记录的集合,先在窗体 上画出控件,再通过它的三个基本属性Connect、 DatabaseName和RecordSource设置要访问的数据资 源。

6.3.1 数据控件属性
1.Connect属性 ?Connect属性指定数据控件所要连接的数据库类型, Visual Basic默认的数据库是Access的MDB文件, 也可连接ODBC等类型的数据库。 ?Access数据库的所有表都包含在一个MDB文件中。

2.DatabaseName属性 ?DatabaseName属性指定具体使用的数据库文件名, 包括文件所在的路径名。 ?数据库中的基本表名可由RecordSource属性指定。 ?例如,要连接一个Microsoft Access的数据库存放 在C:\Student.mdb. ?设 置 DatabaseName=”C:\Student.mdb“, 该 方 法 可 以通过属性栏设置,或在过程中指定. ?在过程中可以使用相对路径来描述, DatabaseName=”..\Student.mdb“。

6.3.1 数据控件属性

3.RecordSource属性 ?RecordSource 确 定 具 体 可 访 问 的 记 录 集 对 象 Recordset。 ?该属性值可以是数据库中的单个表名或者是使用SQL 查询语言的一个查询。 ?例如,指定Student.mdb数据库中的基本情况表: RecordSource=”基本情况”。 ?例如,访问基本情况表中所有物理系学生的数据。 RecordSource=”Select ? From 基本情况 Where专业=’物理’ ”,

6.3.1 数据控件属性

4.RecordsetType属性
?RecordsetType属性确定记录集类型。 (1)Table: 表记录集类型,一个记录集(单个表) (2)Dynaset: 动态集类型,一个动态记录集(多个 表),默认值。 (3)Snapshot:快照类型,一个记录集静态副本(不 可改)

5.EofAction和BofAction属性
?当记录指针指向Recordset对象的开始(第一个记录 前 ) 或 结 束 ( 最 后 一 个 记 录 后 ) 时 , BofAction 和 EofAction属性的设置或返回值决定了数据控件要采 取的操作。操作属性的取值如表6.1所示。 6.3.1 数据控件属性





焦点将从一个记录转换到另一 个记录之前,Validate 事件发生 操 作 值 设置 0 vbBOFAction 控件重定位到第1个记录(缺省) MoveFirst

BofAction 1 vbBOFAction 移过Recordset的开始位,定位到 BOF 一个无效记录;将在第一个记录上 触发 Data 控件的 Validate 事 件,紧跟着是非法 (BOF) 记录上 的 Reposition 事件。此刻禁止 Data 控件上的 Move Previous 按钮。 该事件发生在某行变为当前行之后

6.3.1 数据控件属性







操 作 设置 0 vbEOFAction 控件重定位到最后一个记录(缺省) MoveLast

EofAction 1 vbEOFAction 移过Recordset 的结尾,定位到一个 EOF 无效记录;在最后一个记录上触发 Data控件的Validate事件,紧跟着是 在非法 (EOF) 记录上的事件 Reposition .此刻禁止 Data 控件 上的 MoveNext 按钮 . 2 vbEOFAction 移过最后一个记录,在当前记录上触 AddNew 发 Data 控件的 Validate 事件,紧 跟着是自动的 AddNew,向记录集加 6.3.1 入新的空记录,接下来是在新记录上 数据控件属性

?与数据控件绑定: 数据控件本身不能直接显示记录集中的数据,必须 通过能与它绑定的控件来实现。可与数据控件绑定 的控件对象有文本框、标签、图像框、图形框、列 表框、组合框、复选框、网格、DB列表框、DB组合 框、DB网格和OLE容器等控件。 ?要使绑定控件能被数据库约束,必需在设计或运行 时对上述控件的两个属性进行设置: ?DataSource属性 该属性通过指定—个有效的数据控 件连接到一个数据库上。 ?DataField属性 该属性设置数据库有效的字段与绑 定控件建立联系。 6.3.1 数据控件属性

?绑定控件、数据控件和数据库三者的关系如图下示。

绑定控件

数据库

?当上述控件与数据控件绑定后,Visual Basic将当 前记录的字段值赋给控件。 ?数据控件在装入数据库时,它把记录集的第一个记 录作为当前记录。当数据控件的EofAction属性值 设置为2时,当记录指针移过记录集结束位,数据 控件会自动向记录集加入新的空记录。

6.3.1 数据控件属性

例6.2 设计一个窗体用以显示建立的student.mdb 数据库中基本情况表的内容。 ?要显示基本情况表中除了备注字段外的6个字段, 故需要用6个绑定控件与之对应。这里用一个图形 框显示照片和5个文本框显示学号、姓名等数据。

进入

6.3.1 数据控件属性

?数据控件Data1属性设置 ?Connect属性指定为Access类型 ?DatabaseName属性连接数据库Student.mdb ?RecordSource属性设置为“基本情况”表。 ?图片框和5个文本框控件属性设置 ?Text1~Text5的DataSource属性设置成Data1。 ?Text1~Text5的DataField属性分别选择与其对应的 字段学号、姓名、性别、专业和出生年月。 ?Picture1的DataField属性选择字段照片
进入

6.3.1 数据控件属性

例6.3 用数据网格控件MsFlexGrid显示Student.mdb 数据库中基本情况表的内容。

进入

6.3.1 数据控件属性

?数 据 网 格 控 件 的 DataSource 属 性 设 置 为 一 个 Data控件,运行时网格控件的列标题会用Data 控件的记录集里的数据自动地设置。 ?MsFlexGrid控件不是Visual Basic工具箱内的 默认控件,需要在开发环境中选择“工程|部件” 菜单命令,并在随即出现的对话框中选择 “Microsoft FlexGrid Control 6.0”选项,将 其添加到工具箱中。

6.3.1 数据控件属性

?本例所用控件的属性设置如下表所示。 表6.4 默认控件名 Data1 控件属性

进入

其它属性设置 DatabaseName=”c:\student.mdb” RecordsetType=1 RecordSource=”基本情况”

MSFlexGrid1 DataSource=Data1 FixedCols=0
注意:不可卷动列属性FixedCols=0与FixedCols=1的区别

6.3.1 数据控件属性

6.3.2 数据控件的事件和常用方法
1.Reposition事件 ?Reposition事件激活的条件:当记录集指针从一条 记录移到另一条记录,会产生Reposition事件。 ?Reposition事件作用:显示当前指针的位置。 Private Sub Data1_Reposition() Data1.Caption = Data1.Recordset.AbsolutePosition + 1 End Sub
AbsolutePosition属性指示当前指针值(从 0开始)。当单击数据控件对象上的箭头按 钮时,数据控件的标题区会显示记录的序 号

2.Validate事件 ?Validate事件激活的方法:在焦点转换到一个(第二 个)控件之前发生,此时该控件CausesValidation 属性值设置为True。 ?Validate事件的作用:用于检查被数据控件绑定控件 的状态,例如,由一个记录移到另一个记录;或者焦点 由一个文本框移到另一个文本框.

6.3.2 数据控件的事件和常用方法

例题:在窗体中放置一个CommandButton 和两个 TextBox 控 件 , 来 演 示 Validate 事 件 和 CausesValidation 属性的使用。 ?限制条件为:如果 Text1没有包含日期或 Text2 没有包含一个大于10的数字,将阻止焦点的转换。 ?两个TextBox 控件的CausesValidatio n属性在 缺省情况为 True,这样当把焦点从一个TextBox 转换到另一个时,Validate 事件发生。

进入

6.3.2 数据控件的事件和常用方法

Private Sub Form_Load() With Command1 .CausesValidation = False ?设置该属性为False,当用户单击按钮时, Validate事件不发生。 .Caption = "Help" With 语句可以对某个对象 End With 执行一系列的语句,而不用重 Show 复指出对象的名称。例如,要 With Text1 ?选择Text1的文本并为它设置焦点。 改变一个对象的多个属性,可 .SelLength = Len(Text1.Text) 以在 With 控制结构中加上属性 的赋值语句,这时候只是引用 .SetFocus 对象一次而不是在每个属性赋 End With 返回或设置所选择的字符数 值时都要引用它。 End Sub 6.3.2 数据控件的事件和常用方法

Private Sub Command1_Click() ?当单击此按钮时给出用户帮助信息。 MsgBox _ "Text1 must be set to a date." & VbCrLF & _ "Text2 must be a number less than 10.“ End Sub 回车换行

6.3.2 数据控件的事件和常用方法

返回 Boolean 值指明某表 Private Sub Text1_Validate(KeepFocus As Boolean) 达式是否可以转换为日期。 ?如果值不是一个日期,则保持焦点,除非用户单击 Help。 If Not IsDate(Text1.Text) Then KeepFocus = True MsgBox "Please insert a date in this field.", , "Text1" End if End Sub

6.3.2 数据控件的事件和常用方法

返回 Boolean 值指明表达式

Private Sub Text2_Validate(KeepFocus As Boolean) ?如果值是一个大于10的数字,保持焦点。 If Not IsNumeric(Text2.Text) Or Val(Text2.Text) > 10 Then KeepFocus = True MsgBox _"Please insert a number less than or equal to 10.", , "Text2" End If End Sub
进入

的值是否为数字。

6.3.2 数据控件的事件和常用方法

? Validate事件的检查方法: ? 通过Save参数(True或False)判断被连接的数据 (被绑定的控件) 是否发生变化。 ? 通过Action参数判断哪一种操作触发了 Validate事件。

6.3.2 数据控件的事件和常用方法

Validate事件的Action参数 常 数 值 描 述 vbDataActionCancel 0 Sub退出时取消操作 vbDataActionMoveFirst 1 MoveFirst 方法。 vbDataActionMovePrevious 2 MovePrevious 方法 vbDataActionMoveNext 3 MoveNext 方法 vbDataActionMoveLast 4 MoveLast 方法。 vbDataActionAddNew 5 AddNew 方法

6.3.2 数据控件的事件和常用方法

保存对 Recorded 对象的当前记 录所做的所有更改。

Validate事件的Action参数 常 数 值 描 述 vbDataActionUpdate 6 Update 操作。 vbDataActionDelete 7 Delete 方法 vbDataActionFind 8 Find 方法 vbDataActionBookmark 9 Bookmark 属性已被设置 vbDataActionClose 10 Close 的方法 vbDataActionUnload 11 窗体正在卸载。

6.3.2 数据控件的事件和常用方法

?例如,不允许用户在数据浏览时清空性别数据,可 去除前导空格和末尾空 使用下列代码:


Private Sub Data1_Validate(Action As Integer,_ Save As Integer) If Save And Len(Trim(Text3.Text)) = 0 Then Action = 0 ?取消操作 MsgBox "性别不能为空!" End If End Sub 检查被数据控件绑定的控件Text3内的 数据是否被清空。如果Text3内的数据 发生变化,则Save参数返回True,若 性别对应的文本框Text3被置空,则通 过Action=0取消对数据控件的操作 6.3.2 数据控件的事件和常用方法

3. 数据控件的常用方法 ?数据控件的内置功能很多,可以在代码中用数据控 件的方法访问这些属性。 1)Refresh方法 ?当RecordSource在运行时被改变时,使用Refresh方 法,将当前指定RecordSource中的数据装入内存工 作区,达到激活数据库的作用。

6.3.2 数据控件的事件和常用方法

Private Sub Form_Load( ) Dim Mpath As String Mpath=App.Path ?获取当前路径 If Right(mpath,1)<>”/” Then mpath=mpath+”/” Data1.DatabaseName=mpath+”Student.mdb” ?连接数据库 App 对象是通过关键字 App 访问的 Data1.RecordSource= ?基本情况”’ 全局对象。它指定如下信息:应用程 ?构成记录集对象 序的标题、版本信息、可执行文件的 Data1.Refresh ?激活数据控件 路径及名称以及是否运行前一个应用 End Sub 程序的示例。 RIGHT(cExpression, nCharacters) Path返回或设置当前路径,在编程时 Function返回从右边数的n个字符。 无效,运行时有效。 6.3.2 数据控件的事件和常用方法

2)UpdateControls方法 ?UpdateControls方法从数据库中重新读数据送到被 数据控件绑定的控件内。 控件

DATA控件

数据库

3)UpdateRecord方法 ? 对绑定控件内的数据修改后,数据控件需要移动记 录集的指针才能保存修改。如果使用UpdateRecord 方法,可强制数据控件将绑定控件内的数据写入到 数据库中,而不再触发Validate事件。

控件

DATA控件

数据库

6.3.2 数据控件的事件和常用方法

6.3.3 记录集的属性和方法
?记录集Recordset常用的属性和方法。 1.AbsolutePosition属性 ?AbsolutePosition返回当前指针值,如果是第1条 记录,其值为0,该属性为只读属性。 2.Bof和Eof的属性 ?Bof 判 定 记 录 指 针 是 否 在 首 记 录 之 前 , 若 Bof 为 True,则当前位置位于记录集的第1条记录之前。 ?Eof 判 定 记 录 指 针 是 否 在 末 记 录 之 后 , 若 Eof 为 True,则当前位置位于记录集的最后1条记录之后。

6.3.2 数据控件的事件和常用方法

3.Bookmark属性 ?Bookmark属性的值采用字符串类型,用于设置或返 回当前指针的标签。在程序中可以使用Bookmark属 性重定位记录集的指针。 4.Nomatch属性 ?在记录集中进行查找时,如果找到相匹配的记录, 则Recordset的NoMatch 属性为False,否则为True。 该属性常与Bookmark属性一起使用。 5.RecordCount属性 ?RecordCount属性对Recordset对象中的记录计数, 使用 RecordCount 属性可确定 Recordset 对象中 记录的数目。 6.3.3 记录集的属性和方法

6.Move方法 五种Move方法是: ?MoveFirst 将控件移动到第1条记录。 ?MoveLast 将控件移动到最后一条记录。 ?MoveNext 将控件移动到后一条记录。 ?MovePrevious 将控件移动到前一条记录。 ?Move [n] 向前或向后移n条记录,n为指定的数值。

6.3.3 记录集的属性和方法

例6.4 设计一个窗体用以显示建立的student.mdb数据 库中基本情况表的内容。在窗体上用4个命令按钮实 现对数据库的操作。

图6.10 用按钮代替数据控件对象的箭头按钮 6.3.3 记录集的属性和方法

?命令按钮Command1_Click事件移至第1条记录,代码 如下: Private Sub Command1_Click() Data1.Recordset.MoveFirst End Sub ?命令按钮Command4_Click事件移至最后一条记录, 代码如下: Private Sub Command4_Click() Data1.Recordset.MoveLast End Sub

6.3.3 记录集的属性和方法

?使用Move方法需要考虑Recordset对象的边界状态。 如果越界,则用MoveFirst方法定位到第1条记录或用 MoveLast方法定位到最后一条记录。 ?使用MoveFirst方法定位到第1条记录: Private Sub Command2_Click() Data1.Recordset.MovePrevious If Data1.Recordset.BOF Then Data1.Recordset.MoveFirst End Sub

6.3.3 记录集的属性和方法

?使用MoveLast方法定位到最后一条记录: Private Sub Command3_Click() Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End Sub

6.3.3 记录集的属性和方法

7.Find方法 ?使用Find方法可在Recordset对象中查找与指定条件 相符的一条记录,并使之成为当前记录。 ?四种Find方法是: ?FindFirst方法 从记录集的开始查找满足条件的第1 条记录。 ?FindLast方法 从记录集的尾部向前查找满足条件的 第l条记录。 ?FindNext方法 从当前记录开始查找满足条件的下一 条记录。 ?FindPrevious方法 从当前记录开始查找满足条件的 上一条记录。 6.3.3 记录集的属性和方法

?Find方法的语法格式:4种格式相同 数据集.Find方法 条件 ?搜索条件表达式:是一个指定字段与常量关系的字 符串表达式。在构造表达式时,除了用普通的关系 运算外,还可以用Like运算符。 ?例如,查找专业=物理的纪录 “Data1.Recordset.FindFirst 专业=’物理’” ?查找下一条符合条件的记录,可继续使用语句: ”Data1.Recordset.FindNext 专业=’物理’”。

6.3.3 记录集的属性和方法

?例如,要在记录集内查找专业名称中带有“建” 字的专业: Data1.Recordset.FindFirst 专业 Like ?%建%? ?如果Find方法找不到相匹配的记录,则记录保持 在 查 找 的 始 发 处 , Recordset 的 NoMatch 属 性 为 True。 ?如果Find方法找到相匹配的记录,则记录定位到 该记录,Recordset的NoMatch属性为False。

6.3.3 记录集的属性和方法

Private Sub Command1_Click() Data1.Recordset.FindFirst”course”=?English?“ If Data1.Recordset.NoMatch Then MsgBox ”No such record found” Else MsgBox Data1.Recordset.Fields(“course” ) End If End Sub

6.3.3 记录集的属性和方法

8.Seek方法 ?Seek方法:是根据索引字段的值,查找与指定索引规 则相符的第1条记录,并使之成为当前记录。 ?其语法格式为: 数据表对象.seek comparison,keyl,key2… ?比较运算符comparison;可用的比较运算符有 =、>=、>、<>、<、<= ?Seek允许接受多个参数keyl,key2,… ; ?在使用Seek方法定位记录时,必须打开索引文件, 通过Index属性设置索引文件。若在记录集中多次使 用同样的Seek方法(参数相同),那么找到的总是同 一条记录。

6.3.3 记录集的属性和方法

?例如,假设数据库Student内基本情况表的索引字段为 学号,满足学号字段值大于等于110001的第1条记录可 使用以下程序代码: Data1.RecordsetType = 1 ?设置记录集类型为Table Data1.RecordSource = “基本情况” ’打开基本情况表单 Data1.Refresh Data1.Recordset.Index = "jbqk_no" ?打开名称为jbqk_no的索引 Data1.Recordset.Seek ">=", "110001"

6.3.3 记录集的属性和方法

6.3.4 数据库记录的增删改操作
?数 据 库 记 录 的 增 、 删 、 改 操 作 需 要 使 用 AddNew、 Delete、Edit、Update和Refresh方法。 ?它们的语法格式为: 数据控件.记录集.方法名 1.增加记录 ①调用AddNew方法。 ②给各字段赋值。给字段赋值格式为: Recordset.Fields(”字段名”)=值。

③调用Update方法,将缓冲区内的数据写入数据库。 ?如果使用AddNew方法添加新的记录,但是没有使用 Update方法而移动到其他记录,或者关闭记录集, 那么所做的输入将全部丢失,而且没有任何警告。 ?当调用Update方法写入记录后,记录指针自动返回 到添加新记录前的位置上,而不显示新记录。因此, 需要在调用Update方法后,使用MoveLast方法将记 录指针再次移到新记录上。

6.3.4 数据库记录的增删改操作

2.删除记录 ①定位被删除的记录使之成为当前记录。 ②调用Delete方法。 ③移动记录指针。 ?在使用Delete方法时,当前记录立即删除,不加任 何的警告或者提示。 ?删除一条记录后,被数据库所约束的绑定控件仍旧 显示该记录的内容。因此,必须移动记录指针刷新 绑定控件,一般采用移至下一记录的处理方法。 ?在移动记录指针后,应该检查Eof属性

6.3.4 数据库记录的增删改操作

3.编辑记录 ?数据控件自动提供了修改现有记录的能力,当直接 改变被数据库所约束的绑定控件的内容后,需单击 数据控件对象的任一箭头按钮来改变当前记录,确 定所做的修改。 ?使用程序代码修改当前记录步骤的为: ①调用Edit方法。 ②给各字段赋值。 ③调用Update方法,确定所做的修改。 ?如 果 要 放 弃 对 数 据 的 所 有 修 改 , 可 用 updatecontrols方法,重读数据库的数据,没有调 用Update方法,数据的修改没有写入数据库,所以 这样的记录会在刷新记录集时丢失。 6.3.4 数据库记录的增删改操作

?例6.5 设计一个窗体用以显示建立的student.mdb数 据库中基本情况表的内容。并加入“新增”、“删 除”、“修改”、“放弃”和“查找”钮,通过对5 个按纽的编程建立增、删、改、查功能。

图6.11 编程建立增、删、改、查功能 6.3.4 数据库记录的增删改操作

进入

?Command1_Click事件的功能: ?当按钮提示为“新增”时调用AddNew方法,并将 提示文字改为“确认”,同时使“删除”按钮 Command2、“修改”按钮Command3和“查找”按钮 Command5不可用,而使“放弃”按钮Command4可 用。 ?新增记录后,需再次单击Command1调用Update方 法确认添加的记录,再将提示文字改为“新增”, 并使“删除”、“修改”和“查找”按钮可用, 而使“放弃”按钮不可用。 ?On Error Resume Next语句表示在程序运行时发 生错误,忽略错误行,继续执行下一语句。

6.3.4 数据库记录的增删改操作

Private Sub Command1_Click() On Error Resume Next。 Command2.Enabled = Not Command2.Enabled Command3.Enabled = Not Command3.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled

6.3.4 数据库记录的增删改操作

If Command1.Caption = "新增" Then Command1.Caption = “确认” Data1.Recordset.AddNew Text1.SetFocus Else Command1.Caption = "新增" Data1.Recordset.Update Data1.Recordset.MoveLast End If End Sub

6.3.4 数据库记录的增删改操作

?命令按钮Command2_Click事件功能: 调用方法删除当前记录。当记录集中的记录全部被 删除后,再执行Move语句将发生错误 ,这时由 On Error Resume Next语句处理错误。

Private Sub Command2_Click() On Error Resume Next Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End Sub 6.3.4 数据库记录的增删改操作

?命令按钮Command3_Click事件的功能: 根据按钮提示文字调用Edit方法进入编辑状态或调用 Update方法将修改后的数据写入到数据库,并控制 其他3个按钮的可用性,代码如下:

Private Sub Command3_Click() On Error Resume Next Command1.Enabled = Not Command1.Enabled Command2.Enabled = Not Command2.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled

6.3.4 数据库记录的增删改操作

If Command3.Caption = "修改" Then Command3.Caption = "确认" Data1.Recordset.Edit Text1.SetFocus Else Command3.Caption = "修改" Data1.Recordset.Update End If End Sub

6.3.4 数据库记录的增删改操作

?命令按钮Command4_Click事件的功能: 使用UpdateControls方法放弃操作,代码如下: Private Sub Command4_Click() On Error Resume Next Command1.Caption = "新增" Command3.Caption = "修改"

6.3.4 数据库记录的增删改操作

Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Command4.Enabled =false Command5.Enabled = True Data1.UpdateControls Dala1.Recordset.MoveNext End Sub

6.3.4 数据库记录的增删改操作

?命令按钮Command5_Click事件的功能: 根据输入专业使用SQL语句查找记录,代码如下: Private Sub Command5_Click() Dim mzy As String mzy = InputBox$("请输入专业", "查找窗") Data1.RecordSource = "Select * From 基本情况_ Where 专业 = ' " & mzy & " ' " Data1.Refresh

6.3.4 数据库记录的增删改操作

If Data1.Recordset.EOF Then MsgBox "无此专业!", , "提示" Data1.RecordSource = “基本情况” Data1.Refresh End If End Sub

?上面的代码给出了数据表内数据处理的基本方法

6.3.4 数据库记录的增删改操作

?使用Data1_Validate事件过滤无效记录 ?例如,对学号字段进行测试,如果学号为空则输入 无效。在例6.5中被学号字段所约束的绑定控件是 Text1,可用Text1.DataChanged属性检测Text1控件 所对应的当前记录中的字段值的内容是否发生了变 化,Action=6表示Update操作。 ?使用数据控件的箭头按钮改变当前记录,则完成添 加的新记录或对已有记录的修改的任务。 ?而单击数据控件的箭头按钮时会触发Validate事件, 在该事件中,可以根据Action取值(1?4)来判断单 击了数据控件哪一个箭头按钮。

6.3.4 数据库记录的增删改操作

Private Sub Data1_Validate(Action As Integer, Save As Integer) If Text1.Text = " " And _ (Action = 6 Or Text1.DataChanged) ?Action=6表示Update操作 Then MsgBox "数据不完整,必须要有学号!" Data1.UpdateControls ?读回原数据 End If

6.3.4 数据库记录的增删改操作

MoveFirst

MoveLast

If Action >= 1 And Command1.Caption Command3.Caption Command1.Enabled Command2.Enabled Command3.Enabled Command4.Enabled End If End Sub

Action <= 4 Then = "新增" = "修改" = True = True = True = False

进入

6.3.4 数据库记录的增删改操作

6.4 ODBC
1. ODBC概述 ?存在问题 ①使用数据库系统所提供的专用开发工具(如嵌入式 SQL语言),开发的应用程序只能运行在特定的数据 库系统环境下,适应性和可移植性比较差。 ②使用数据库系统所提供的嵌入式SQL语言,一个应 用程序只能连接同类的DBMS,而无法同时访问多个 不同的DBMS;在实际应用中通常是需要同时访问多 个不同的DBMS。这种情况下传统的数据库应用程序 开发方法就难以实现。 ?为了解决这些问题,Microsoft公司开发了ODBC。

?ODBC(Open DataBase Connectivity,即开放数据 库互连)是Microsoft公司开发的一套开放数据库系 统应用程序接口规范,目前它已成为一种工业标准, 它提供了统一的数据库应用编程接口(API),为应 用程序提供了一套高层调用接口规范和基于动态连 接库的运行支持环境。 ?使用ODBC开发数据库应用时,应用程序调用的是标 准的ODBC函数和SQL语句,数据库底层操作由各个 数据库的驱动程序完成。因此应用程序有很好的适 应性和可移植性,并且具备了同时访问多种数据库 管理系统的能力,从而彻底克服了传统数据库应用 程序的缺陷。

6.4 ODBC

2. ODBC体系结构
ODBC数据库应用程序

驱动程序管理器
SQLServer 驱动程序 SQLServer 数据源 Oracle Foxpro Sybase 驱动程序 驱动程序 驱动程序 主要任务包括:建立与数据源的连接 、向数据源发送SQL请求、接收并处理 主要作用是用来装载ODBC驱动 Oracle 请求的结果、断开与数据源的连接等 Foxpro Sybase 程序、管理数据源、检查ODBC 数据源 数据源 参数的合法性 数据源 DB DB DB

DB

图6.12 ODBC的体系结构 6.4 ODBC

ODBC应用程序不能直接存取数据库,它将所 要执行的操作提交给数据库驱动程序, ODBC数据库应用程序

驱动程序管理器
Sybase 通过针对不 驱动程序 同数据源的 驱动程序实 SQLServer Oracle Foxpro Sybase 现对不同数 数据源 数据源 数据源 数据源 据源的各种 ODBC驱动程序是一个动态链接库 (DLL), 操作 类似于Windows下的打印驱动程序,对用 户来说,驱动程序屏蔽了不同对象(数据 DB DB DB DB 库系统或打印机)间的差异。同样地, ODBC屏蔽了DBMS之间的差异。 SQLServer 驱动程序 Oracle 驱动程序 Foxpro 驱动程序

6.4 ODBC

ODBC数据库应用程序

驱动程序管理器
SQLServer 驱动程序 SQLServer 数据源 Oracle 驱动程序 Oracle 数据源 Foxpro 驱动程序 Foxpro 数据源 Sybase 数据库操作 驱动程序 结果也通过 驱动程序返 Sybase 回给应用程 数据源 序。

DB

DB

DB

DB

6.4 ODBC

数据源 ?数据源(Data Source Name,简称DSN)是指任一种可 以通过ODBC连接的数据库管理系统,它包括要访问 的数据库和数据库的运行平台。 ?数据源名表达了一个ODBC驱动程序和DBMS的特定连 接。例如,建立一个数据源名为Studend1,并设置 Studend1=Studend.mdb。使用Studend1的用户可以 由文件指定、本机使用或用户使用三种。 ?通过定义多个数据源名,每个数据源名指向一个数 据库服务器上的DBMS名,在应用程序中使用不同的 数据源名,可以实现同时访问多个DBMS的目的。

6.4 ODBC

?数据源分为以下三类,可以通过控制面板中ODBC图标 来设置: ?用户数据源 用户创建的数据源,称为“用户数据源”。此时只 有创建者才能使用,并且只能在所定义的机器上运 行。任何用户都不能使用其他用户创建的用户数据 源。 ?系统数据源 所有用户和在Windows NT下以服务方式运行的应用 程序均可使用系统数据源。 ?文件数据源 文件数据源可用于企业用户,ODBC驱动程序安装在 用户的计算机上。 6.4 ODBC

?ODBC提供了一个开放的、标准的能访问从PC机、小 型机到大型机数据库数据的接口。 ODBC提供了在不 同数据库环境中为客户机/服务器(简称C/S)结构 的客户机访问异构数据库的接口。 ?使用ODBC标准接口的应用程序,开发者可以不必深 入了解要访问的数据库系统,比如其支持的操作和 数据类型等信息,而只需掌握通用的ODBC API编程 方法即可。 ?利用ODBC开发的数据库应用程序具有很好的移植性, 当作为数据库源的数据库服务器上的数据库管理系 统升级或转换到不同的数据库管理系统时,客户机 端应用程序不需作任何改变。

6.4 ODBC


相关文章:
VB数据库编程技术实例
VB 数据库编程技术 一 ODBC 概述在传统的数据库管理系统中,每个数据库管理系统都有自己的应用程序开发接口(API),为了解决此问 题,微软公司开发了 ODBC(Open ...
数据库编程基础教程1
数据库编程基础教程1_计算机软件及应用_IT/计算机_专业资料。VB.NET 数据库编程...但.NET FrameWork SDK 中提供了一种数据绑定技术,可以把打开的数据表中的 某个...
VBNET数据库编程基础教程
在上一篇文章《探讨 VB.Net 中的数据绑定》中,我们已经探讨了数据绑定技术,这对于我们下面进 行数据库编程是非常重要的。由于数据库编程中所包含的内容十分丰富,...
VB数据库编程
www.myzhiku.com 培训管理资料大全 《商务智库》整理 VB 数据库编程 9.4.1 ODBC 概述在传统的数据库管理系统中,每个数据库管理系统都有自己的应用程序开发接口(...
《数据库技术及应用》VB+数据库开发
《数据库技术及应用》VB+数据库开发_计算机软件及应用_IT/计算机_专业资料。数据库应用开发、VB、管理系统 项目设计报告内容一、 项目设计背景,目的和意义随着招生...
编写数据库应用程序必看
的大部分编程方法,另一方面, VB.NET 也还是保留了原来在 VB 6.0 中 ADO 的...如果您主要是处理 Access 数据库,那么使用专为 Access 数据库编写 的 DAO 技术...
VB数据库编程的几点心得
VB 数据库编程的几点心得 [ 作者: xiaoboey 添加时间: 2001-8-29 8:35:07 ] 一、ADODB.Connection 的连接字符串(ConnectionString)的生成之 道 ADO 是当前...
第十一章vb6.0数据库编程技术
第十一章vb6.0数据库编程技术 数据库编程技术数据库编程技术隐藏>> 第十一章 数据库编程技术 11.1 数据库的基本概念 数据库的基本概念是进行数据库编程的基础。了...
VB数据库编程
Visual Basic 中的数据库编程就是创建数据访问对象,这些数据访问对象对应于被访问...VB数据库编程技术 85页 免费 VB控件教程大全 39页 1下载券 VB数据库编程技术...
编程语言的数据库性能比较
编程语言的数据库性能比较_计算机软件及应用_IT/计算机_专业资料。编程语言的数据...技术不断完善发展的今天,它也显出了它的落后性; 同时 VB 在进行系统底层开发...
更多相关标签:
vb数据库编程教程 | vb数据库编程实例 | vb.net 数据库编程 | vb数据库编程 | vb.net数据库编程实例 | vb2010数据库编程实例 | vb6数据库编程大全 | vb6.0 数据库编程实例 |