Visual Basic数据访问技术.docx
《Visual Basic数据访问技术.docx》由会员分享,可在线阅读,更多相关《Visual Basic数据访问技术.docx(40页珍藏版)》请在冰豆网上搜索。
VisualBasic数据访问技术
VisualBasic数据访问技术
一、用Data(数据)控件访问数据库
可用Data控件来创建应用程序,该程序可显示、编辑和更新各类已有的数据库的信息,其中包括Access、Btrieve、dBASE、FoxPro和Paradox。
当然,也可用Data控件来访问Excel、Lotus123和标准ASCII文本文件,就像它们是真的数据库一样。
此外,Data控件可访问操作远程的开放式数据库互连(ODBC)数据库,如SQL服务器和Oracle。
Data控件通过MicrosoftJet数据库引擎实现数据访问,同样的数据库引擎也给MicrosoftAccess以动力。
该技术能天衣无缝地访问许多标准数据库格式,并可创建数据识别的应用程序而不必编写任何代码。
1、Data控件的功能
不用编写代码就能用Data控件创建简单的数据库。
当然也用它和VisualBasic代码一起来创建完整功能的应用程序,该程序能为程序数据的处理提供高级的编程控制。
下面将着重介绍简单的无代码方法,然后再列出更复杂的编程示例。
Data控件不用代码就能完成下列任务:
1)、与本地或远程数据库连接。
2)、基于该数据库里各种表的SQL查询,打开指定的数据库表或定义的记录集。
3)、传送数据字段到各种绑定控件,并在其中可显示或改变数据字段的值。
4)、根据显示于绑定控件里的数据变化,添加新记录或更新数据库。
5)、捕获访问数据时出现的错误。
6)、关闭数据库。
与其他VisualBasic控件一样,为创建数据库应用程序,可在窗体中添加Data控件。
可根据需要在窗体中随意创建多个Data控件。
不过,按照规则,对每个要操作的数据库表使用一个Data控件最为适宜。
按以下步骤可以创建简单的数据库应用程序:
1)、把Data控件添加到窗体中。
2)、设置其属性以指明要从哪个数据库和表中获取信息。
3)、添加各种绑定控件(如各种文本框、列表框和“绑定”到Data控件的其他控件)。
4)、设置绑定控件的属性以指明要显示的数据源和数据字段。
当运行应用程序时,这些数据绑定控件会自动地显示出数据库当前记录的各个字段。
如同所有的VisualBasic控件,Data控件的某些属性必须在设计时的“属性”窗口里设置。
其中许多属性也可在运行时用VisualBasic代码来设置。
要使用Data控件,至少得设置DatabaseName属性和RecordSource属性。
一旦设置DatabaseName属性,VisualBasic将检索数据库里的所有表和有效查询的名称,并根据RecordSource属性把它们显示在一个下拉列表里。
若想打开外部数据库(如FoxPro、Btrieve、Paradox、dBASE、MicrosoftExcel、Lotus1-2-3、Text或ODBC),还得在“属性”窗口里设置Connect属性。
一旦从列表中选取一个表或查询,就能用“属性”窗口选择设置于每个绑定控件上的有效的DataField属性。
也可以在运行时设置或改变Data控件及绑定控件的属性。
只要设置正确的属性,就可用Data控件的refresh方法来(在必要时)重新打开数据库及重新创建具备新属性设置值的记录集。
2、数据绑定控件
数据绑定控件是数据库识别控件,在数据库中可通过它访问信息。
当一个控件被绑定到Data控件,VisualBasic会把从当前数据库记录取出的字段值应用于该控件,然后,控件显示数据并接受更改;如果在绑定控件里改变数据,当移动到另一个记录时,这些改变会自动地写入到数据库中。
VisualBasic支持几种可绑定到Data控件的内部控件,还支持第三方及在VisualBasic专业版与企业版中的其它数据识别控件。
本节使用文本框来阐述使用绑定控件的基本规则。
大多数据绑定控件都有以下三种数据识别属性:
DataChanged、DataField和DataSource。
如下表所列:
属性
描述
DataChanged
指示显示于绑定控件里的值是否经改变
DataField
指定Data控件所建立的记录集里字段的名称
DataSource
指定Data控件所要绑定的控件名称
把绑定控件添加到应用程序的步骤如下所示:
1)、在要绑定Data控件的同一窗体里绘制一个绑定控件。
2)、设置DataSource属性,指定要绑定的Data控件。
3)、设置DataField属性为Data控件的记录集里的一个有效字段。
如果设计时数据库可用,则有效字段的列表将显示在“属性”窗口里的“DataField”设置框中。
如果在设计时数据库不可用,则在数据值从数据库中发送给控件之前,需在运行时提供一个有效的字段名称。
对特定字段可有多个绑定控件,但不必为表里的每个字段都提供一个绑定控件。
Data控件和绑定控件都不一定要设为可视的,因此可把数据访问的能力合并到设计的窗体里,以便用VisualBasic代码在“后台”操纵数据。
运行程序时,Data控件与数据库一起工作,以访问当前记录集或正在使用的记录集。
使用Data控件的箭头按钮可在记录间移动,而用绑定控件可查看或编辑从每个字段里显示出来的数据。
无论何时单击Data控件的按钮,VisualBasic会自动地更新记录集所做的任何改变。
3、绑定控件的类型
VisualBasic支持几种能力与Data控件绑定的内部控件以及几种与数据绑定的ActiveX(.ocx)控件。
许多来自第三方的其他数据识别的控件也在VisualBasic的专业版下企业版中使用。
可以与Data控件一起使用的标准绑定控件包括以下几种:
1)、复选框。
2)、图像。
3)、标签。
4)、图片框。
5)、文本框。
6)、列表框。
7)、组合框。
8)、OLE容器控件。
除了内部的绑定控件外,VisualBasci也提供了下列可添加到工程去的ActiveX控件。
1)、DBListBox。
2)、DBComboBox。
3)、MSFlexGrid。
4)、ApexDBGrid。
5)、MaskedEdit。
对于复杂的界面,有一些ActiveX控件提供了附加功能显示整组的记录,如列表、表格,或者整个记录集。
它们包括列表框、组合框,以及MSFlexGrid控件。
另外,有三种特殊的控件允许完成复杂数据库显示以及对多记录和字段的更新任务。
它们是数据绑定列表控件、组合框控件以及DbGrid控件。
4、创建简单的数据库应用程序
下列过程给出了在VisualBasic程序里如何使用Data控件的简述。
本例使用了VisualBasic6.0提供的Biblio.mdb示例数据库。
1)、在“工具箱”里选择Data控件,然后在窗体上绘制一个Data控件。
在窗体上绘制好Data控件及其尺寸后,它的标题会显现出来。
Data控件的缺省名为Data1。
2)、在“属性”窗口里,设置Connect属性为想用的数据库类型,这里使用的是其缺省类型:
Access,如图所示:
3)、在“属性”窗口里,设置DatabaseName属性为想要的数据库的文件名或目录名。
若在设计时该数据库属性无效,则需要在运行时写入DatabaseName和RecordSource属性。
本例使用了VB目录入的Biblio.mdb示例数据库。
设置RecordSource属性为想要访问的数据库表的名称。
若数据库当前正有效,可从“属性”窗口里的下拉列表中选择一个表。
若找不到数据库,下拉列表将不会出现在“RecordSource”设置框里并显示一个错误信息。
本例使用了Titles表。
4)、在窗体里绘制“文本框”以显示数据库信息。
该控件将用于从数据库中显示和编辑一个选定的字段。
也可用别的数据绑定控件,包括复选框、图形框、图像控件、标签、列表框和网格控件。
5)、在“属性”窗口把Text1的DataSource属性设置为Data控件的名称(Data1)。
这就使文本框绑定到Data控件上。
6)、添加一个“标签”,把它的Caption属性设为该文本框将要显示的数据库字段名称,这里设置为Title:
。
7)、把Text1的DataField属性设为想要查看或修改的数据库表的字段名。
此例使用Titles表的Title字段。
8)为每个要访问的另外的字段,重复步骤5、6、7和8。
在此例中,已从Titles表选取了Title、ISBN和YearPublished公共字段,如下图所示。
9)、现在开始运行程序。
可用Data控件的四个箭头按钮移动到数据的起始点和结尾点,或者在整个数据的记录间移动,如图所示:
通过改变显示在任何绑定控件里的值,能修改数据库的信息。
当单击Data控件的箭头按钮向新记录移动时,VisualBasic会自动地保存对数所做的任何改变。
当然,可添加代码进一步使程序扩充。
以下的内容将展示如何与绑定控件一起使用Data控件,用来操作数据、检验数据库结构和编写事件过程,以及用来处理在访问和更改数据时发生的事件。
5、添加、更新和删除记录
用Data控件和数据绑定控件能够自动地添加、更新和删除记录。
为增加灵活性和提高控制能力,可用Data控件的Recordset对象的各种方法,也可用编写代码来完成这些操作。
下一节中我们将详细介绍使用代码操作数据库记录,本节将讨论Data控件的内置方法。
为了使用Data控件把一个新记录添加到数据库中,需设置EOFAction属性为2,这样才允许把一个新记录添加到记录集的尾部。
EOFAction和BOFAction都是Data控件的属性,它们决定当数据移动超出了Data控件记录集的起点和终点时将发生些什么。
下表列出EOFAction属性可能的设置值。
设置值
数值
描述
vbEOFActionMoveLast
0
使用MoveLast方法,来指定当前记录位于记录集的终点,并能有效阻止滚动超过记录集的终点
VbEOFActionEOF
1
指定当前记录为无效的(EOF)记录,并使Data控件上的MoveNext按钮失效
VbEOFActionNew
2
使最后的记录有效和自动地调用AddNew方法,然后指定Data控件位于新记录上
随着EOFAction属性被设为vbEOFActionAddNew,当移动数据超过最后的记录时,Data控件将自动地创建一个新记录,并且允许输入数据。
输入新数据后,称出当前(即新的)记录时,将自动地引发Data控件更新事件将将新记录存储于数据库中。
若不添加数据就移出新记录,则新记录将被丢弃。
这一方法提供了顺序地添加许多新记录的一种方便途径。
只要简单地移动到数据库的结尾,然后使用MoveNext按钮来在文件结尾向后移一条记录。
然后就可以开始添加新记录,每输入一条新记录,记录集就向前移动。
Data控件将自动地处理添加的记录并更新这些记录。
为了使用Data控件来更新或删除记录,可简单地将控件定位于期望的记录上,并在显示该记录的任何数据绑定控件里修改或删除。
记录修改或删除后,使用Data控件向前移动记录集。
Data控件会自动地处理已修改的或已删除的记录的更新操作。
二、外部数据绑定控件
DBComboBox、DBListBox和DBGrid控件与Data控件并用,可显示数据库中的信息。
DBListBox和DBComboBox控件,与标准ListBox、ComboBox控件不同,它们不是使用AddItem方法,而是记录集自动填充。
另外,这两个控件都支持自动搜索模式,这种模式能够迅速将列表的项目定位而无须附加代码。
DBGrid控件是工作表一类的绑定型控件,它显示代表Recordset对象中的记录和字段的一组行和列。
DBGrid控件在功能上与MSFlexGrid控件类似。
但是,MSFlexGrid控件除了提供自定义选项外,还提供只读数据绑定、附加的格式化和绑定功能。
MSFlexGrid控件提供了在网格中显示数据的高级功能。
但它不允许用户编辑被绑定包含在控件中的数据。
另外,还可将MSFlexGrid控件与TextBox控件组合,使该控件具有单元编辑功能。
MSFlexGrid控件支持下述功能:
1)、只读数据绑定。
2)、在行、列中透视数据的能力。
3)、列调整时的数据自动重新分组。
4)、对现有DBGrid的VisualBasic代码的适应性。
5)、每个单元有包含文本、图片或同时包含文本、图片的能力。
6)、在代码中或运行时改变当前单元的功能。
7)、给Data控件赋值时自动读取数据的功能。
8)、单元中文本自动换行功能。
9)、查找和替换复杂字符串的功能。
1、DBListBox和DBComboBox控件
这两种控件都可以从它们所绑定的Data控件中用来自数据库的字段自动地进行填充。
另外,它们可以有选择地把一个选定的字段传递给另一个Data控件,从而使得它们对于“查找表”应用程序很理想。
这样的应用程序从一个下拉列表中能够选择准则来缩小搜索范围。
例如,销售报表数据库应用程序可以使用DBListBox控件让用户拾取国家或者销售地区。
一旦作出了选择,这一选择就自动传递到自己定位在所选地区销售记录上的第二个Data控件。
DBListBox控件与DBComboBox控件的主要不同之处在于:
DBComboBox控件提供了一个文本框,复制到其中的选定字段可以进行编辑。
DBListBox和DBComboBox都有五种特殊的属性,这五种属性决定它们数据的绑定。
如下表所示:
属性
描述
DataSource
DBListBox或DBComboBox控件被绑定的Data控件的名称
DataField
由DataSource属性所指定的记录集中的字段名称。
该字段用来决定列表中哪一个元素被突出显示。
如果作了新选择,则移动到一条新记录时这一字段被更新
RowSource
将要用于填充列表的Data控件的名称
BoundColumn
由RowSource属性指定的记录集中的字段名称。
该字段必须与用来更新列表的DataField的类型相同
ListField
用来填充列表的由RowSource指定的记录集中的字段名
这两个控件的一个通常的用处就是创建以数据库查询为基础的项目列表。
从该数据库查询中可以选择或者输入一个值,或者在DBComboBox的情况下编辑选定的字段。
当选定列表中的一个项目时,与它相关联的BoundColumn属性值被设为可用于由DataSource属性指定的Data控件。
一旦Data控件移动到另一条记录或者更新,则记录集更新为选定的或编辑的文本。
以下的示例使用DBComboBox控件来为Biblio.mdb示例数据库的Titles表创建一个数据输入屏幕。
它可用来输入新标题,并且通过提供一个所有发行者名字的查找表来把它们分配给现存的发行者。
具体的创建步骤如下:
1)、在窗体中添加DBComboBox控件和两个Data控件。
2)、在“属性”窗口中,设置第一个Data控件(Data1)的属性,创建对应于Titles表的表格型记录集,即将RecordsetType属性设置为“0-Table”。
3)、用以下的SQL查询设置第二个Data控件(Data2)的属性,创建对应Publishers表的快照型Recordset对象,即将RecordType属性设置为“2-Snapshot”:
SelectPubID,NameFromPublishersOrderByPubID;
4)、把DBComboBox的DataSource属性设置为第一个Data控件(Data1)。
DataField属性应当设置成Titles表格的PubID字段。
这样就被DBComboBox控件绑定,并对Titles记录集进行更新。
5)、把DBComboBox的RowSource属性设置成第二个Data控件(Data2)。
6)、把DBComboBox的BoundColumn属性设置成Publishers表的PubID字段。
这样,当它更新第一个Data控件的记录集(Titles)DataFiled字段时,会将DBComboBox控件设置为使用第二个Data控件记录集Publishers的PubID字段。
7)、把ListFiled属性设置成Publishers表格的Name字段。
注意:
ListField属性下拉菜单来源于由RowSource属性指定的Data控件。
这样就指定了Name字段用来填充DBComboBox的列表。
下图显示了该示例的DBComboBox各属性源。
DataField字段与BoundColumn字段应当是一样的,但是它们分别在不同的表格中。
也就是说,这两个字段应该反应这个表格之间的关系。
当运行这个程序时,DBComboBox控件用发行者名字的列来填充。
当用第一个Data控件从Titles表中选择一个记录时,就会发现那标题的发行者的名称显示在DBComboBox的文本框部分。
接着,从DBComboBox控件的名称中选择一个新的记录来改变名称。
把第一个Data控件重新定位到一条不同的记录,然后移回到原来的记录。
注意:
显示的名称已经更新,这表明Titles表格中的PubID字段现在包含了从DBComboBox控件中选出的发行者的PubID字段。
如果往文本框中输入一个不在列表内的名字,则Data控件就无法知道哪一个PubID值与新名字相对应,因而PubID字段会被存储为Null。
2、DBGrid控件
ApexDBGrid控件是类似表格的绑定控件,它显示代表着来自Recordset对象的记录及字段的一系列行和列。
当把DBGrid控件的DataSource属性设置为一个Data控件时,DBGrid控件会被自动地填充,并且其列标题会用Data控件的记录集里的数据自动地设置。
这就提供了大量的“已就绪”的功能,它们允许浏览器和编辑完整的数据库表和查询结果。
可把焦点设在各个单元格上并直接编辑单元格里的数据,也可选择以行或者列为基础的单元格。
由于每一列都有它自己的字体、边框、字卷动、颜色和其他属性,所以它们不用考虑其他列就能设置。
在设计时,能设置列宽和行高以及创建“隐藏”的列。
在运行时可禁止改变其格式。
DBGrid控件依靠另外两个对象:
Data控件的Recordset对象和DBGrid控件本身的Columns对象集合。
DBGrid实际上是Column对象的集合,其中每个对象有不同数量的行。
每一列对应着数据库的一字段,而每一行则对应一个记录。
控件Columns集合的Count属性决定列的数量,而Data控件Recordset的RecordCount属性决定行的数量。
操作中,Row和Col属性决定了网格里的当前单元格。
代码中也可指定当前单元格,或在运行时可用鼠标或箭头键改变当前单元格。
当前单元格改变时,基本Data控件的记录集自动地重新定位在包含选中单元格的记录上。
通过向单元格键入或有计划地改变当前选定的Column对象的Value属性,使各个单元格都能交互式地编辑。
可以使用ApexDBGrid控件快速而简便地显示和浏览数据库表里的所有记录。
执行以下步骤可以用DBGrid显示和浏览一个已有的数据库表:
1)、在新窗体中添加Data控件,再设置其DatabaseName和RecordSource属性为想要显示的数据库和表。
2)、在窗体中添加DBGrid控件,并设置其DataSource属性为刚创建的Data控件。
3)、运行程序。
程序运行时,指定的数据库表将完整地与列标题(来自Data控件记录集的)和滚动条一起显示在DBGrid里,如图所示:
可直接滚动表的所有记录和字段。
另外,还可编辑表里的任意单元格。
当移动到新的一行时,它被自动地更新(假设基本记录是可更改的且DBGrid控件的AllowUpdate属性设为True)。
将AllowAddNew和AllowDelete属性设置为True,通过选择整行并将之删除就能删除该记录。
当第一次创建ApexDBGrid控件时,它只有一列和一行。
它还包括一个空行(在运行时用星号(*)来标示),用于添加新记录,在“属性”窗口中通过设置可改变DBGrid控件的任何可视属性。
当设置DataSource时,DBGrid控件把它自己绑定到由Data控件创建的记录集中。
然后设置各列的编号以及根据Data控件记录集中对应的Field对象各属性设置其他列属性。
“属性”窗口显示整个DBGrid控件的属性。
控件可以移动和改变尺寸。
要设置单个的Column对象的属性,必须把DBGrid控件置为UI活动的,选择鼠标右键,再从控件的弹出菜单中选取“编辑”。
使用弹出菜单可在剪贴板中插入或删除隐,或者剪切和粘贴列。
每一个DBGrid控件都有单个的属性页。
每一个Column对象也有它自己的属性页。
可以使用这些属性页交互式地设置作为一个整体的DBGrid控件或单个选定的列属性。
“通用”属性页示出应用于整个DBGrid控件的属性并且在设计时可以确定取值。
这些属性在标准“属性”窗口中也有效。
Column对象的属性页显示出单个列的属性。
如果选定多列,则Column属性页中最左边的列先被选择。
设置Column对象属性不会影响整体的DBGrid控件的属性。
Colors属性页允许选择所有DBGrid控件的颜色。
Column对象的颜色不会被这些设置值所影响。
Fonts属性页允许选择所有DBGrid控件和标题的字体。
Column对象字体不会被这些设置值所影响。
在运行时,ApexDBGrid控件从基本Recordset对象中显示记录。
即使些控件中有多行被先,在DBGrid控件中也总是只有一个当前记录。
此当前记录对应于Data控件的当前记录,可以用DBGrid控件的BookMark属性对它进行设置或者检索。
当在DBGrid中改变一个记录(或者一个记录中的任何字段)时,则基本记录集就会在移动到一新记录(行)时被更新(假设它可以更新,并且DBGrid控件的AllowUpdate属性设置为True),否则,就会出现一个可捕获的错误。
如果RecordSelectors属性为True,则通过单击该行的记录选择器图标可以选择一整行。
当选择一个单元格时,Col和Row属性即被设置。
该Column对象的Text与Value属性则引用当前单元格的内容。
在当前选择行中的数据可使用Bookmark属性来访问,Bookmark属性提供了对基本Recordset对象的当前记录的访问。
ApexDBGrid控件还允许选择单元格的范围。
然而,它不提供任何操作范围的自动功能(比如拷贝、删除、或者移动记录或字段的完整的块)。
如果希望实现这种功能,就必须编写代码。
关于选定范围的信息可通过以下两种方法返回:
1)、在SelStartCol和SelEndCol属性中返回这一部分的起始列和结束列。
2)、在SelBookmark属性提供的集合中,选中的行的书签是可用的。
例如,执行以下步骤可以删除选定范围的记录:
1)、在SelBookmarks集合中循环,使用Count属性来检查集合的限制。
每次通过这个循环时,就设置Data控件的Recordset对象的Bookmark属性为SelBookmarks集合中的Bookmark,并且删除记录。
这些步骤在以下代码示例中阐明:
PrivateSubDeleteRows_Click()
DoWhileDataGrid1.SelBookmarks.Count<>0
Data1.Recordset.Bookmark=DataGrid1.SelBookmarks(0)
Data1.Recordset.