第十章 应用程序开发
delphi一共提供四种数据库应用程序的开发,分别是
1:BDE(borland database engine)
一般用来开发桌面数据库,可以支持pardadox(*.db),dbase(*.dbf),microsoft forxpro,access数据等桌面数据库。而且borland公司已经放弃对该数据引擎的继续发行,所以如果你开发的仅仅是桌面数据库应用程序的话则可以使用BDE,若要开发c/s模式的数据库应用程序则可以使用ADO等。
2:activex data object(ADO).
是现在开发c/s模式数据库应用程序的流行模式,所以如果你想开发c/s模式的数据库应用程序,则首选ado,但是ado有一个致命的缺点,就是不能实现跨平台移植。例如在windows下开发出来的应用程序,只能在windows环境下运行,不能移植到别的操作系统如:linux等。
3:DbExpress.
由于BDE的访问效率不佳,无法实现平台转移,所以delphi提出了另一种数据库访问标准就是dbexpress。dbexpress也只能开发桌面数据库,但是对数据库的访问效率却比BDE要快多了,可是BDE对数据库的访问方式却比dbexpress简单
4:interbase express
delphi还但供了一种原生组件interbase express让你可以直接,快速地访问interbase数据库,可以实现c/s模式的数据库应用程序开发。与sqlserver很相似,也有一个像sql server服务一样的一个服务器.但是它的唯一缺陷就是它专属于interbase server,并不适用于其他数据库服务器的访问。而且interbase的sql语句有很多的地方与sql server的sql语句不一样。
综上所述如果你想在windows开发桌面数据库则应该选择:BDE,如果你想实现你的软件可以跨平台移植则你可以使用dbexpres,如果你想开发windows下的c/s模式则选择ado.
BDE提供的database desktop数据库创建工具.
BDE提供的explorer工具.
A:创建第一个数据应用程序(利用table,datasource,dbgrid,dbnavigator)
B:功能强大的字段编辑器
作用:
1:改变字段的显示标题,顺序,宽度,对齐方式
2:为字段增加约束(设置最大值,最小值,是否充许修改,是否要输入内容)
3:设置文本框的操作方式[打开字段编辑器拖曳]
4:设置计算字段.
1):打开字段编辑器,新建一个字段添加为计算字段
2):设置table的autocalcfields属性为true
3):在table的oncalcfields事件中写入代码;
5:增加lookup字段:作用是在某个表的字段希望参考到另外一个表的其它字段.
C:获取当前记录字段数据的方法:
1:FieldByName('字段名').Value
2:Fields[0].Value [不进行转化]
3:FieldByName('字段名').AsInteger[把值取出来并转化成为整型值]
AsString,asboolean,asfloat,asdatatime等
D:设计数据库维护程序:
frist,last,next,prior,moveby(n),bof,eof,recordcount,recno,getbookmark,gotobookmark,freebookmark
将table组件的active属性设置为true,或是运行open方式都是打开表的方式。或者把active属性设为false以及运行close方法都是关闭表的方式。
举例:
E:对表进行数据的更新
1):插入:append方法或insert方法
2):删除:delete;
3):写入:post;
举列:
F:设计数据库存搜索功能:
1)locate方法:
格式:locate(要搜索的字段名,要搜索的字段值,搜索选项)
1:首先把游移到第一条记录,在来查找如果找到符合条件的记录则把游标移动到该条上,若找不到,则游标不会发生移动,但是如果同时有多个满足条件的值,则它只能移动到最先满足条件的记录上面去.
2:搜索选项为一集合类型。[loCaseInsensitive, loPartialKey],第一个表示查找时不区分大小写,第二个表示只要部分符合,通常会写成这样的形式
if locate(要搜索的字段名,要搜索的字段值,[]) then
处理语句 [表示如果找到,则怎么样,而且不区分大小写,不能有部分匹配
2):利用filter搜索多条数据记录。
这个方法利用属性filtered属性和onfilterrecord事件来完成。你必须将filtered设为true之后,然后在onfilterrecord事件中编写过滤代码.在该事件中有一个参数是accept是一个布尔型。如果设置为true则可以过滤,否则不能过滤
举列
G:运用tquery控件来实现数据的查询
两种运用tquery控件的方式:
1):在设计状态下,通过点选sql属性,然后将sql命令写上,再把acture属性设为true即可
2):在运行状态下:在很多种情况下使用的一种状态
写上:
query.close; //先要关闭,这是一种安全的做法。其实不关也行
query.clear;//再清除sql语句的内容,不然就会把现在的sql语句加到以前的sql里面
query.sql.add('sql语句')
query.open; 或者query.ExecSQL;
其中open用来执行带有select的sql语句的,也就是说有返回结果集的。而 execsql则是执行如
delete,update,insert等没有返回集的sql语句的。
3):可以将sql语句事先写在文件里面,再通过loadfromfile方法从文件里面取得sql语句
query.close;
query.clrear;
query.sql.loadfromfile('c:\sql.txt');
query.open
4):利用sql实现参数查询:
A:首先在query的sql属性中写入:select * from animals where weight>=:we 其中we就为参数
B:然后打开query的属性为参数设定数据类型和值
C:把query的active的属性设为true
上面的设置是进行静态设计,我们有时候希望在程序中进行动态设置。可以参考下面的代码
比如:
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from animals where weight>=:wc');
query1.Params[0].DataType:=ftinteger;
query1.Params[0].Value:=strtoint(edit1.Text);
query1.open;
5):在使用sql语句时,为了提高查询的效率,你必须要做两件事件。
A:在运行sql语句之前,请调用prepare方法。所谓parepare查询的意思是先将sql查询程序传递给远程数据库,预先进行sql语法分析,这样,如果不用prepare的话,则远程数据库每次都要进行sql语法分析,从而降低了查询效率 写法如下:
if not query.parepare then
query.parepare
query.open //也即是在使用open语句之前使用parepare
B:将unitdirectional的属性设置为true.这个属性用来决定是否可以往后查看结果集的内容。有时候可以产生两个结果集。而返回给用户的默认是第一个结果集,用户可以选择看一下个结果集。但是我们一般都只是返回一个结果集,所以要把此项设置为true,表示不能查看一个结果集.要特别注意的是,你必须在准备及运行sql查询之前来设置unitdirectional的属性值。
6):使用query来实现数据的修改.
其实query不仅可以查询,更重要的是它已经包括了table的所有功能。比如:可以对数据进行修改,要执行这样的功能必须要把query有requestlive属性设置为true.有意思的是,在ado的adoquery中则不需要这些设置就可以直接对数据进行修改,而且ado的query中根本就没有此属性
举列说明:
F:常用数据控件的用法:
1:dbgrid:用来显示数据库中的控件:
2:dbnavigate:能够对数据库进行各种操作
3:dbtext:能够与对数据库中某列相结合,对该列进行显示
4:dbedit: 能够与对数据库中某列相结合,对该列进行显示或修改
5:dbmomeory:与dbedit相同只不过用来处理较长的字符串
6:dbcombobox:能够与数据库中某列相结合,对该列进行显示或修改
7:dbimage:能够与数据库中存储图片的列相结合,对该列进行显示或修改
只要通过剪切板并配合快捷键来修改
8:dblookuplistbox,dblookupcombobox:通过改变listsource与keyfile属性来把游移动到指定的记录上面去。
G:dbnavigate的用法:
A:为每一个按钮加上其它代码:使用onclick事件
case button of
nbFirst :
showmessage('第一条');
........
end;
B:隐藏某些按钮,或使之成为平面型:
C:使用提示变成中文:
D:改变图标:
F:dbgrid控件的用法:
A:改变字段显示的标题,颜色,顺序。(color和titile属性)
B:让某个列实现picklist功能.以及通过代码实现picklist功能
C:options的属性:
D:把奇数行和偶数行各显示不同的颜色.
if self.DBGrid1.DataSource.DataSet.RecNo mod 2= 0 then
self.DBGrid1.Canvas.Brush.Color:=clred
else
self.DBGrid1.Canvas.Brush.Color:=clgreen;
self.DBGrid1.DefaultDrawColumnCell(rect,datacol,column,state);
E:把满足条件的数据以不同的颜色显示:
F:为dbgrid字段加上图标:
ADO对像模型的数据库编程:
A:使用ado创建第一个数据库应用程序:
B:tadotable,tadoquery组件的用法:与BDE完全一样
想一想:tadotable和tadoquery都有connctoionstring属性为什么还要用adoconnection组件
tadoquery除了具备有adotable的全部功能之外,还可以查询。可谓功能之强大.所以在开发项目时,应 首选query控件
C:connection组件的用法:
1:connectionstring:指定连接字符串:
2:prompt:说明每次在连接时,是否需要指定用户和密码:
D:tadodataset控件的用法:
这个控件集tadotable与tadoquery,tadostoreproc这三个控件一身的控件:
属性:
1:commandtype:命令类型:
2:commandtext:命令文本:
举列:
E:综合应用举列应用:
功能:实现选择一个数据库,可以选出里面所有的表,选择一个表,可以显示该表所有记录: