




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章VB数据库编程技术,61数据库设计基础,62本地数据库设计(ACCESS),63数据控件,64ODBC,65ADO数据控件,66VB中SQL的实现,67VB中使用ODBC,68网络数据库设计,1.VB中的数据访问VB提供的数据库引擎叫Jet。VB提供了两种与Jet数据库引擎接口的方法:Data控件(DataControl)和数据访问对象(DAO)。这两种方法可以同时使用。,6.1数据库设计基础,Data控件提供了有限的不需编程就能访问现存数据库的功能,DAO模型是全面控制数据库的完整编程接口,VB通过DAO、ADO和Jet引擎可以识别三类数据库:(1)VB数据库也称本地数据库,本地数据库文件格式与MicrosoftAccess相同。Jet引擎直接创建和操作这些数据库。(2)外部数据库访问符合“索引顺序访问文件方法(ISAM)”数据库,包括:dBaseIII、dBaseIV、Foxpro2.0和2.5以及Paradox3.x和4.x。(3)ODBC数据库访问符合ODBC标准的客户机服务器数据库,如MicrosoftSQLServer。,6.1数据库设计基础,2.VB数据库体系结构Jet引擎负责处理存储、检索、更新数据的结构,并提供了功能强大的面向对象的DAO编程接口。(1)VB数据库应用程序的组成VB数据库应用程序包含三部分,如图6.1所示。,图6.1VB数据库应用程序的组成,6.1数据库设计基础,用户界面和应用程序代码用户界面是用户所看见的用于交互的界面,它包括显示数据并允许用户查看或更新数据的窗体。驱动这些窗体的是应用程序的VB代码,包括用来请求数据库服务的数据访问对象和方法,比如添加或删除记录,或执行查询等。,6.1数据库设计基础,Jet引擎Jet引擎实际是一组动态链接库(DLL)文件。在运行时,这些文件被链接到VB程序。它把应用程序的请求翻译成.mdb(Access文件后缀)文件或其他数据库的物理操作。Jet引擎真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性。Jet引擎包含一个查询处理器,接收并执行SQL查询,实现所需的数据操作。Jet引擎包含一个结果处理器,用来管理查询所返回的结果。,6.1数据库设计基础,数据库数据库是包含数据库表的一个或多个文件。本地VB或Access数据库文件后缀为mdb文件。(2)数据库应用程序的存放在单系统机中数据库、数据引擎和用户界面集中存放。在客户机/服务器系统中,数据库引擎和数据库一起被放置在服务器上。数据库引擎可以同时对多个客户机的应用程序提供服务、操作数据库并对每个本地应用程序返回所请求的记录。,6.1数据库设计基础,6.1数据库设计基础,服务器,客户机,客户机服务器引擎,通过ODBC方式使用。在VB中,通过连接到ODBC数据源,如MicrosoftSQLServer等,可直接把查询传递给服务器数据库引擎。,VB中创建和访问数据库的途径主要有3个:可视化数据管理器使用可视化数据管理器,不需要编程就可以创建Jet数据库。DAO使用VB的DAO部件通过编程的方法创建数据库。ISAM或ODBCVB可通过ISAM或ODBC驱动程序来访问外部数据库数据库。,6.2本地数据库设计(ACCESS),1可视化数据管理器数据管理器(DataManager)是VB的一个传统成员,它可以用于快速地建立数据库结构及数据库内容。可以完成有关数据库的操作,比如数据库结构的建立、记录的添加及修改以及用ODBC连接到服务器端的数据库如SQLServer等。启动数据管理器选择“外接程序”菜单下的“可视化数据管理器”项就可以启动数据管理器,打开“VisData”窗口。,6.2本地数据库设计(ACCESS),2)工具栏按钮,6.2本地数据库设计(ACCESS),数据库窗口,SQL语句窗口,显示数据库的结构,包括表名、列名、索引,可输入SQL命令,对数据库中的表进行查询操作,VisData窗口,6.2本地数据库设计(ACCESS),设置记录集的访问方式,指定数据表中数据的显示方式,进行事务处理,6.2本地数据库设计(ACCESS),表类型记录集按钮,允许直接对数据库中的数据进行增、删、改、查等操作。,动态集类型记录集按钮,将指定的数据打开并读入到内存中,进行数据编辑操作。,快照类型记录集,只能读数据不能修改,适用于只查询的情况,6.2本地数据库设计(ACCESS),指定数据表中数据的显示方式,在新窗体上使用DATA控件,指定数据表中数据的显示方式,在新窗体上不使用DATA控件,指定数据表中数据的显示方式,在新窗体上使用DBGrid控件,进入,2具体实现1)建立数据库数据库student.mdb(学生数据库)中的表定义:学生成绩表(学号,课程,成绩,学期)。,6.2本地数据库设计(ACCESS),基本情况表(学号,姓名,性别,专业,出生年月,照片,备注),6.2本地数据库设计(ACCESS),学生基本情况表结构字段名类型宽度学号Text6姓名Text10性别Text2专业Text10出生年月Date8照片Binary0备注Memo0,添加数据表建立索引建立索引可以加快检索速度。2)录入数据照片的输入:静态设置:通过一个图片编辑程序将照片装入剪贴板,等待从剪贴板复制到Picture1控件。,6.3.1数据控件属性,动态设置:通过Picture1_DblClick事件来完成剪贴板到Picture1控件的复制,当移动记录指针时,Picture1控件内的照片存入数据库。PrivateSubPicture1_DblClick()Picture1.Picture=Clipboard.GetDataEndSub3)建立查询VB的数据管理器提供了一个图形化的设置查询条件的窗口查询生成器。例如:查询AuthorsID=10或AuthorsID=1的情况,6.2本地数据库设计(ACCESS),进入,Data控件数据控件提供有限的不需编程而能访问现存数据库的功能,允许将VisualBasic的窗体与数据库方便地进行连接。使用数据控件获取数据库中记录的集合,先在窗体上画出控件,再通过它的三个基本属性Connect、DatabaseName和RecordSource设置要访问的数据资源。,6.3数据控件,1Connect属性Connect属性指定数据控件所要连接的数据库类型,VisualBasic默认的数据库是Access的MDB文件,也可连接ODBC等类型的数据库。Access数据库的所有表都包含在一个MDB文件中。,6.3.1数据控件属性,2DatabaseName属性DatabaseName属性指定具体使用的数据库文件名,包括文件所在的路径名。数据库中的基本表名可由RecordSource属性指定。例如,要连接一个MicrosoftAccess的数据库存放在C:Student.mdb.设置DatabaseName=”C:Student.mdb“,该方法可以通过属性栏设置,或在过程中指定.在过程中可以使用相对路径来描述,DatabaseName=”.Student.mdb“。,6.3.1数据控件属性,3RecordSource属性RecordSource确定具体可访问的记录集对象Recordset。该属性值可以是数据库中的单个表名或者是使用SQL查询语言的一个查询。例如,指定Student.mdb数据库中的基本情况表:RecordSource=”基本情况”。例如,访问基本情况表中所有物理系学生的数据。RecordSource=”SelectFrom基本情况Where专业=物理”,,6.3.1数据控件属性,4RecordsetType属性RecordsetType属性确定记录集类型。(1)Table:表记录集类型,一个记录集(单个表)(2)Dynaset:动态集类型,一个动态记录集(多个表),默认值。(3)Snapshot:快照类型,一个记录集静态副本(不可改)5EofAction和BofAction属性当记录指针指向Recordset对象的开始(第一个记录前)或结束(最后一个记录后)时,BofAction和EofAction属性的设置或返回值决定了数据控件要采取的操作。操作属性的取值如表6.1所示。,6.3.1数据控件属性,6.3.1数据控件属性,焦点将从一个记录转换到另一个记录之前,Validate事件发生,6.3.1数据控件属性,与数据控件绑定:数据控件本身不能直接显示记录集中的数据,必须通过能与它绑定的控件来实现。可与数据控件绑定的控件对象有文本框、标签、图像框、图形框、列表框、组合框、复选框、网格、DB列表框、DB组合框、DB网格和OLE容器等控件。要使绑定控件能被数据库约束,必需在设计或运行时对上述控件的两个属性进行设置:DataSource属性该属性通过指定个有效的数据控件连接到一个数据库上。DataField属性该属性设置数据库有效的字段与绑定控件建立联系。,6.3.1数据控件属性,当上述控件与数据控件绑定后,VisualBasic将当前记录的字段值赋给控件。数据控件在装入数据库时,它把记录集的第一个记录作为当前记录。当数据控件的EofAction属性值设置为2时,当记录指针移过记录集结束位,数据控件会自动向记录集加入新的空记录。,绑定控件、数据控件和数据库三者的关系如图下示。,6.3.1数据控件属性,例6.2设计一个窗体用以显示建立的student.mdb数据库中基本情况表的内容。要显示基本情况表中除了备注字段外的6个字段,故需要用6个绑定控件与之对应。这里用一个图形框显示照片和5个文本框显示学号、姓名等数据。,6.3.1数据控件属性,进入,数据控件Data1属性设置Connect属性指定为Access类型DatabaseName属性连接数据库Student.mdbRecordSource属性设置为“基本情况”表。图片框和5个文本框控件属性设置Text1Text5的DataSource属性设置成Data1。Text1Text5的DataField属性分别选择与其对应的字段学号、姓名、性别、专业和出生年月。Picture1的DataField属性选择字段照片,6.3.1数据控件属性,进入,例6.3用数据网格控件MsFlexGrid显示Student.mdb数据库中基本情况表的内容。,6.3.1数据控件属性,进入,数据网格控件的DataSource属性设置为一个Data控件,运行时网格控件的列标题会用Data控件的记录集里的数据自动地设置。MsFlexGrid控件不是VisualBasic工具箱内的默认控件,需要在开发环境中选择“工程|部件”菜单命令,并在随即出现的对话框中选择“MicrosoftFlexGridControl6.0”选项,将其添加到工具箱中。,6.3.1数据控件属性,本例所用控件的属性设置如下表所示。,6.3.1数据控件属性,注意:不可卷动列属性FixedCols=0与FixedCols=1的区别,进入,1Reposition事件Reposition事件激活的条件:当记录集指针从一条记录移到另一条记录,会产生Reposition事件。Reposition事件作用:显示当前指针的位置。,6.3.2数据控件的事件和常用方法,PrivateSubData1_Reposition()Data1.Caption=Data1.Recordset.AbsolutePosition+1EndSub,AbsolutePosition属性指示当前指针值(从0开始)。当单击数据控件对象上的箭头按钮时,数据控件的标题区会显示记录的序号,2.Validate事件Validate事件激活的方法:在焦点转换到一个(第二个)控件之前发生,此时该控件CausesValidation属性值设置为True。Validate事件的作用:用于检查被数据控件绑定控件的状态,例如,由一个记录移到另一个记录;或者焦点由一个文本框移到另一个文本框.,6.3.2数据控件的事件和常用方法,6.3.2数据控件的事件和常用方法,例题:在窗体中放置一个CommandButton和两个TextBox控件,来演示Validate事件和CausesValidation属性的使用。限制条件为:如果Text1没有包含日期或Text2没有包含一个大于10的数字,将阻止焦点的转换。两个TextBox控件的CausesValidation属性在缺省情况为True,这样当把焦点从一个TextBox转换到另一个时,Validate事件发生。,进入,6.3.2数据控件的事件和常用方法,PrivateSubForm_Load()WithCommand1.CausesValidation=False设置该属性为False,当用户单击按钮时,Validate事件不发生。.Caption=HelpEndWithShowWithText1选择Text1的文本并为它设置焦点。.SelLength=Len(Text1.Text).SetFocusEndWithEndSub,With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个属性,可以在With控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。,返回或设置所选择的字符数,6.3.2数据控件的事件和常用方法,PrivateSubCommand1_Click()当单击此按钮时给出用户帮助信息。MsgBox_Text1mustbesettoadate.&VbCrLF&_Text2mustbeanumberlessthan10.“EndSub,回车换行,6.3.2数据控件的事件和常用方法,PrivateSubText1_Validate(KeepFocusAsBoolean)如果值不是一个日期,则保持焦点,除非用户单击Help。IfNotIsDate(Text1.Text)ThenKeepFocus=TrueMsgBoxPleaseinsertadateinthisfield.,Text1EndifEndSub,返回Boolean值指明某表达式是否可以转换为日期。,6.3.2数据控件的事件和常用方法,PrivateSubText2_Validate(KeepFocusAsBoolean)如果值是一个大于10的数字,保持焦点。IfNotIsNumeric(Text2.Text)OrVal(Text2.Text)10ThenKeepFocus=TrueMsgBox_Pleaseinsertanumberlessthanorequalto10.,Text2EndIfEndSub,返回Boolean值指明表达式的值是否为数字。,进入,6.3.2数据控件的事件和常用方法,Validate事件的检查方法:通过Save参数(True或False)判断被连接的数据(被绑定的控件)是否发生变化。通过Action参数判断哪一种操作触发了Validate事件。,6.3.2数据控件的事件和常用方法,6.3.2数据控件的事件和常用方法,保存对Recorded对象的当前记录所做的所有更改。,例如,不允许用户在数据浏览时清空性别数据,可使用下列代码:,6.3.2数据控件的事件和常用方法,PrivateSubData1_Validate(ActionAsInteger,_SaveAsInteger)IfSaveAndLen(Trim(Text3.Text)=0ThenAction=0取消操作MsgBox性别不能为空!EndIfEndSub,检查被数据控件绑定的控件Text3内的数据是否被清空。如果Text3内的数据发生变化,则Save参数返回True,若性别对应的文本框Text3被置空,则通过Action=0取消对数据控件的操作,去除前导空格和末尾空格,3数据控件的常用方法数据控件的内置功能很多,可以在代码中用数据控件的方法访问这些属性。1)Refresh方法当RecordSource在运行时被改变时,使用Refresh方法,将当前指定RecordSource中的数据装入内存工作区,达到激活数据库的作用。,6.3.2数据控件的事件和常用方法,6.3.2数据控件的事件和常用方法,PrivateSubForm_Load()DimMpathAsStringMpath=App.Path获取当前路径IfRight(mpath,1)”/”Thenmpath=mpath+”/”Data1.DatabaseName=mpath+”Student.mdb”连接数据库Data1.RecordSource=基本情况”构成记录集对象Data1.Refresh激活数据控件EndSub,App对象是通过关键字App访问的全局对象。它指定如下信息:应用程序的标题、版本信息、可执行文件的路径及名称以及是否运行前一个应用程序的示例。Path返回或设置当前路径,在编程时无效,运行时有效。,RIGHT(cExpression,nCharacters)Function返回从右边数的n个字符。,2)UpdateControls方法UpdateControls方法从数据库中重新读数据送到被数据控件绑定的控件内。,6.3.2数据控件的事件和常用方法,3)UpdateRecord方法对绑定控件内的数据修改后,数据控件需要移动记录集的指针才能保存修改。如果使用UpdateRecord方法,可强制数据控件将绑定控件内的数据写入到数据库中,而不再触发Validate事件。,记录集Recordset常用的属性和方法。1AbsolutePosition属性AbsolutePosition返回当前指针值,如果是第1条记录,其值为0,该属性为只读属性。2Bof和Eof的属性Bof判定记录指针是否在首记录之前,若Bof为True,则当前位置位于记录集的第1条记录之前。Eof判定记录指针是否在末记录之后,若Eof为True,则当前位置位于记录集的最后1条记录之后。,6.3.3记录集的属性和方法,6.3.2数据控件的事件和常用方法,3Bookmark属性Bookmark属性的值采用字符串类型,用于设置或返回当前指针的标签。在程序中可以使用Bookmark属性重定位记录集的指针。4Nomatch属性在记录集中进行查找时,如果找到相匹配的记录,则Recordset的NoMatch属性为False,否则为True。该属性常与Bookmark属性一起使用。5RecordCount属性RecordCount属性对Recordset对象中的记录计数,使用RecordCount属性可确定Recordset对象中记录的数目。,6.3.3记录集的属性和方法,6Move方法五种Move方法是:MoveFirst将控件移动到第1条记录。MoveLast将控件移动到最后一条记录。MoveNext将控件移动到后一条记录。MovePrevious将控件移动到前一条记录。Moven向前或向后移n条记录,n为指定的数值。,6.3.3记录集的属性和方法,例6.4设计一个窗体用以显示建立的student.mdb数据库中基本情况表的内容。在窗体上用4个命令按钮实现对数据库的操作。,图6.10用按钮代替数据控件对象的箭头按钮,6.3.3记录集的属性和方法,命令按钮Command1_Click事件移至第1条记录,代码如下:,6.3.3记录集的属性和方法,命令按钮Command4_Click事件移至最后一条记录,代码如下:,PrivateSubCommand4_Click()Data1.Recordset.MoveLastEndSub,PrivateSubCommand1_Click()Data1.Recordset.MoveFirstEndSub,使用Move方法需要考虑Recordset对象的边界状态。如果越界,则用MoveFirst方法定位到第1条记录或用MoveLast方法定位到最后一条记录。使用MoveFirst方法定位到第1条记录:,6.3.3记录集的属性和方法,PrivateSubCommand2_Click()Data1.Recordset.MovePreviousIfData1.Recordset.BOFThenData1.Recordset.MoveFirstEndSub,使用MoveLast方法定位到最后一条记录:,6.3.3记录集的属性和方法,PrivateSubCommand3_Click()Data1.Recordset.MoveNextIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub,7Find方法使用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记录集的属性和方法,6.3.3记录集的属性和方法,PrivateSubCommand1_Click()Data1.Recordset.FindFirst”course”=English“IfData1.Recordset.NoMatchThenMsgBox”Nosuchrecordfound”ElseMsgBoxData1.Recordset.Fields(“course”)EndIfEndSub,8Seek方法Seek方法:是根据索引字段的值,查找与指定索引规则相符的第1条记录,并使之成为当前记录。其语法格式为:数据表对象.seekcomparison,keyl,key2比较运算符comparison;可用的比较运算符有=、=、=1AndAction=4ThenCommand1.Caption=新增Command3.Caption=修改Command1.Enabled=TrueCommand2.Enabled=TrueCommand3.Enabled=TrueCommand4.Enabled=FalseEndIfEndSub,MoveFirst,MoveLast,进入,1ODBC概述存在问题使用数据库系统所提供的专用开发工具(如嵌入式SQL语言),开发的应用程序只能运行在特定的数据库系统环境下,适应性和可移植性比较差。使用数据库系统所提供的嵌入式SQL语言,一个应用程序只能连接同类的DBMS,而无法同时访问多个不同的DBMS;在实际应用中通常是需要同时访问多个不同的DBMS。这种情况下传统的数据库应用程序开发方法就难以实现。为了解决这些问题,Microsoft公司开发了ODBC。,6.4ODBC,ODBC(OpenDataBaseConnectivity,即开放数据库互连)是Microsoft公司开发的一套开放数据库系统应用程序接口规范,目前它已成为一种工业标准,它提供了统一的数据库应用编程接口(API),为应用程序提供了一套高层调用接口规范和基于动态连接库的运行支持环境。使用ODBC开发数据库应用时,应用程序调用的是标准的ODBC函数和SQL语句
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国管理咨询行业企业战略转型与商业模式重构报告
- 2025-2030中国管理咨询人才结构优化与专业服务能力提升策略报告
- 2025-2030中国稀土永磁材料在风电领域需求增长与供应安全报告
- 综合复习与测试教学设计初中信息技术鲁教版新版2018第2册-鲁教版2018
- 22.1.2二次函数y=ax2的图象和性质 说课稿 2024-2025学年人教版九年级数学上册
- 3.3元素第一课时说课稿-2023-2024学年九年级化学人教版上册001
- 中学语文期中考试试题及命题分析
- 《数数数的组成》(教学设计)-一年级下册数学人教版(2024)
- 实验室生物安全检测题库及答案解析
- 矿山闭坑规划-洞察与解读
- 小班歌唱活动《小手拍拍》
- 急救器械与设备的使用与维护
- 转租房转租合同
- 147-2020-PM01 安全防护及维修技术文件应用学习通课后章节答案期末考试题库2023年
- 东华大学画法几何及工程制图第2章平面
- 油气管道保护工(中级)题库(516道)
- A0726 非授权人员进入保密要害部门、部位审批表
- JJF 1012-2007湿度与水分计量名词术语及定义
- GB/T 25729-2010粮油机械撞击松粉机
- GB/T 13912-2020金属覆盖层钢铁制件热浸镀锌层技术要求及试验方法
- 2022年泰安市中考英语试题(含答案)
评论
0/150
提交评论