Database 版 (精华区)

发信人: joy ( 雨送黄昏花易落), 信区: Database
标  题: 用Delphi设计数据库应用的几点体会
发信站: 紫 丁 香 (Mon Jul 20 21:27:15 1998), 转信

    Delphi是一个不错的前端开发工具,能够快捷地产生界面良好的
应用程序。在数据库应用设计方面,Delphi也具有强大的功能。开发
一个较大的数据库应用往往只要很短的时间即可完成。在此笔者想谈
谈在编程过程中积累的一点体会。
    Delphi提供了用于数据访问和控制的可视控件,用这些控件可以
构造数据库应用。Data Access控件主要用于访问数据记录,如查询、
插入、删除等操作,Data Controls控件则主要用于表格的显示,当然 
也可进行一些编辑。
    Delphi的数据库应用通过Data Access控件与BDE连接,从而访问
数据源。Data Control s控件是些所谓Data_Aware控件,提供用户接
口。由于BDE(Borland Database Engineer)支持ODBC标准,所以可以
访问多种数据源表格。
    使用SQL时的一些问题
    Delphi的数据控件基本支持标准SQL语言,但有些限制。在具体编
程时可能会遇到一些麻烦。
图1

    1.Query控件的Open和ExecSQL方式的区别。Open方式可以打开所
联系的数据表格,而Ex ecSQL方式则只是运行SQL语句,并不将运行后
的表格送往相连的Data-Controls控件。因此, 如果要用DBGrid等来
显示要求的数据记录时,先用SELECT语句筛选出符合要求的元组,再用
O pen对Query控件进行操作即可。例如有如下的应用:
    如果要在DBGridl中显示表格(表格名为WORKERS.DB),则可将Quer
y1的SQL属性设为:SEL ECT*FROM WORKERS,再在程序中加入语句:Quer
y1.Open;即可。如要插入一个记录,则Query1 的SQL属性应为:
    INSERT INTO WORKERS(No#,Name,Sex,Age,Depart) VALUES
    (:No#,:Name,:Sex,Age,:Depart)
    在程序中则应该加入下列语句:
    Query1.Close;
    Query1.ParamByName(‘No#').asintegar:=2717;
    Query1.ParamByName(‘No#').asintegar:=2717;
    Query1.ParamByName(‘Name').asstring:=‘李四';
    Query1.ParamByName(‘Sex').asstring=‘男';
    Query1.ParamByName(‘Age').asinteger:=40;
    Query1.ParamByName(‘Depart').asstring:=‘品质管理’;
    Query1.ExecSQL;
    注意,此处如果不用ExecSQL而用Open则会出错。
    2.若要在SQL语句中使用程序中的变量,只能在SQL中先用冒号加
字段名来代替,然后在程序中把变量的值赋给字段。上面的例子便是
这样完成的。再如,若用户输入一个工号存于Nu mber变量中,要查询
对应的记录时SQL语句应如下:
    SELECT*FROM WORKERS WHERE No#=:No#
    再在程序中加入如下语句:
    Query1.Close;
    Query1.ParamByName(‘No#').asinteger:=Number;
    Query1.Open;

    使用中文时的注意事项

    1.要在Delphi编制的数据库应用程序中使用中文,必须对BDE Con
figuration进行正确设置,主要是对驱动语言的选择。对Delphi 1.0
而言,可在BDE Configuration Utility的Syst em页中将LANGDRIVER
设置为dBASE CHS CP936,对Delphi 2.0,则可将System页中的LANG-DR
I VER设置为Sybase SQL Dic850。设置好后,Delphi中的数据访问控
件和数据控制控件就可以使用中文了。值得注意的是,如果表格是在
不支持中文的BDE设置中产生的,即使在使用时BD E已经设置为支持中
文也不能用中文,此时可用DATABASE DESKTOP来修改表格的属性。将T
ab le Property中的Table Langue改为支持中文的驱动语言即可。
    2.中文可以用作字段名,并能正确显示,但由于PASCAL语言要求变
量名为以英文字母为首的字母数字串,所以汉字字符串不能用作变量
名。所以如果表格中有中文字段名,使用SQL时要十分小心,尤其是在
对中文名的字段进行赋值或比较时。例如下面几条SQL语句在使用时
都会出错:
    SELECT*FROM TEST WHERE姓名=:姓名
    2.若要在SQL语句中使用程序中的变量,只能在SQL中先用冒号加
字段名来代替,然后在程序中把变量的值赋给字段。上面的例子便是
这样完成的。再如,若用户输入一个工号存于Nu mber变量中,要查询
对应的记录时SQL语句应如下:
    SELECT*FROM WORKERS WHERE No#=:No#
    再在程序中加入如下语句:
    Query1.Close;
    Query1.ParamByName(‘No#').asinteger:=Number;
    Query1.Open;

    使用中文时的注意事项

    1.要在Delphi编制的数据库应用程序中使用中文,必须对BDE Con
figuration进行正确设置,主要是对驱动语言的选择。对Delphi 1.0
而言,可在BDE Configuration Utility的Syst em页中将LANGDRIVER
设置为dBASE CHS CP936,对Delphi 2.0,则可将System页中的LANG-DR
I VER设置为Sybase SQL Dic850。设置好后,Delphi中的数据访问控
件和数据控制控件就可以使用中文了。值得注意的是,如果表格是在
不支持中文的BDE设置中产生的,即使在使用时BD E已经设置为支持中
文也不能用中文,此时可用DATABASE DESKTOP来修改表格的属性。将T
ab le Property中的Table Langue改为支持中文的驱动语言即可。
    2.中文可以用作字段名,并能正确显示,但由于PASCAL语言要求变
量名为以英文字母为首的字母数字串,所以汉字字符串不能用作变量
名。所以如果表格中有中文字段名,使用SQL时要十分小心,尤其是在
对中文名的字段进行赋值或比较时。例如下面几条SQL语句在使用时
都会出错:
    SELECT*FROM TEST WHERE姓名=:姓名
    INSERT INTO TEST(姓名,Age,Salary)values(:姓名,:Age,:Sala
ry) 
    注意版本之间的差异
    Delphi 1.0和Delphi2.0在对数据库的处理上有些差别,使用过程
中要加以注意。例如D elphi 1.0的表格字段数目不能太多,超过10个
字段时将无法用INSERT语句插入记录,而Delp hi 2.0则不存在这种限
制。又如,对于有关键字的PARADOX表格进行插入记录时,Delphi 1.0 
将覆盖原有的关键字相同的记录,而Delphi 2.0则不允许插入关键字
已存在的记录,如果执行了这种操作,数据库的使用将会变得不正常。

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.229.27]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.167毫秒