《Visual Basic数据库编程.ppt》由会员分享,可在线阅读,更多相关《Visual Basic数据库编程.ppt(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Visual Basic数据库编程数据库编程主讲:贺金平概述概述n nVisual Basic作为应用程序的开发“利器”也表现在数据库应用程序的开发上,它良好的界面和强大的控件功能使数据库编程变得简单多了。n n不仅要求学习者熟悉VB中关于数据库编程方面的知识还要了解数据库的知识。VB中可以联接的数据库类型中可以联接的数据库类型n n在Visual Basic中通过数据访问控件或数据访问对象(DAO)可以访问下列数据库:n n1 JET数据库,即Microsoft Accessn n2 ISAM数据库,如:dBase,FoxPro等n n3 ODBC数据库,凡是遵循ODBC标准的客户/服务器数
2、据库。如:Microsoft SQL Server、Oracle数据库的选择数据库的选择n n一般来说,如果要开发个人的小型数据库系统,用Access、dBase和FoxPro数据库比较合适,n n要开发大、中型的数据库系统用ODBC数据库更为适宜。Acces数据库与数据库与VB的联接的联接n nAccess数据库有两种方法:n n一是在Microsoft Access中建立数据库。点击“新建”按钮就可以建立新的表了。n n第二种方法:使用可视化数据管理器,不需要编程就可创建数据库。可视化数据管理器(Visdata.exe)是一个非常有用的应用程序,它是VB企业版和专业版附带的,在安装目录下。
3、DATA数据控件数据控件n n属性属性n nCONNECTCONNECT属性属性 指定打开的数据库类型,并且包指定打开的数据库类型,并且包括参数,如用户和口令等。括参数,如用户和口令等。n n例如:打开例如:打开AccessAccess数据库(缺省)数据库(缺省)n nCONNECT=“ACCESS”CONNECT=“ACCESS”n n打开打开ODBCODBC数据库数据库n nCONNECT=“ODBCCONNECT=“ODBC;DATABASE=DATABASE=?;?;UID=UID=?;?;PWD=PWD=?;?;DSN=DSN=?”n nDATABASENAMEDATABASENAM
4、E属性属性 确定数据控件访问哪一个数据库。确定数据控件访问哪一个数据库。n n对于多表数据库它为具体的数据库文件名,例如:对于多表数据库它为具体的数据库文件名,例如:ACCESSACCESS数据库数据库n nDATABASENAME=“DDATABASENAME=“D:.DEMO.MDB.DEMO.MDBn n对于单表数据库它为具体的数据库文件所在的目录,对于单表数据库它为具体的数据库文件所在的目录,而具体文件名放在而具体文件名放在RECORDSOURCERECORDSOURCE属性中,属性中,n n例如例如:访问访问FOXPROFOXPRO数据库文件数据库文件DD:FOXDEMO.DBFFO
5、XDEMO.DBFn nDATABASENAME=“D:FOX”DATABASENAME=“D:FOX”n nRECORDSOURCE=“DEMO”RECORDSOURCE=“DEMO”不带文件扩展名不带文件扩展名n nRECORDSOURCERECORDSOURCE属性属性n n确定数据控件的记录集确定数据控件的记录集,即即:所要访问的数据内容。所要访问的数据内容。它可以是一个表名、存储查询名或它可以是一个表名、存储查询名或SQLSQL语句。例语句。例如:访问如:访问RegisterRegister表所有数据表所有数据 :n nRECORDSOURCE=“Register”RECORDSOU
6、RCE=“Register”访问访问RCRC表中表中19731973年年以前出生的数据:以前出生的数据:n nRECORDSOURCE=“SELECT*FROM Register RECORDSOURCE=“SELECT*FROM Register WHERE BIRTHDAY#1/1/1973#WHERE BIRTHDAY#1/1/1973#n n注意:当我们在运行时修改了该属性后,需要调注意:当我们在运行时修改了该属性后,需要调用用REFRESHREFRESH方法刷新记录集。方法刷新记录集。n n方法方法n nREFRESHREFRESH方法方法 当在运行时修改了当在运行时修改了Recor
7、dSourceRecordSource属属性后,需要调用该方法刷新记录集。性后,需要调用该方法刷新记录集。n nUPDATERECORDUPDATERECORD方法方法 将绑定在数据控件上的控将绑定在数据控件上的控件的数据写入数据库中。即件的数据写入数据库中。即:当我们修改了数据后当我们修改了数据后调用该方法确定修改。调用该方法确定修改。n nCANCELUPDATECANCELUPDATE方法方法 将数据库中的数据重新读将数据库中的数据重新读到绑定在数据控件上的控件中。即到绑定在数据控件上的控件中。即:当我们修改了当我们修改了数据后调用该方法放弃修改。数据后调用该方法放弃修改。n n事件事件
8、n nVALIDATEVALIDATE事件事件 当我们移动记录集记录指针时发生。当我们移动记录集记录指针时发生。例如:我们将记录集记录指针从例如:我们将记录集记录指针从A A移动到记录移动到记录B B时当产生时当产生VALIDATEVALIDATE事件时,记录指针仍在记录事件时,记录指针仍在记录A A上。上。n nSub Sub XXXX_ValidateXXXX_Validate(Action As integerAction As integer,Save As integerSave As integer)n n其中:其中:n nAction Action 指出如何产生了该事件,如:移动
9、,增加,查询等。指出如何产生了该事件,如:移动,增加,查询等。n nSave Save 表示是否保存已修改的数据。当我们修改了绑定在数表示是否保存已修改的数据。当我们修改了绑定在数据控件的数据,又没有据控件的数据,又没有UPDATERECORDUPDATERECORD,则移动指针时,则移动指针时,Save=TrueSave=True。如果在事件中令。如果在事件中令Save=FalseSave=False,则放弃修改。,则放弃修改。n n例如:例如:n nSub Sub XXXX_Validate(ActionXXXX_Validate(Action As As integer,Saveinte
10、ger,Save As integer)As integer)n nIf Save thenIf Save thenn nI=I=MsgBox(DadaMsgBox(Dada changed,Save?,vbYesNochanged,Save?,vbYesNo)n nIf I=If I=vbNovbNo then thenn nSave=FalseSave=Falsen nEnd ifEnd ifn nEnd ifEnd ifn nEnd SubEnd Subn nRepositionReposition事件事件 当我们移动记录集指针时发生。例当我们移动记录集指针时发生。例如:我们将记录集记录
11、指针从如:我们将记录集记录指针从A A移动到记录移动到记录B B 时,时,当产生当产生RepositionReposition事件时,记录指针已移动到事件时,记录指针已移动到B B上。上。n n通常我们在该事件中显示当前的指针位置。例如:通常我们在该事件中显示当前的指针位置。例如:n nSub Sub XXXX_RepositionXXXX_Reposition()()n nXXXX.CaptionXXXX.Caption=?=?n nXXXX.RecordSet.AbsolutePositionXXXX.RecordSet.AbsolutePosition+1+1n nEnd SubEnd
12、SubData链接链接Access数据库数据库n n在DATA控件的CONNECT属性中,选中“ACCESS”项,在DatabaseName属性中,输入“数据库名及路径”,在RecordSource属性中,选中“表名”,这样就完成了数据库与DATA控件的连接,也就是完成了与应用程序的连接。绑定到控件绑定到控件n n在在VBVB中,可以将普通控件绑定在数据控件上,来完成自动中,可以将普通控件绑定在数据控件上,来完成自动地显示、更新记录集的数据。常用的可绑定的控件有:地显示、更新记录集的数据。常用的可绑定的控件有:Label,Text,checkBox,ImageLabel,Text,checkB
13、ox,Image等。通过设置这些控件的等。通过设置这些控件的DataSourceDataSource和和DataFieldDataField属性来完成绑定。属性来完成绑定。n n完成完成DATADATA控件的连接之后,在控件的连接之后,在Text1Text1控件的控件的DataSourceDataSource属属性中,选中性中,选中“Data1”Data1”,在,在DataFieldDataField属性中,选中属性中,选中“姓名姓名”值。用同样的方法,将各个文本框分别绑定到对应的字值。用同样的方法,将各个文本框分别绑定到对应的字段上,就完成了文本框的捆绑。段上,就完成了文本框的捆绑。n nD
14、ataSourceDataSource 属性属性 表示绑定到哪一个数据控件上,程序中可表示绑定到哪一个数据控件上,程序中可能使用多个数据控件。能使用多个数据控件。n nDataFieldDataField 属性属性 表示绑定到记录集的哪一个记录上。表示绑定到记录集的哪一个记录上。Recordset 对象对象n n当应用程序启动时,Data 控件被自动地初始化。如果 Connect、DatabaseName、Options、RecordSource、Exclusive、ReadOnly 和 RecordsetType 属性是合法的,Microsoft Jet 数据库引擎就会试图创建一个新的基于这
15、些属性的 Recordset 记录集对象。Recordset 对象可以表示表中的记录或者作为查询结果的记录,使用 Recordset 对象可以在记录一级上对数据库中的数据进行处理。Recordset 对象对象n nRecordsetRecordset 对象有三种类型:表、动态集、快照,对象有三种类型:表、动态集、快照,它们之间存在明显的区别它们之间存在明显的区别。n n表类型的表类型的 RecordsetRecordset 对象是指当前数据库中的表在对象是指当前数据库中的表在创建表类型的记录集时,数据库引擎打开的表。创建表类型的记录集时,数据库引擎打开的表。后续的数据操作都是直接对表进行的。只
16、能对单后续的数据操作都是直接对表进行的。只能对单个的表打开表类型的记录集,而不能对联接或者个的表打开表类型的记录集,而不能对联接或者联合查询打开表类型的记录集。与其它类型的联合查询打开表类型的记录集。与其它类型的 RecordsetRecordset 对象相比,表类型的搜索与排序速度最对象相比,表类型的搜索与排序速度最快快。n n动态集类型的动态集类型的 RecordsetRecordset 对象可以是本地的表,也可以对象可以是本地的表,也可以是返回的行查询结果。它实际上是对一个或者几个表中的是返回的行查询结果。它实际上是对一个或者几个表中的记录的一系列引用。可用动态集从多个表中提取和更新数记
17、录的一系列引用。可用动态集从多个表中提取和更新数据,其中包括链接的其它数据库中的表。动态集类型具有据,其中包括链接的其它数据库中的表。动态集类型具有一种与众不同的特点:不同数据库的可更新联接。利用这一种与众不同的特点:不同数据库的可更新联接。利用这种特性,可以对不同类型的数据库中的表进行可更新的联种特性,可以对不同类型的数据库中的表进行可更新的联接查询。动态集和它的基本表可以互相更新。如果动态集接查询。动态集和它的基本表可以互相更新。如果动态集中的记录发生改变,同样的变化也将在基本表中反映出来。中的记录发生改变,同样的变化也将在基本表中反映出来。在打开动态集的时候,如果其他的用户修改了基本表,
18、那在打开动态集的时候,如果其他的用户修改了基本表,那么动态集中也将反映出被修改过的记录。动态集类型是最么动态集中也将反映出被修改过的记录。动态集类型是最灵活的灵活的RecordsetRecordset 类型,也是功能最强的。不过,它的搜索类型,也是功能最强的。不过,它的搜索速度与其它操作的速度不及表类型的速度与其它操作的速度不及表类型的 RecordsetRecordset。n n快照类型的快照类型的 RecordsetRecordset 对象包含的数据是固定的,它反映对象包含的数据是固定的,它反映了在产生快照的一瞬间数据库的状态。从了在产生快照的一瞬间数据库的状态。从 Microsoft J
19、et Microsoft Jet 数数据源得到的快照是不可更新的,从开放数据库互连据源得到的快照是不可更新的,从开放数据库互连 (ODBC)(ODBC)数据源得到的某些快照是可以更新的,这取决于数据库系数据源得到的某些快照是可以更新的,这取决于数据库系统本身的能力。与动态集类型和表类型的统本身的能力。与动态集类型和表类型的 RecordsetRecordset 对象对象相比,快照的处理开销较少。因此,它执行查询和返回数相比,快照的处理开销较少。因此,它执行查询和返回数据的速度更快,特别是在使用据的速度更快,特别是在使用 ODBC ODBC 数据源时。快照类数据源时。快照类型保存了表中所有记录的
20、完整复本,因此,如型保存了表中所有记录的完整复本,因此,如 果记录的个果记录的个数很多,快照的性能将比动态集慢得多。为了确定快照与数很多,快照的性能将比动态集慢得多。为了确定快照与动态集哪一个更快,可以先以动态集方式打开记录集,然动态集哪一个更快,可以先以动态集方式打开记录集,然后再以快照方式打开它后再以快照方式打开它。n n具体使用什么记录集,取决于需要完成的任务:是要更改数据呢,还是简单地查看数据。例如,如果必须对数据进行排序或者使用索引,可以使用表。因为表类型的 Recordset 对象是做了索引的,它定位数据的速度是最快的。如果希望能够对查询选定的一系列记录进行更新,可以使用动态集。如
21、果在特殊的情况下不能使用表类型的记录集,或者只须对记录进行扫描,那么使用快照类型可能会快一些。RecordSet记录集属性记录集属性n nBOFBOF属性属性 当记录集记录指针指向第一条记录时返回当记录集记录指针指向第一条记录时返回TrueTruen nEOFEOF属性属性 当记录集记录指针指向最后一条记录时返回当记录集记录指针指向最后一条记录时返回TrueTruen nAbsloutePositionAbsloutePosition属性属性 返回当前记录集记录指针,第一条记返回当前记录集记录指针,第一条记录为录为0 0,是只读属性,是只读属性n nBookmarkBookmark属性属性 S
22、tringString类型,返回或设置当前记录集记录指类型,返回或设置当前记录集记录指针的书签,是可读写属性。每一条记录都有自己唯一的书针的书签,是可读写属性。每一条记录都有自己唯一的书签,它与记录在记录集中的顺序无关。将签,它与记录在记录集中的顺序无关。将BookmarkBookmark属性存属性存放到变量中,后面可以通过将该变量赋值给放到变量中,后面可以通过将该变量赋值给BookmarkBookmark属性,属性,并返回到这个记录。并返回到这个记录。n n注意:程序中使用注意:程序中使用BookMarkBookMark属性重定位记录指针,而不能属性重定位记录指针,而不能使用使用Abslou
23、tepositionAbsloutepositionn nNoMatchNoMatch属性属性 当我们使用当我们使用FindFind方法查询时如果未找到则返方法查询时如果未找到则返回回TrueTrue。常与。常与BookMarkBookMark属性同时使用。属性同时使用。n n例如:查找例如:查找NAMENAME字段中第一个姓李的人字段中第一个姓李的人n nDim S As StringDim S As Stringn nWith Data1.RecordSetWith Data1.RecordSetn nS=.S=.BookMarkBookMarkn n.FindFirstFindFirst
24、 NAME Like NAME Like 李李*n nif.if.NoMatchNoMatch then thenn nMsgBoxMsgBox 数据未找到数据未找到“n n.BookMarkBookMark=S=Sn nEnd ifEnd ifn nEnd WithEnd With记录集方法记录集方法n nAddNewAddNew方法方法 向记录集增加一条新记录向记录集增加一条新记录n nDeleteDelete方法方法 从记录集中将当前记录删除。在删除从记录集中将当前记录删除。在删除后常使用后常使用MoveNextMoveNext方法移动指针。方法移动指针。n n例如:例如:With Da
25、ta1.RecordSetWith Data1.RecordSet.Delete.Delete.MoveNextMoveNextif.EOF then.if.EOF then.MoveLastMoveLastEnd WithEnd WithRecordset的方法的方法n nMoveFirstMoveFirst 将记录集指针移动到第一条记录上将记录集指针移动到第一条记录上n nMoveLastMoveLast 将记录集指针移动到最后一条记录上将记录集指针移动到最后一条记录上n nMovePreviousMovePrevious 将记录集指针移动到前一条记录上将记录集指针移动到前一条记录上n nMoveNextMoveNext 将记录集指针移动到下一条记录上将记录集指针移动到下一条记录上n nFindFirstFindFirst在记录集中查询符合条件的第一条记录在记录集中查询符合条件的第一条记录n nFindLastFindLast 在记录集中查询符合条件的最后一条记录在记录集中查询符合条件的最后一条记录n nFindPreviousFindPrevious 在记录集中查询符合条件的前一条记录在记录集中查询符合条件的前一条记录n nFindNextFindNext 在记录集中查询符合条件的下一条记录在记录集中查询符合条件的下一条记录
限制150内