




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十三章数据识别控件,前面的数据库数据表的显示、更新通过利用datagird控件,我们称这类控件为数据识别控件,在VB中数据识别控件除了datagird外还有label、textbox、checkbox、listbox、combobox、image、picturebox、DTPicher等控件,如果我们能够充分运用这些控件,就可以很轻松地进行数据库程序设计了。1、使用数据识别控件的概念上面我们列出控件与datagird控件有个很大的不同点,datagird控件是一个二维表格,数据容纳是以复盖整个数据表,但其他数据识别控件则都只能显示一个数据项,其数据容纳量仅限于一个字段。因此,想利用这些数据识别控件来存取数据必须有这样概念:1)这些数据识别控件每次只能存取“当前数据记录”的某个“字段”的数据。2)在属性设置上必须把它的datasource属性设为adodc控件名称,将datafield属性设置成某一个“字段名”,例:实验书P15练习一(ch12练习1.vbp)使用其它数据识别控件为c:mdbbooks.mdb数据库中销售人员表编写一个浏览记录程序,程序介面如下:,3)数据识别控件选择数据识别控件适用的数据字段label只读字段textbox一般性文字字段,包含文本、数值checkbox逻辑字段comboboxlistbox列表式的字段(例如血型)imagepicture图片字段DTPicker日期类型字段,2、数据记录的删除与新增在上一例中,如果想增加“新增”和“删除”功能,初步的想法是:添加两个命令按扭,在删除按钮中写下如下语句:adodc1.recordset.delete在新增按钮中写下如下语句:adodc1.recordset.addnew但是单击删除按钮之后,并不会看到当前数据记录被删除必须再单击adodc1控件中的箭头。同样对于增加记录亦存在这样问题。对于删除问题:调用delete方法之后,再调用movenext方法将当前数据记录移到下一条,如果eof为真,则调用movelast方法将当前数据记录设置为最后一条记录,写成代码:onerrorgotoerrmsgadodc1.recordset.deleteadodc1.recorset.movenext,ifadodc1.recordset.eofthenadodc1.recordset.movelastendifexitsubermsg:msbboxerr.description,vbexclamationendsub新增问题:增加两个命令按钮,“确定新增”、“取消新增”确定新增:OnErrorGoToerrmsgAdodc1.Recordset.UpdateExitSuberrmsg:MsgBoxErr.Description,vbExclamation,销售人员资料-updateEndSub,取消新增:OnErrorGoToerrmsgAdodc1.Recordset.CancelUpdateExitSuberrmsg:MsgBoxErr.Description,vbExclamation,销售人员资料-cancelupdateEndSub例:实验书P17练习二(ch12/练习2.vbp)例:实验书P19练习三(ch12/练习3.vbp)3、数据输入与验证如果用户输入了错误的数据,程序该如何处理呢?当然是不能将错误的数据写入到数据库中了,必要时还要将数据还原,但问题是数据识别控件中的数据总是会自动将数据写入到数据库。Recordset(“字段名”)=x,缓冲区,写入,数据库,Recordset.update,不过我们可以利用adodc控件所提供几个事件来侦测数据被写入到缓冲区或数据库情形。Fieldchangecomplete:当字段中的数据写入到缓冲区中以后,发生该事件。Willchangerecord:当前记录的数据即将写入到数据库时发生该事件将验检数据代码写到这两个事件中其中一个1)recordset(“字段名”).originalvalue属性(这是field对象属性)对于未曾改变过内容的字段而言,它的origianlvalue属性值等于其value属性值当执行“recordset(“字段名”)=新值”语句后,或用户在数据识别控件中改变了“字段”内容,则新的字段值会写到数据记录缓冲区,此时其value属性的值改变了,但originalvalue属性的值还是维持原来的值.当我们执行了“recordset.update”方法或当前数据记录位置改变了之后,它的新的value属性值会赋给originalvalue属生,此进它的originalvalue属性的值又变成等于其value属性的值.,2)哪些字段需要验证?利用哪一个事件来验证?要验证数据之前,我们必须先定义好字段有效范围,例如:“语文”、“数学”、“英文”成绩字段有效范围0100,除了单一字段的验证之外,有时候我们也会验证同一条记录不同字段之间的关系。例如在股票行情表中“最高价”就不应该小于“收盘价”而“收盘价”又不应该小于“最高价”。利用哪一个事件来编写验证字段代码,分两种情况单一字段数据验证使用fieldchangecompelete事件在该事件中有几个参数其含义:cfields:内容已被改变的字段个数。如果使用数据识别控件来录入数据,该参数通常等于1,但是成批修改一条记录中各个字段值时,该参数不等于1。例:fieldname=array(“语文”,“英文”,“数学”)fieldvalue=array(90,80,70)adodc1.recordset.updatefieldname,fieldvalue此时cfields=3,fields:field对象集合,假设被更新字段只有一个field(0)代表该字段。(如果更新字段有“语文”,“英文”,“数学“则fields(0)、fields(1)、fields(2)分别表示“语文”,“英文”,“数学三个字段)precordset:当前数据记录,这个参数相当于adodc1.recordset属性。例:在score01.mdb中成绩单表中修改字段数据,编写检验数据代码。(ch12练习4.vbp)Adodc1绑定数据库score01datagrid显示数据编写检验数据代码如下:PrivateSubAdodc1_FieldChangeComplete(ByValcFieldsAsLong,FieldsAsVariant,ByValpErrorAsADODB.Error,adStatusAsADODB.EventStatusEnum,ByValpRecordsetAsADODB.Recordset)DimiAsIntegerDimnameAsStringFori=0TocFields-1name=Fields(i).name,Ifname=数学Orname=语文Orname=英文ThenIfFields(i)100OrFields(i)0ThenFields(i)=Fields(i).OriginalValueMsgBoxFields(i).name&字段,请输入0-100之间数值EndIfEndIfNextiEndSub运行时发现如果改了数据又超出范围,如果直接单击窗体关闭按钮,此时未能触发到fieldchangcompele事件。所输错误数据被写入到数据库中去了。解决办法:privateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)Me.SetFocusEndSub此时datagrid控件失去了输入焦点,由于我们更改了数据就会触发adodc1_fieldchangcompelete事件。,复合字段数据验证单纯检验某一个字段的值是否正确,使用fieldchangecompelete事件是十分恰当,可是想要检验不同字段之间关系是否符合验证规则就必须使用willchangerecord事件来验证在willchangerecord事件中有几个参数需要解释:adreason:发生willchangerecord事件的理由,可能是以下参数值:设置值意义adrsnaddnew(=1)新增数据记录时adrsndelete(=2)删除数据记录时adrsnupdate(=3)更新数据记录时adrsnundoupdate(=4)取消更新数据记录时crecords:即将被更新的记录条数adstatus:发生这个事件时的状态precordset:当前数据记录。(相当于adodc1.recordset)用这个参数读取记录数据,进行数据验证。,例:编写一个修改“股票行情”数据的程序,并对修改的数据进行验证,“收盘价”字段值不可以低于“最低价”,“收盘价”字段值不可以高于“最高价”(ch12练习5.vbp)在窗体上放置adodc1及datagrid绑定stocko1.mdb中股票行情表PrivateSubAdodc1_WillChangeRecord(ByValadReasonAsADODB.EventReasonEnum,ByValcRecordsAsLong,adStatusAsADODB.EventStatusEnum,ByValprecordsetAsADODB.Recordset)OnErrorGoTomsgerrIfadReason=adRsnUpdateThenIfprecordset(收盘价)precordset(最高价)Thenprecordset(收盘价)=precordset(收盘价).OriginalValueprecordset(最高价)=precordset(最高价).OriginalValueMsgBox收盘价不得高于最高价EndIfEndIfmsgerr:EndSub同修改单个字段一样,用户修改数据后单击窗体关闭,此时未能触发到willchangerecord事件。不能验证数据。但是在form_queryunload事件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南张家界市桑植县卫生健康局机关所属事业单位公开选调工作人员3人模拟试卷完整参考答案详解
- 2025年重组载体疫苗合作协议书
- 2025年近代物理研究所部分研究室负责人竞聘考前自测高频考点模拟试题及答案详解(各地真题)
- 2025广东惠州仲恺高新区招聘中小学教师105人(编制)考前自测高频考点模拟试题及答案详解(名校卷)
- 2025安庆岳西县安徽省岳顺人力资源服务有限公司招聘26人模拟试卷含答案详解
- 2025黑龙江黑河市爱辉区花园社区卫生服务中心招聘非事业编制人员7人考前自测高频考点模拟试题及完整答案详解1套
- 2025昆明市呈贡区卫生健康系统编外合同制专业技术人员招聘(7人)考前自测高频考点模拟试题及参考答案详解1套
- 2025江苏徐州医科大学招聘专职辅导员4人考前自测高频考点模拟试题有完整答案详解
- 2025广西崇左凭祥市国防动员办公室公开招聘工作人员1人考前自测高频考点模拟试题完整参考答案详解
- 2025北京首都师范大学附属育新学校招聘12人模拟试卷及答案详解(有一套)
- 学术论文文献阅读与机助汉英翻译智慧树知到答案2024年重庆大学
- (初级)航空油料特设维修员(五级)理论考试题库-上(单选题)
- 医疗质量医疗安全十八项核心制度培训模板
- 预应力混凝土管桩(L21G404)
- 2023年山西省普通高中学业水平考试真题物理试题(含答案解析)
- 国家职业技术技能标准 4-07-02-05 商务数据分析师S 2024年版
- 模具开发进度管理表
- 成都中医药大学药学院毕业实习鉴定表
- 投标货物质量标准的详细描述
- 镇墩稳定计算
- 2023-2024学年辽宁省沈阳市郊联体高二上学期10月月考物理试题(解析版)
评论
0/150
提交评论