第四章数据访问组件.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第4章数据访问组件2本章内容§4.1BDE数据访问组件的使用§4.2Ttable组件§4.3Tquery组件§4.4TdataSource组件§4.5Tdatabase组件§4.6ADO组件(ADOConnection,ADOTtable,ADOQuery)34.1BDE数据访问组件的使用一、数据库程序的三类基本组件1、BDE组件:指定要访问数据库的哪个表。(1)Table组件:掌握databasename、tablename、active、name四个属性的用法。(2)Query:利用SQL语句实现对数据表的操作。2、DataAccess组件:连接BDE组件和数据控制组件。例DataSource组件:Dataset属性指定某个Table、Query组件。3、数据控制组件:由多个数据控制组件构成用户界面。一般要设置datasource、datafield属性。4二、Delphi数据库程序的结构5三、例子,程序操作演示目的:利用三种数据库组件,设计一个简单的数据库程序。熟悉Table、DataSource、DBGrid以及数据导航器的设置方法。64.2Table组件二、数据集的打开与关闭在利用数据集组件对数据库进行操作前,必须先打开数据集。方法一、active属性例,table1.active:=true;//打开table1.active:=false;//关闭方法二、open和close方法例,table1.open://打开table1.close;//关闭一、数据集的状态state属性:该属性决定了当前能对数据集进行的操作。其值:dsInactive,dsBrowse,dsEdit,dsInsert,dsSetkey,dsCalcFields,dsFilter72.记录指针移动方法编写一个数据库应用程序,用来浏览和维护当前目录下“学生表”中的数据,要求程序的浏览和维护功能均使用组件来实现。程序的设计界面如图1所示,程序的运行界面如图2所示。8分析:可使用TDataSource组件建立TTable组件与数据控件组件之间的联系,使用TDBNavigator来实现记录指针的移动,使用TDBEdit来显示TTable组件数据集的当前记录的内容。9编写一个数据库应用程序,用来浏览当前目录下“学生表”中的数据,要求记录指针的移动采用移动记录指针的方法。程序的设计界面如图1所示,程序的运行界面如图2所示。程序运行时单击相应的按钮,将实现记录指针的相应移动。分析:为使在程序运行时,单击相应的按钮可实现记录指针的相应移动,应在按钮的OnClick事件代码中调用相应的记录指针移动方法。10eof属性为T,则表明指针在最后一条记录。bof属性为T,则表明指针在第一条记录。table1.first;Whilenottable1.eofdo//Begin…….Table.next;End;Table1.Last;//使指针移动到最后一条记录WhilenotTable1.BOFdo//若指针没有在表的第一条记录上,则继续循环Begin{……}//对当前记录进行操作Table1.Prior;//指针上移一条记录End;3.eof和bof属性1112procedureTForm1.Button6Click(Sender:TObject);vari:integer;begintable1.first;i:=0;Whilenottable1.eofdoBegintable1.next;i:=i+1;End;showmessage('一共有'+inttostr(i)+'记录');end;13四、查询指定的记录1、Locate方法:Locate方法的原始定义如下:functionLocate(ConstKeyFields:String;ConstKeyValues:Variant;Options:TLocateOptions):Boolean;函数格式:Locate(字段名,要查询的字段值,[选项]):返回值的类型选项:loCaseInsensitive,不区分大小写loPartialKey:可实现模糊查询。若找到符合条件的记录,则函数返回T,否则,返回F。如果按照多个字段查找,则字段名之间用分号隔开,并且用varArrayOf函数构造一个临时变量数组。14例如,在Table1中查找“name”字段值为“tom”的记录。Table1.locate(‘name’,’tom’,[]);IfTable1.Locate(‘CustNo;OrderNo’,VarArrayOf([1351,1003]),[])ThenShowmessage(‘记录找到’)ElseShowmessage(‘没找到’);例如:查找Table1表中客户号为1351,订单号为1003的记录,若查到则显示“记录找到”,否则显示“没找到”152、条件过滤法所谓过滤就是将不符合条件的记录暂时隐藏,只留下满足条件的记录。设置数据表的条件过滤一般有两种方法:一种“Filter属性设置法”,另一种OnFilterRecord事件,称为“事件设置法”。《注意》:使用这两种方法的前提是必须预先设置数据表的Filtered属性值为True。(1)属性设置法:将过滤条件通过手工或代码方式写入到表的Filter属性中。(2)另一种OnFilterRecord事件,称为“事件设置法”。例如:在程序运行期直接将过滤表达式写到Table1的Filter属性中,方法如下:Table1.Filter:=’(Custno1400)AND(Custno1500)’;Table1.Filtered:=True;16desktop建立的house表,完成以下实验内容。表如下17设计界面如下:(用到了GroupBox组件,请自行添加)18要求:用Locate语句查询fwh(房屋号)是003的记录。用Filter语句查询mj(面积)在150到200之间的全部记录。请将第三条记录中ZL(坐落)的地址读取出来(使用FieldByName.或者Fields[Index]),并将其值赋给文本框。以上三题要求:编写出程序,并添加注释。191、第一题答案Table1.Locate('fwh',edit1.Text,[]);2、第二题答案withTable1dobeginFiltered:=False;{Filter:='State='+QuotedStr('CA')+'OR'+'State='+QuotedStr('CA');}Filter:='mj'+edit2.Text;Filtered:=True;end;3、第三题答案Table1.MoveBy(1);Edit3.Text:=Table1.fieldbyname('zl').AsString;203.查询记录的相关方法TTable组件提供了4种查询记录的方法:(1)GotoKey方法:该方法用于精确查找;(2)FindKey方法:该方法是实现精确查找的另一种方法,它和GotoKey一样均是一个函数过程,格式如下:functionFindKey(constKeyValues:arrayofconst):Boole(3)GotoNearest和FindNearest用于模糊查找。2122procedureTForm1.Button8Click(Sender:TObject);varSM:string;beginSM:=trim(inputbox('输入学号','请输入学号',''));//输入要查询的人的学号withtable1dobeginTABLE1.IndexFieldNames:='学号';ifFindKey([SM])then//如果找到ShowMessage('查到了相应记录')elseShowMessage('无符合条件的记录');end;end;23五、访问字段值1、通过FieldByName函数其使用格式为:FieldByName(‘字段名’)。例如:FieldByName(‘OrderNo’)表示的是OrderNo字段对象。所谓读取字段值就是读取当前记录中指定数据项的值。有2种方法可获取字段的值:24例,把Table1表中第3个记录的OrderNo字段的值赋给整型变量I,可使用如下代码:Table1.Open;Table1.MoveBY(2);I:=Table1.FieldByName(‘OrderNo’).AsInteger;读取字段值的基本格式为:表名.FieldByName(‘字段名’).属性名。25例如,若Table1表的第1个字段是字符串类型,则将此字段的值赋给字符串变量S的程序代码为:S:=Table1.Fields[0].AsString;2、通过Fields属性使用格式为Fields[Index],它表示数据表的第Index个字段对象(其中Index表示字段号,其值从0开始)。26六、编辑表的数据数据的编辑:append,insert,edit,delete,post,cancel1、增加(append,insert)Append步骤:1)调用Append方法,在表最后添加一条空记录。2)给该空记录的每个字段赋值。3)调用POST方法提交。1)bookTable.append;bookTable.fieldbyname(‘bookno’).asstring:=’100001’;bookTable.fieldbyname(‘bookname’).asstring:=’三国演义’;bookTable.fieldbyname(‘je’).asfloat:=29.5;bookTable.post;2)bookTable.append;bookTable.fieldbyname(‘bookno’).asstring:=edit1.text;bookTable.fieldbyname(‘bookname’).asstring:=edit2.text;bookTable.fieldbyname(‘je’).asfloat:=strToFloat(edit3.text);bookTable.post;3)学生课堂作业例,table1组件name属性为bookTable,tablename属性为book.db。要求:1)增加一条记录:100001,三国演义,29.52)增加一条记录,数据由edit1,edit2,edit3,datatimepicker输入。3)增加一条记录,数据由DBedit1,DBedit2,DBedit3,datatimepicker输入。282、修改记录(edit)步骤:1)先找到要修改的记录,并把它设为当前记录(locate或其他方法等)2)调用edit方法3)给要修改的字段赋值。4)调用POST方法提交。29方法一、试用locate查找定位当前记录,思考?withbookTabledoBeginOpen;Iflocate(‘bookno’,’100001’,[])thenBeginEdit;//FieldByName(‘gmje’).asfloat:=35;Post;End;End;思考:把图书号为‘100001’的图书的购买金额改为35元。30方法二、试用while循环查找定位当前记录?withbookTabledoBeginOpen;Whilenoteofdo//BeginIffieldbyname(‘bookno’).asstring:=’100001’thenBeginEdit;FieldByName(‘gmje’).asfloat:=35;Post;End;Next;//End;End;313、删除记录(Delete)Delete:步骤1)先找到要删除的记录,把它改为当前记录;2)调用delete删除;例,删除图书号为‘100000’的记录。Ifbooktable.locate(‘bookno’,’100001’,[])thenDelete;324、Post方法提

1 / 55
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功