![visual basic程序设计基础_第1页](http://file4.renrendoc.com/view/169fb96a76ccdd71eeddf171b1bfb011/169fb96a76ccdd71eeddf171b1bfb0111.gif)
![visual basic程序设计基础_第2页](http://file4.renrendoc.com/view/169fb96a76ccdd71eeddf171b1bfb011/169fb96a76ccdd71eeddf171b1bfb0112.gif)
![visual basic程序设计基础_第3页](http://file4.renrendoc.com/view/169fb96a76ccdd71eeddf171b1bfb011/169fb96a76ccdd71eeddf171b1bfb0113.gif)
![visual basic程序设计基础_第4页](http://file4.renrendoc.com/view/169fb96a76ccdd71eeddf171b1bfb011/169fb96a76ccdd71eeddf171b1bfb0114.gif)
![visual basic程序设计基础_第5页](http://file4.renrendoc.com/view/169fb96a76ccdd71eeddf171b1bfb011/169fb96a76ccdd71eeddf171b1bfb0115.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1visualbasic程序设计基础1.VB中的数据访问VB提供的数据库引擎叫Jet。VB提供了两种与Jet数据库引擎接口的方法:Data控件(DataControl)和数据访问对象(DAO)。这两种方法可以同时使用。
6.1数据库设计基础
Data控件提供了有限的不需编程就能访问现存数据库的功能DAO模型是全面控制数据库的完整编程接口第1页/共93页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页/共93页2.VB数据库体系结构Jet引擎负责处理存储、检索、更新数据的结构,并提供了功能强大的面向对象的DAO编程接口。(1)
VB数据库应用程序的组成VB数据库应用程序包含三部分,如图6.1所示。图6.1VB数据库应用程序的组成6.1数据库设计基础
用户界面Jet引擎数据库第3页/共93页①用户界面和应用程序代码用户界面是用户所看见的用于交互的界面,它包括显示数据并允许用户查看或更新数据的窗体。驱动这些窗体的是应用程序的VB代码,包括用来请求数据库服务的数据访问对象和方法,比如添加或删除记录,或执行查询等。
6.1数据库设计基础
第4页/共93页②Jet引擎Jet引擎实际是一组动态链接库(DLL)文件。在运行时,这些文件被链接到VB程序。它把应用程序的请求翻译成.mdb(Access文件后缀)文件或其他数据库的物理操作。Jet引擎真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性。Jet引擎包含一个查询处理器,接收并执行SQL查询,实现所需的数据操作。6.1数据库设计基础
第5页/共93页③数据库数据库是包含数据库表的一个或多个文件。本地VB或Access数据库文件后缀为.mdb文件。(2)数据库应用程序的存放在单系统机中数据库、数据引擎和用户界面集中存放。在客户机/服务器系统中,数据库引擎和数据库一起被放置在服务器上。数据库引擎可以同时对多个客户机的应用程序提供服务、操作数据库并对每个本地应用程序返回所请求的记录。6.1数据库设计基础
第6页/共93页6.1数据库设计基础
数据库数据库引擎用户界面服务器客户机客户机/服务器引擎,通过ODBC方式使用。在VB中,通过连接到ODBC数据源,如MicrosoftSQLServer等,可直接把查询传递给服务器数据库引擎。第7页/共93页
VB中创建和访问数据库的途径主要有3个:可视化数据管理器使用可视化数据管理器,不需要编程就可以创建Jet数据库。DAO使用VB的DAO部件通过编程的方法创建数据库。ISAM或ODBC
VB可通过ISAM或ODBC驱动程序来访问外部数据库数据库。6.2本地数据库设计(ACCESS)第8页/共93页1.可视化数据管理器数据管理器(DataManager)是VB的一个传统成员;用于快速地建立数据库结构及数据库内容。可以完成有关数据库的操作,比如数据库结构的建立、记录的添加及修改以及用ODBC连接到服务器端的数据库如SQLServer等。启动数据管理器选择“外接程序”菜单下的“可视化数据管理器”项就可以启动数据管理器,打开“VisData”窗口。6.2本地数据库设计(ACCESS)第9页/共93页
2)工具栏按钮6.2本地数据库设计(ACCESS)数据库窗口SQL语句窗口显示数据库的结构,包括表名、列名、索引可输入SQL命令,对数据库中的表进行查询操作VisData窗口
第10页/共93页6.2本地数据库设计(ACCESS)设置记录集的访问方式指定数据表中数据的显示方式进行事务处理第11页/共93页6.2本地数据库设计(ACCESS)表类型记录集按钮,允许直接对数据库中的数据进行增、删、改、查等操作。动态集类型记录集按钮,将指定的数据打开并读入到内存中,进行数据编辑操作。快照类型记录集,只能读数据不能修改,适用于只查询的情况第12页/共93页6.2本地数据库设计(ACCESS)指定数据表中数据的显示方式,在新窗体上使用DATA控件指定数据表中数据的显示方式,在新窗体上不使用DATA控件指定数据表中数据的显示方式,在新窗体上使用DBGrid控件进入第13页/共93页2.具体实现1)建立数据库数据库student.mdb(学生数据库)中的表定义:
学生成绩表(学号,课程,成绩,学期)。6.2本地数据库设计(ACCESS)
学生成绩表结构字段名类型宽度学号Text6课程Text10成绩Long4学期Text2第14页/共93页基本情况表(学号,姓名,性别,专业,出生年月,照片,备注)6.2本地数据库设计(ACCESS)学生基本情况表结构字段名类型宽度学号Text6姓名Text10性别Text2专业Text10出生年月Date8照片Binary0备注Memo0第15页/共93页2)录入数据照片的输入:静态设置:通过一个图片编辑程序将照片装入剪贴板,等待从剪贴板复制到Picture1控件。动态设置:通过Picture1_DblClick事件来完成剪贴板到Picture1控件的复制,当移动记录指针时,Picture1控件内的照片存入数据库。PrivateSubPicture1_DblClick()Picture1.Picture=Clipboard.GetDataEndSub6.3.1数据控件属性第16页/共93页3)建立查询VB的数据管理器提供了一个图形化的设置查询条件的窗口——查询生成器。例如:查询AuthorsID=10或AuthorsID=1的情况6.2本地数据库设计(ACCESS)进入第17页/共93页Data控件数据控件提供有限的不需编程而能访问现存数据库的功能,允许将VisualBasic的窗体与数据库方便地进行连接。使用数据控件获取数据库中记录的集合,先在窗体上画出控件,再通过它的三个基本属性Connect、DatabaseName和RecordSource设置要访问的数据资源。6.3数据控件第18页/共93页1.Connect属性Connect属性指定数据控件所要连接的数据库类型,VisualBasic默认的数据库是Access的MDB文件,也可连接ODBC等类型的数据库。Access数据库的所有表都包含在一个MDB文件中。6.3.1数据控件属性第19页/共93页2.DatabaseName属性DatabaseName属性指定具体使用的数据库文件名,包括文件所在的路径名。数据库中的基本表名可由RecordSource属性指定。例如,要连接一个MicrosoftAccess的数据库存放在C:\Student.mdb.设置DatabaseName=”C:\Student.mdb“,该方法可以通过属性栏设置,或在过程中指定.在过程中可以使用相对路径来描述,DatabaseName=”..\Student.mdb“。6.3.1数据控件属性第20页/共93页3.RecordSource属性RecordSource确定具体可访问的记录集对象Recordset。该属性值可以是数据库中的单个表名或者是使用SQL查询语言的一个查询。例如,指定Student.mdb数据库中的基本情况表:RecordSource=”基本情况”。例如,访问基本情况表中所有物理系学生的数据。RecordSource=”SelectFrom基本情况Where专业=’物理’
”,6.3.1数据控件属性第21页/共93页4.RecordsetType属性RecordsetType属性确定记录集类型,可静态或动态设定。(1)Table:表记录集类型,一个记录集(单个表)(2)Dynaset:动态集类型,一个动态记录集(多个表),默认值。(3)Snapshot:快照类型,一个记录集静态副本(不可改)6.3.1数据控件属性第22页/共93页5.EofAction和BofAction属性可静态或动态设定。当记录指针指向Recordset对象的开始(第一个记录前)或结束(最后一个记录后)时,BofAction和EofAction属性的设置或返回值决定了数据控件要采取的操作。操作属性的取值如表6.1所示。6.3.1数据控件属性第23页/共93页6.3.1数据控件属性属性值设置操作BofAction0vbBOFActionMoveFirst控件重定位到第1个记录(缺省)1vbBOFActionBOF移过Recordset的开始位,定位到一个无效记录;将在第一个记录上触发Data控件的Validate事件,紧跟着是非法(BOF)记录上的Reposition事件。此刻禁止Data控件上的MovePrevious按钮。焦点将从一个记录转换到另一个记录之前,Validate事件发生
该事件发生在某行变为当前行之后
第24页/共93页6.3.1数据控件属性属性值设置操作EofAction0vbEOFActionMoveLast控件重定位到最后一个记录(缺省)1vbEOFActionEOF移过Recordset的结尾,定位到一个无效记录;在最后一个记录上触发Data控件的Validate事件,紧跟着是在非法(EOF)记录上的事件
Reposition.此刻禁止Data控件上的MoveNext按钮.2vbEOFActionAddNew移过最后一个记录,在当前记录上触发Data控件的Validate事件,紧跟着是自动的AddNew,向记录集加入新的空记录,接下来是在新记录上的Reposition事件,移动记录指针,新记录写入数据库.第25页/共93页6.与数据控件绑定数据控件本身不能直接显示记录集中的数据,必须通过能与它绑定的控件来实现。可与数据控件绑定的控件对象有:文本框、标签、图像框、图形框、列表框、组合框、复选框、网格、DB列表框、DB组合框、DB网格和OLE容器等。要使绑定控件能被数据库约束,必需在静态或动态时对上述控件的两个属性进行设置:DataSource属性该属性通过指定—个有效的数据控件连接到一个数据库上。DataField属性该属性设置数据库有效的字段与绑定控件建立联系。6.3.1数据控件属性第26页/共93页数据控件在装入数据库时,它把记录集的第一个记录作为当前记录。当上述控件与数据控件绑定后,VB将当前记录的字段值赋给控件。绑定控件、数据控件和数据库三者的关系如图下示。6.3.1数据控件属性绑定控件数据库第27页/共93页例6.2设计一个窗体用以显示建立的student.mdb数据库中基本情况表的内容。要显示基本情况表中除了备注字段外的6个字段,故需要用6个绑定控件与之对应。这里用一个图形框显示照片和5个文本框显示学号、姓名等数据。6.3.1数据控件属性进入第28页/共93页数据控件Data1属性设置Connect属性指定为Access类型DatabaseName属性连接数据库Student.mdbRecordSource属性设置为“基本情况”表。图片框和5个文本框控件属性设置Text1~Text5的DataSource属性设置成Data1。Text1~Text5的DataField属性分别选择与其对应的字段学号、姓名、性别、专业和出生年月。Picture1的DataField属性选择字段照片6.3.1数据控件属性进入第29页/共93页例6.3用数据网格控件MsFlexGrid显示Student.mdb数据库中基本情况表的内容。6.3.1数据控件属性进入第30页/共93页MsFlexGrid控件不是VisualBasic工具箱内的默认控件,需要在开发环境中选择“工程|部件”菜单命令,并在随即出现的对话框中选择“MicrosoftFlexGridControl6.0”选项,将其添加到工具箱中。数据网格控件的DataSource属性设置为一个Data控件,运行时网格控件的列标题会用Data控件的记录集里的数据自动地设置。6.3.1数据控件属性第31页/共93页
DataSource=Data1FixedCols=0MSFlexGrid1DatabaseName=”c:\student.mdb”RecordsetType=1RecordSource=”基本情况”Data1其它属性设置默认控件名表6.4控件属性本例所用控件的属性设置如下表所示。6.3.1数据控件属性注意:不可卷动列属性FixedCols=0与FixedCols=1的区别进入第32页/共93页1.Reposition事件Reposition事件激活的条件:当记录集指针从一条记录移到另一条记录,会产生Reposition事件。Reposition事件作用:显示当前指针的位置。6.3.2数据控件的事件和常用方法PrivateSubData1_Reposition()Data1.Caption=Data1.Recordset.AbsolutePosition+1EndSubAbsolutePosition属性指示当前指针值(从0开始)。当单击数据控件对象上的箭头按钮时,数据控件的标题区会显示记录的序号第33页/共93页2.Validate事件Validate事件激活的方法:在焦点转换到一个(第二个)控件之前发生。该控件CausesValidation属性默认值设置为True。Validate事件的作用:用于检查被数据控件绑定控件的状态,例如,由一个记录移到另一个记录;或者焦点由一个文本框移到另一个文本框.6.3.2数据控件的事件和常用方法第34页/共93页6.3.2数据控件的事件和常用方法例题:在窗体中放置一个CommandButton和两个TextBox控件,来演示Validate
事件和CausesValidation属性的使用。限制条件为:如果Text1没有包含日期或Text2没有包含一个小于10的数字,将阻止焦点的转换。两个TextBox控件的CausesValidation属性在缺省情况为True,这样当把焦点从一个TextBox转换到另一个时,Validate事件发生。进入第35页/共93页6.3.2数据控件的事件和常用方法部分属性方法的使用:(1)控件对象.SetFocus为控件对象设置焦点,例如:Text1.SetFocus(2)KeepFocus保持或取消焦点,例如:KeepFocus
=True(3)Show显示指定的窗体或控件,可以配合KeepFocus方法设置控件的焦点。(4)Val(Text2.Text)将控件对象的字符属性转换为数值属性(5)NotIsDate(控件对象.Text)判断对象的属性是否为日期类型,如是返回Ture(6)NotIsNumeric
(控件对象.Text)判断对象的属性是否为数值,如是返回Ture第36页/共93页6.3.2数据控件的事件和常用方法PrivateSubForm_Load()Command1.CausesValidation=False
‘设置该属性为False,当用户单击按钮时Validate事件不发生。Command1.Caption="Help"Show'显示FromText1.SetFocus
'。EndSub为Text1设置焦点第37页/共93页6.3.2数据控件的事件和常用方法PrivateSubCommand1_Click()
‘当单击此按钮时给出用户帮助信息。MsgBox_
"Text1必须为日期类型的数"&vbCrLf&_"Text2必须为小于或等于10的数."EndSub回车换行第38页/共93页6.3.2数据控件的事件和常用方法PrivateSubText1_Validate(KeepFocusAsBoolean)
‘如果值不是一个日期,则保持焦点,除非用户单击Help。IfNotIsDate(Text1.Text)ThenKeepFocus=TrueMsgBox"请在这里输入日期.",,"Text1"EndifEndSub返回Boolean值指明某表达式是否为日期类型。
第39页/共93页6.3.2数据控件的事件和常用方法PrivateSubText2_Validate(KeepFocusAsBoolean)
‘如果值是一个大于10的数字,保持焦点。
IfNotIsNumeric(Text2.Text)OrVal(Text2.Text)>10ThenKeepFocus=TrueMsgBox_"请输入一个小于或等于10的数.",,"Text2"EndIfEndSub返回Boolean值指明表达式的值是否为数字。进入第40页/共93页6.3.2数据控件的事件和常用方法Validate事件的检查方法:在一条不同的记录成为当前记录之前,Update、Delete、Unload、Find或Close方法操作之前会均会发生Validate事件。通过Save参数(True或False)判断被连接的数据(被绑定的控件)
是否发生变化。Action是一个整数,用来指示引发Validate事件的操作。通过Action参数判断哪一种操作触发了Validate事件。第41页/共93页
6.3.2数据控件的事件和常用方法
Validate事件的Action参数
常数值描述vbDataActionCancel0Sub退出时取消操作vbDataActionMoveFirst1MoveFirst方法。vbDataActionMovePrevious2MovePrevious方法vbDataActionMoveNext3MoveNext方法vbDataActionMoveLast4MoveLast方法。vbDataActionAddNew5AddNew方法第42页/共93页
6.3.2数据控件的事件和常用方法
Validate事件的Action参数
常数值描述vbDataActionUpdate6Update操作。vbDataActionDelete7Delete方法vbDataActionFind8Find方法vbDataActionBookmark9Bookmark属性已被设置vbDataActionClose10Close的方法vbDataActionUnload11窗体正在卸载。保存对Recorded对象的当前记录所做的所有更改。第43页/共93页例如,不允许用户在数据浏览时清空性别数据,可使用下列代码:6.3.2数据控件的事件和常用方法PrivateSubData1_Validate(ActionAsInteger,_SaveAsInteger)IfSaveAndLen(Trim(Text3.Text))=0ThenAction=0'取消本次移动记录指针的操作MsgBox"性别不能为空!"EndIfEndSub
检查控件Text3内的数据是否被清空。如果Text3内数据发生变化,则Save参数返回True,若性别对应的文本框Text3被置空,则通过Action=0取消对数据控件指针移动的操作去除前导空格和末尾空格第44页/共93页3.数据控件的常用方法数据控件的内置功能很多,可以在代码中用数据控件的方法访问这些属性。1)Refresh方法当RecordSource在运行时被改变时,使用Refresh方法,将当前指定RecordSource中的数据装入内存工作区,达到激活数据库中一个表的作用。6.3.2数据控件的事件和常用方法第45页/共93页6.3.2数据控件的事件和常用方法PrivateSubForm_Load()DimMpathAsStringMpath=App.Path’获取当前路径Data1.DatabaseName=mpath+”/”+”Student.mdb”
’连接Student数据库
Data1.RecordSource=‘基本情况’
’连接基本情况表
Data1.Refresh’激活数据控件所连接的表EndSubApp
对象是通过关键字App访问的全局对象。它指定如下信息:应用程序的标题、版本信息、可执行文件的路径及名称以及是否运行前一个应用程序的示例。Path返回或设置当前路径,在编程时无效,运行时有效。第46页/共93页2)UpdateControls方法UpdateControls方法从数据库中重新读数据送到被数据控件绑定的控件内。6.3.2数据控件的事件和常用方法控件DATA控件数据库控件DATA控件数据库
3)UpdateRecord方法对绑定控件内的数据修改后,数据控件需要移动记录集的指针才能保存修改。如果使用UpdateRecord方法,可强制数据控件将绑定控件内的数据写入到数据库中,而不再触发Validate事件。第47页/共93页记录集Recordset常用的属性和方法。1.AbsolutePosition属性AbsolutePosition返回当前指针值,如果是第1条记录,其值为0,该属性为只读属性。2.Bof和Eof的属性Bof判定记录指针是否在首记录之前,若Bof为True,则当前位置位于记录集的第1条记录之前。Eof判定记录指针是否在末记录之后,若Eof为True,则当前位置位于记录集的最后1条记录之后。6.3.3记录集的属性和方法6.3.2数据控件的事件和常用方法第48页/共93页3.Bookmark属性Bookmark属性的值采用字符串类型,用于设置或返回当前指针的标签。在程序中可使用Bookmark属性重定位记录集的指针。4.Nomatch属性在记录集中进行查找时,如果找到相匹配的记录,则Recordset的NoMatch属性为False,否则为True。5.RecordCount属性RecordCount属性对Recordset对象中的记录计数,使用RecordCount属性可确定Recordset对象中记录的数目。6.3.3记录集的属性和方法第49页/共93页6.Move方法
五种Move方法是:MoveFirst将控件移动到第1条记录。MoveLast
将控件移动到最后一条记录。MoveNext
将控件移动到后一条记录。MovePrevious
将控件移动到前一条记录。Move[n]
向前或向后移n条记录,n为指定的数值。6.3.3记录集的属性和方法第50页/共93页例6.4设计一个窗体用以显示建立的student.mdb数据库中基本情况表的内容。在窗体上用4个命令按钮实现对数据库的操作。图6.10用按钮代替数据控件对象的箭头按钮6.3.3记录集的属性和方法第51页/共93页命令按钮Command1_Click事件移至第1条记录,代码如下:6.3.3记录集的属性和方法命令按钮Command4_Click事件移至最后一条记录,代码如下:PrivateSubCommand4_Click()Data1.Recordset.MoveLastEndSubPrivateSubCommand1_Click()Data1.Recordset.MoveFirstEndSub第52页/共93页使用Move方法需要考虑Recordset对象的边界状态。如果越界,则用MoveFirst方法定位到第1条记录或用MoveLast方法定位到最后一条记录。使用MoveFirst方法定位到第1条记录:6.3.3记录集的属性和方法PrivateSubCommand2_Click()Data1.Recordset.MovePreviousIfData1.Recordset.BOFThenData1.Recordset.MoveFirstEndSub第53页/共93页使用MoveLast方法定位到最后一条记录:6.3.3记录集的属性和方法PrivateSubCommand3_Click()Data1.Recordset.MoveNextIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub第54页/共93页7.Find方法使用Find方法可在Recordset对象中查找与指定条件相符的一条记录,并使之成为当前记录。四种Find方法是:FindFirst方法从记录集的开始查找满足条件的第1条记录。FindLast方法从记录集的尾部向前查找满足条件的第l条记录。FindNext方法从当前记录开始查找满足条件的下一条记录。FindPrevious方法从当前记录开始查找满足条件的上一条记录。6.3.3记录集的属性和方法第55页/共93页Find方法的语法格式:4种格式相同
数据集.Find方法条件表达式条件表达式:是一个指定字段与常量关系的字符串表达式。在构造表达式时,除了用普通的关系运算外,还可以用Like运算符例如,查找专业=物理的纪录
“Data1.Recordset.FindFirst专业=’物理’”查找下一条符合条件的记录,可继续使用语句:
”Data1.Recordset.FindNext专业=’物理’”。6.3.3记录集的属性和方法“=”用于精确查找第56页/共93页例如,要在记录集内查找专业名称中带有“建”字的专业:
Data1.Recordset.FindFirst专业Like‘%建%’如果Find方法找不到相匹配的记录,则记录保持在查找的始发处,Recordset的NoMatch属性为True。如果Find方法找到相匹配的记录,则记录定位到该记录,Recordset的NoMatch属性为False。6.3.3记录集的属性和方法“Like”用于模糊查找第57页/共93页6.3.3记录集的属性和方法PrivateSubCommand1_Click()Data1.Recordset.FindFirst“
course=‘English’”IfData1.Recordset.NoMatchThenMsgBox“Nosuchrecordfound”ElseMsgBoxData1.Recordset.Fields(“course”)EndIfEndSub第58页/共93页8.Seek方法Seek方法:是根据索引字段的值,查找与指定索引规则相符的第1条记录,并使之成为当前记录。其语法格式为:
数据表对象.seekcomparison,keyl,key2…比较运算符comparison,可用的比较运算符有:=、>=、>、<>、<、<=Seek允许接受多个参数keyl,key2,…;在使用Seek方法定位记录时,必须打开索引文件,通过Index属性设置索引文件。若在记录集中多次使用同样的Seek方法(参数相同),那么找到的总是同一条记录。6.3.3记录集的属性和方法第59页/共93页例如,假设数据库Student内基本情况表的索引字段为学号,满足学号字段值大于等于200301的第1条记录可使用以下程序代码:6.3.3记录集的属性和方法
DimDbAsDatabase,RsAsRecordset'定义变量
SetDb=OpenDatabase("student.mdb")SetRs=Db.OpenRecordset("基本情况表")SetData1.Recordset=Rs'为Recordset赋值
Data1.Recordset.Index="学号"'打开名称为“学号”的索引
Data1.Recordset.Seek">","200301"IfData1.Recordset.NoMatchThenMsgBox"Nosuchrecordfound"ElseMsgBoxData1.Recordset.Fields("学号")EndIf第60页/共93页数据库记录的增、删、改操作需要使用AddNew、Delete、Edit和Update方法。它们的语法格式为:
数据控件.记录集.方法名1.增加记录
①调用AddNew方法。②给各字段赋值。给字段赋值格式为:Recordset.Fields(”字段名”)=值。③调用Update方法,将缓冲区内的数据写入数据库。6.3.4数据库记录的增删改操作第61页/共93页1.增加记录PrivateSubcmdadd_Click()
Data1.Recordset.AddNewFori=0To5Text1(i).Enabled=TrueText1(i).Text=""NextiText1(0).SetFocusEndSub注:控件对象.EnabledEnabled是设置激活或者禁用控件对象,=True表示激活,=false表示禁止6.3.4数据库记录的增删改操作增加新记录第62页/共93页PrivateSubcmdsave_Click()IfText1(0).Text=""ThenMsgBox“学号不能为空!"Text1(0).SetFocusExitSubEndIfData1.Recordset.Fields(“学号")=Text1(0).TextData1.Recordset.Fields(“姓名")=Text1(1).TextData1.Recordset.Fields(“性别")=Text1(2).TextData1.Recordset.Fields(“年龄")=Text1(3).TextData1.Recordset.Fields(“系别")=Text1(4).TextData1.Recordset.Fields(“入学成绩")=Text1(5).TextData1.Recordset.UpdateEndSub
6.3.4数据库记录的增删改操作给各字段赋值调用Update方法第63页/共93页
如果使用AddNew方法添加新的记录,但是没有使用Update方法而移动到其他记录,或者关闭记录集,那么所做的输入将全部丢失,而且没有任何警告。当调用Update方法写入记录后,记录指针自动返回到添加新记录前的位置上,而不显示新记录。因此,需要在调用Update方法后,使用MoveLast方法将记录指针再次移到新记录上。6.3.4数据库记录的增删改操作第64页/共93页2.删除记录
①定位被删除的记录使之成为当前记录。②调用Delete方法。③移动记录指针。在使用Delete方法时,当前记录立即删除,不加任何的警告或者提示。删除一条记录后,被数据库所约束的绑定控件仍旧显示该记录的内容。因此,必须移动记录指针刷新绑定控件,一般采用移至下一记录的处理方法。在移动记录指针后,应该检查Eof属性6.3.4数据库记录的增删改操作第65页/共93页2.删除记录PrivateSubcmddelete_Click()
DimmyvalAsStringmyval=MsgBox("是否要删除该记录?",vbYesNo)Ifmyval=vbYesThenData1.Recordset.DeleteData1.Recordset.MoveNextEndIfIfData1.Recordset.EOFThenData1.Recordset.MoveLastEndIfEndSub6.3.4数据库记录的增删改操作删除记录第66页/共93页3.编辑记录数据控件自动提供了修改现有记录的能力,当直接改变被数据库所约束的绑定控件的内容后,需单击数据控件对象的任一箭头按钮来改变当前记录,确定所做的修改。使用程序代码修改当前记录步骤的为:
①调用Edit方法。②给各字段赋值。③调用Update方法,确定所做的修改。如果要放弃对数据的所有修改,可用updatecontrols方法,重读数据库的数据,没有调用Update方法,数据的修改没有写入数据库的表中。6.3.4数据库记录的增删改操作第67页/共93页3.编辑记录PrivateSubcmdedit_Click()Fori=0To5Text1(i).Enabled=TrueNextIData1.Recordset.Edit;EndSub6.3.4数据库记录的增删改操作编辑当前记录第68页/共93页PrivateSubcmdsave_Click()Data1.Recordset.Fields(“学号")=Text1(0).TextData1.Recordset.Fields(“姓名")=Text1(1).TextData1.Recordset.Fields(“性别")=Text1(2).TextData1.Recordset.Fields(“年龄")=Text1(3).TextData1.Recordset.Fields(“系别")=Text1(4).TextData1.Recordset.Fields(“入学成绩")=Text1(5).TextData1.Recordset.UpdateEndSub
6.3.4数据库记录的增删改操作给各字段赋值调用Update方法第69页/共93页4.放弃编辑记录如果要放弃对数据的所有修改,可用updatecontrols方法,重读数据库的数据,没有调用Update方法,数据的修改没有写入数据库,所以这样的记录会在刷新记录集时丢失。PrivateSubcmdcancel_Click()
Data1.UpdateControlsData1.Recordset.MoveFirstEndSub6.3.4数据库记录的增删改操作放弃修改第70页/共93页图6.11编程建立增、删、改、查功能例6.5设计一个窗体用以显示建立的student.mdb数据库中基本情况表的内容。并加入“新增”、“删除”、“修改”、“放弃”和“查找”钮,通过对5个按纽的编程建立增、删、改、查功能。6.3.4数据库记录的增删改操作进入第71页/共93页Command1_Click事件的功能:当按钮提示为“新增”时调用AddNew方法,并将提示文字改为“确认”,同时使“删除”按钮Command2、“修改”按钮Command3和“查找”按钮Command5不可用,而使“放弃”按钮Command4可用。新增记录后,需再次单击Command1调用Update方法确认添加的记录,再将提示文字改为“新增”,并使“删除”、“修改”和“查找”按钮可用,而使“放弃”按钮不可用。OnErrorResumeNext语句表示在程序运行时发生错误,忽略错误行,继续执行下一语句。6.3.4数据库记录的增删改操作第72页/共93页
6.3.4数据库记录的增删改操作PrivateSubCommand1_Click()OnErrorResumeNext。Command2.Enabled=NotCommand2.EnabledCommand3.Enabled=NotCommand3.EnabledCommand4.Enabled=NotCommand4.EnabledCommand5.Enabled=NotCommand5.Enabled第73页/共93页
6.3.4数据库记录的增删改操作IfCommand1.Caption="新增"ThenCommand1.Caption=“确认”
Data1.Recordset.AddNewText1.SetFocusElseCommand1.Caption="新增"
Data1.Recordset.UpdateData1.Recordset.MoveLastEndIfEndSub第74页/共93页命令按钮Command2_Click事件功能:调用方法删除当前记录。当记录集中的记录全部被删除后,再执行Move语句将发生错误,这时由OnErrorResumeNext语句处理错误。
6.3.4数据库记录的增删改操作PrivateSubCommand2_Click()
OnErrorResumeNextData1.Recordset.DeleteData1.Recordset.MoveNext
IfData1.Recordset.EOFThenData1.Recordset.MoveLastEndSub第75页/共93页命令按钮Command3_Click事件的功能:根据按钮提示文字调用Edit方法进入编辑状态或调用Update方法将修改后的数据写入到数据库,并控制其他3个按钮的可用性,代码如下:
6.3.4数据库记录的增删改操作PrivateSubCommand3_Click()OnErrorResumeNextCommand1.Enabled=NotCommand1.EnabledCommand2.Enabled=NotCommand2.EnabledCommand4.Enabled=NotCommand4.EnabledCommand5.Enabled=NotCommand5.Enabled第76页/共93页
6.3.4数据库记录的增删改操作IfCommand3.Caption="修改"ThenCommand3.Caption="确认"
Data1.Recordset.EditText1.SetFocusElseCommand3.Caption="修改"
Data1.Recordset.UpdateEndIfEndSub第77页/共93页命令按钮Command4_Click事件的功能:使用UpdateControls方法放弃操作,代码如下:6.3.4数据库记录的增删改操作PrivateSubCommand4_Click()OnErrorResumeNextCommand1.Caption="新增"
Command3.Caption="修改"第78页/共93页
6.3.4数据库记录的增删改操作Command1.Enabled=TrueCommand2.Enabled=TrueCommand3.Enabled=TrueCommand4.Enabled=falseCommand5.Enabled=TrueData1.UpdateControlsDala1.Recordset.MoveNextEndSub第79页/共93页命令按钮Command5_Click事件的功能:根据输入专业使用SQL语句查找记录,代码如下:6.3.4数据库记录的增删改操作PrivateSubCommand5_Click()DimmzyAsStringmzy=InputBox$("请输入专业","查找窗")
Data1.RecordSource="Select*From基本情况_Where专业='"&mzy&"'"Data1.Refresh第80页/共93页上面的代码给出了数据表内数据处理的基本方法6.3.4数据库记录的增删改操作
IfData1.Recordset.EOFThenMsgBox"无此专业!",,"提示"
Data1.RecordSource=“基本情况”
Data1.RefreshEndIfEndSub第81页/共93页使用Data1_Validate事件过滤无效记录单击数据控件的箭头按钮可改变当前记录,完成添加新记录或对已有记录的修改。单击数据控件的箭头按钮时会触发Validate事件,在该事件中,可以根据Action取值(14)来判断单击了数据控件哪一个箭头按钮。例如,对学号字段进行测试,如果学号为空则输入无效。在例6.5中被学号字段所约束的绑定控件是Text1,可用Text1.DataChanged属性检测Text1控件所对应的当前记录中的字段值的内容是否发生了变化,Action=6表示Update操作。6.3.4数据库记录的增删改操作第82页/共93页6.3.4数据库记录的增删改操作PrivateSubData1_Validate(ActionAsInteger,SaveAsInteger)IfText1.Text=""And_(Action=6OrText1.DataChanged)
‘Action=6表示Update操作ThenMsgBox"数据不完整,必须要有学号!"
Data1.UpdateControls‘读回原数据EndIf第83页/共93页
6.3.4数据库记录的增删改操作IfAction>=1AndAction<=4ThenCommand1.Caption="新增"
Command3.Caption="修改"
Command1.Enabled=TrueCommand2.Enabled=Tru
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新人教版七年级数学上册 3.3 《解一元一次方程》听评课记录1
- 人教版历史七年级上册第14课《沟通中外文明的“丝绸之路”》听课评课记录
- 现场电力服务合同(2篇)
- 生活设施租赁协议书(2篇)
- 新版湘教版秋八年级数学上册第二章三角形课题已知边角作三角形听评课记录
- 新版华东师大版八年级数学下册《18.2平行四边形的判定》听评课记录
- 湘教版数学八年级下册4.3《一次函数的图象》听评课记录1
- 鲁人版道德与法治七年级下册13.3《正视压力 轻松前行》听课评课记录
- 2022年新课标八年级上册历史第3课太平天国运动听课评课记录
- 人教版九年级数学上册22.2.1《二次函数与一元二次方程》听评课记录
- 装修工程延期协议
- 《梅大高速茶阳路段“5·1”塌方灾害调查评估报告》专题警示学习
- 2024年09月北京中信银行北京分行社会招考(917)笔试历年参考题库附带答案详解
- 《大健康解读》课件
- 2025年度交通运输规划外聘专家咨询协议3篇
- 2024年04月北京中信银行北京分行社会招考(429)笔试历年参考题库附带答案详解
- 专项债券培训课件
- 《会务的组织和管理》课件
- 2024年公司领导在新年动员会上的讲话样本(3篇)
- 《倒虹吸管安全评价导则》
- 2025年中国湿度传感器行业深度分析、投资前景、趋势预测报告(智研咨询)
评论
0/150
提交评论