版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库组件及应用
使用TTable可以通过BDE访问数据库中一张表中的数据。Ttable提供对基础数据库表中每一个记录和每一个域的直接访问数据集组件-TTable数据集组件-TTableAge>20anddno=`d01`True数据集组件-TQueryTQuery
查询组件一个查询组件封装了一个SQL语句,该语句在客户应用程序中用于在一个或多个数据库表中检索、插入、修改和删除数据。因此,该组件实际上是为你使用SQL语句操纵数据库提供了一种手段。数据集组件-TQueryQuery1Select*fromstudentswheredno=:dnoSelect*fromstudentwheredno=:dno
Tquery-参数动态赋值withquery1dobegin
DisableControls;tryClose;
ParamByName(`dno`).value:=`d01`
;Open;finally
EnableControls;end;end;Dataset方法禁止通过数据源与该数据集组件相连的数据感知控件显示数据.Query1.Close;Query1.ParamByName(`dno`).value:=`d01`
;Query1.Open;Tquery-动态构造SQL语句Query1.Close;Query1.SQL.Clear;Query1.SQL.Add('select*fromstudents');Query1.SQL.Add('wheredno='''+edit1.text+'''');Query1.Open;Query1.SQL.Add(`update…`);Query1.ExecSQL;Select*fromstudentwheredno=`d01`连续2个上引号代表字符串中的一个上引号字符理解数据集TDataSetTBDEDataSetTClientDataSetTDBDataSetTQueryTTableTStoredProc
Delphi中访问数据库的基本单元是数据集对象族。应用程序对数据库的所有访问都是通过数据集组件实现的。通常,一个数据集对象代表一个数据库中的一张具体的表,或代表访问数据库的一个DML语句,或存储过程。理解数据集理解数据集TDataSet
是所有数据集组件的一个基类,它能表示数据库中二维表的数据(行、列)TDataSet
是一个抽象基类,它封装了一组与数据库引擎无关的、涉及数据的属性、事件和方法属性方法事件数据集组件数据集常用操作打开和关闭数据集定位记录与检索记录访问数据集检查和设置数据集状态编辑和修改记录过滤数据集打开、关闭数据集设计时:通过设置有关属性实现。如将TTable的Active属性设为True或False。运行时调用打开/关闭方法
Table.OpenTable.Close定位数据集First 将指针移到数据集的第一行。Last将指针移到数据集的最后一行。Next 将指针后移一行。Prior 将指针前移一行。MoveBy 将指针前移或后移指定的行。Moveby(5)是后移5行,Moveby(-2)是前移2行。BOF属性:True(指针在数据集第一行);EOF属性:True(指针在数据集最后一行)方法Table1.DisableControls;tryTable1.First;WhilenotTable1.EOFdoBegin...Table1.Next;End;
Finaly
Table1.enableControls;定位数据集查找记录-locate方法procedureTForm1.Button1Click(Sender:TObject);varloc:boolean;locOp:TlocateOptions;begin
locOp:=[lopartialkey,locaseinsensitive];loc:=table1.locate(`sname`,edit1.text,locop);end;部分匹配不区分大小写列名列值查找选项查找记录-locate方法procedureTForm1.Button1Click(Sender:TObject);varloc:boolean;locOp:TlocateOptions;begin
locOp:=[lopartialkey];loc:=table1.locate(’sno;sname',
vararrayof([strtoint(edit1.text),edit2.text]),locop);end;访问数据集-动态字段针对Ttable和Tquery(select…)是Delphi根据数据集自动生成,并由Delphi根据数据集的变化进行维护。动态字段对象访问通过下标访问动态字段对象
propertyFields[Index:Integer]:TField;
例;
Table1.Fields[1].DisplayLabel:='姓名';
Table1.Fields[1].Alignment:=tacenter;Edit1.text:=Table1.Fields[1].Value;通过字段名访问动态字段对象functionFieldByName(constFieldName:string):TField;例:Table1.FieldByName('sname').DisplayLabel:='姓名';Edit1.Text:=Table1.FieldByName('sname').value;访问数据集-永久字段动态字段的属性和可用性全是由Delphi自动设置的,不能以任何方式改变。要想在设计阶段获得对字段的属性及事件的控制权,必须为数据集建立永久字段。二级对象访问数据集-永久字段永久字段值访问Edit1.Text:=Table1Sname.Value;Edit1.Text:=Table1Age.AsString;Table1Age.AsString:=Edit1.Text;字段值类型转换AsIntegerAsFloatAsDataTime数据集状态转换图数据集修改
数据库Post方法是Delphi应用程序与数据库表交互的核心。Post将数据集中的数据变化写入数据库:在dsEdit状态下,是将已修改的记录写入数据库在dsInsert状态下,是将新插入的记录写入数据库。修改记录修改记录字段
Table1.Edit;Table1.FieldByName('age’).value:=22;Table1.Post;修改整条记录
WithTable1doBeginEdit;
SetFields(nil,`计算机科学系`,2288);
PostEnd;Null空值nil保持不变插入、删除记录table1.InsertRecord([980001,`c01`,NULL]);Table1.Delete隐式执行Post插入、修改和删除记录数据感知控件Table1方法posttable1.InsertRecordtable1.DeleteQuery1postInsertintodepvalues…deletefromdep…数据集事件procedureTForm3.Table1BeforeDelete(DataSet:TDataSet);beginifmessagedlg('删除该记录?',mtconfirmation,[mbyes,mbno],0)<>mryesthenabort;end;在任何Before方法中,通过调用一个Abort过程,可以终止一个方法习题3-主界面Form2.showmodal习题3-查询界面查询界面depeditdnoSQLeditnumTable1DBGridTable2DBNavigatorDnoselectcount(*)fromstudentswheredno=:dno;procedureTForm2.Table1AfterScroll(DataSet:TDataSet);beginquery1.close;query1.ParamByName('dno').value:=editdno.Text;query1.Open;editnum.text:=query1.fields[0].asString;end;student维护界面维护界面procedureTForm3.Button1Click(Sender:TObject);begintable1.active:=false;table1.tablename:=combobox1.Text;table1.active:=true;end;选课界面以表格形式显示字符串的控件StringGrid(1)StringGrid(2)表格单元的内容是通过属性Cells的值来存取的。Cells属性是一个字符串型二维数组,数组的每一个元素代表了表格的一个单元。数组下标都是从0开始。如图中`语文`就是StringGrid1.Cells[1,1]的内容。属性RowCount和ColCount决定了表格的行、列数。如本例中它们的值分别是5和6。属性FixedRows和FixedCols用来确定锁定的行数和列数。这些被锁定的行或列常用来作为标题栏,它们不随单元的滚动而滚动,用光标也不能选中它们。本例中被锁定的行和列数都是1(即第0行和第0列被锁定)。StringGrid的一个基本事件就是OnSelectCell,当鼠标选中某个单元时,该事件发生,选中单元的坐标作为参数被传送到事件处理程序中。StringGrid(3)implementation{$R*.DFM}varacol,arow:integer;procedureTForm1.FormCreate(Sender:TObject);beginstringGrid1.Cells[0,1]:='第一节';stringGrid1.Cells[0,2]:='第二节';stringGrid1.Cells[0,3]:='第三节';stringGrid1.Cells[0,4]:='第四节';stringGrid1.Cells[1,0]:='星期一';stringGrid1.Cells[2,0]:='星期二';stringGrid1.Cells[3,0]:='星期三';stringGrid1.Cells[4,0]:='星期四';stringGrid1.Cells[5,0]:='星期五';acol:=1;arow:=1;end;当窗体建立时对strintgrid1做初始化工作StringGrid(4)procedureTForm1.StringGrid1SelectCell(Sender:TObject;Col,Row:Integer;varCanSelect:Boolean);beginacol:=col;arow:=row;end;procedureTForm1.Button1Click(Sender:TObject);beginstringGrid1.Cells[acol,arow]:=edit1.text;end;procedureTForm1.Button2Click(Sender:TObject);beginstringGrid1.Cells[acol,arow]:='';end;填入课程删除课程当鼠标选择一个单元时,记下该单元坐标StringGrid(5)procedureTForm1.Button3Click(Sender:TObject);vari,j:integer;beginfori:=1tostringGrid1.ColCount-1doforj:=1tostringGrid1.RowCount-1dostringGrid1.Cells[i,j]:='';end;end.全清课表选课界面54321Query2/5封装的SQL语句Query2.SQLselectcno,cname,ctimefromsc,coursewheresno=:snoandgradeisnullandsc.cno=course.cno;Query5.SQLselectcount(*),sum(credit)fromsc,coursewheresno=:snoandgradeisnullandsc.cno=course.cno;Query1/3/4封装的SQL语句Query1.SQL属性初始为空query3.SQLinsertintosc(sno,cno)values(:sno,:cno);Query4.SQLdeletefromscwheresno=:snoandcno=:cno;进入`学号`编辑框事件句柄procedureTForm4.snoeditEnter(Sender:TObject);vari,j:integer;beginsnoedit.text:='';snameedit.text:='';oldcreditedit.text:='';fori:=1to5doforj:=1to4dobeginstringGrid1.Cells[i,j]:='';
acno[i,j]:='';end;query5.close;selectBt.enabled:=false;delBt.enabled:=false;end;`输入确认`按钮事件implementation{$R*.DFM}varacol,arow:integer;acno:array[1..5,1..4]ofstring;snum:integer;procedureTForm4.verifyBTClick(Sender:TObject);begintry
snum:=strtoint(snoedit.text);except
showmessage('输入有误');
exit;end;3-1`输入确认`按钮事件query1.close;query1.sql.Clear;query1.sql.add('selectsnamefromstudent');query1.sql.add('wheresno='+snoedit.text);query1.open;ifquery1.fieldbyname('sname').asstring=''then
showmessage('学号有误')elsebegin
snameEdit.text:=query1.fieldbyname('sname').value;query1.close;query1.sql.Clear;query1.sql.add('selectsum(credit)fromsc,course');query1.sql.add('wheresno='+snoedit.text);query1.sql.add('andsc.cno=course.cnoandgrade>=60');query1.open;
oldcreditedit.text:=query1.Fields[0].asstring;3-2`输入确认`按钮事件
query5.close;query5.ParamByName(‘sno’).value:=snum;//选修门数和学分query5.open;query2.close;query2.ParamByName(‘sno’).value:=snum;//选修课号课名时间query2.open;Whilenotquery2.EOFdoBegin
acol:=query2ctime.Valuediv10;
arow:=query2ctime.valuemod10;stringGrid1.Cells[acol,arow]:=query2cname.value;
acno[acol,arow]:=query2cno.value;query2.Next;End;
selectBT.enabled:=true;
delBT.enabled:=true;end;end;
3-3选课按钮代码
procedureTForm4.selectBTClick(Sender:TObject);beginiftable1quota.value=0thenbegin
showmessage(‘没有名额’);exit;end;
acol:=table1ctime.valuediv10;
arow:=table1ctime.valuemod10;ifstringGrid1.Cells[acol,arow]<>''thenbegin
showmessage(‘时间冲突’);exit;end;tryquery3.close;query3.parambyname(‘sno’).value:=snum;//插入选课记录2-1选课按钮代码
query3.parambyname('cno').value:=table1cno.value;query3.execsql;except
showmessage('该课程已修');
exit;end;stringGrid1.Cells[acol,arow]:=table1cname.value;
acno[acol,arow]:=table1cno.value;Table1.Edit;Table1quota.value:=table1quota.value-1;Table1.Post;query5.close;query5.open;end;2-2退选按钮代码procedureTForm4.delBTClick(Sender:TObject);beginifstringGrid1.Cells[acol,arow]=''thenbeginshowmessage(‘请选择退选课程’);exit;end;query4.close;query4.parambyname('sno').value:=snum;query4.parambyname('cno').value:=acno[acol,arow];query4.execsql;table1.locate('cno',acno[acol,arow],[]);Table1.Edit;Table1quota.value:=table1quota.value+1;Table1.Post;stringGrid1.Cells[acol,arow]:='';
acno[acol,arow]:='
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业公司库房管理制度及工作流程
- 2025年小儿内科学(正高)题目答案解析
- 2026年江西洪州职业学院单招职业技能考试题库及答案详细解析
- 2026年江苏城市职业学院单招职业适应性测试题库及答案详细解析
- 2026年吉林职业技术学院单招职业技能考试题库附答案详细解析
- 2026年云南省丽江市高职单招职业适应性测试考试题库及答案详细解析
- HY/T 0497-2025雷达自动验潮仪
- 企业管理-PNC(规划-导航-控制)管理制度
- 龙岩市五县重点达标名校2026年初三中考总复习单元同步滚动测试卷物理试题含解析
- 陕西商南县2025-2026学年初三1月阶段测试数学试题试卷含解析
- 5.1人民代表大会制度 课件(23张幻灯片)+内嵌视频 道德与法治统编版八年级下册
- 高考18个文言虚词用法详解
- 超高性能混凝土进展及工程应用
- 旋毛虫法语课件
- 五原县供热工程专项规划(2014-2030年) 说明书
- 上海市2023年基准地价更新成果
- 拔牙术拔牙并发症
- 选派援疆医疗卫生人才协议书
- XB/T 405-2016铈铁合金
- GB/T 9966.16-2021天然石材试验方法第16部分:线性热膨胀系数的测定
- GB/T 3733.2-1983卡套式端直通接头体
评论
0/150
提交评论