浅谈三层数据库技术(1)
来源:互联网 发布:蜘蛛侠蛛丝发射器淘宝 编辑:程序博客网 时间:2024/06/17 00:46
在DELPHI里MIS系统通常有两种做法,一种是写SQL语句,一种是通过DELPHI自带的数据集控件进行的操作。前者使用灵活,功能强大,几乎可以实现对于数据库的任何一个操作,但缺点是使用烦琐,容易出错。后者,利用数据集控件进行操作,方便,简单,但就灵活程度上不及SQL语句。以下就以我最近写的一个三层小程序,主要是以SQL语句实现(SQL语句都在服务器)在MIS系统里,一般实现添加数据,删除数据,修改数据等操作,先就以我在实现这几种操作时碰到的问题,做下讨论
一,添加数据
1,服务器
数据库 project
表名 clientinfoM
在ADOQUERY1的SQL属性中写入
insert clientinfoM VALUES (:p1),
实现ANSI与UNICODE字符码的转换:在DataSetProvider1的BeforeExecute事件里写入如下代码:
adoquery.Parameters.ParamByName('p1').Size :=Length(adoquery5.Parameters.ParamByName('P1').value)+1; (注意:只有中文才有可能显示异常,如果是英文字段,可以不转换)
2,客户端
clientdataset1.Close;//关闭数据集;
clientdataset1.ProviderName:='datasetprovider1';//使客户端数据集指向应用层服务器相应的datasetprovider;
clientdataset1.Params.clear;//清空以前参数;
clientdataset1.Params.CreateParam(ftstring ,'p1',ptInput);//创建动态参数;
clientdataset1.Params.ParamByName('p1').AsString:=(edit.Text);//对动态参数进行赋值;
clientdataset1.Execute;//执行服务器端的SQL语句;
二,修改数据
1,服务器
在ADOQUERY2的SQL属性中写入
update clientinfoM set CustName=:p11 where CustNo=:p22
实现ANSI与UNICODE字符码的转换:在DataSetProvider2的BeforeUpdateRecord事件里写入如下代码:
adoquery2.Parameters.ParamByName('p11').Size :=Length(adoquery2.Parameters.ParamByName('P11').value)+1;(注意:只有中文才有可能显示异常,如果是英文字段,可以不转换)
2,客户端
clientdataset1.Close;//关闭数据集;
clientdataset1.ProviderName:='datasetprovider2';//使客户端数据集指向应用层服务器相应的datasetprovider2;
clientdataset1.Params.clear;//清空以前参数;
clientdataset1.Params.CreateParam(ftstring ,'p11',ptInput);//创建动态参数;
clientdataset1.Params.CreateParam(ftstring ,'p22',ptInput);//创建动态参数;
clientdataset1.Params.ParamByName('p11').AsString:=(edit1.Text);//对动态参数进行赋值;
clientdataset1.Params.ParamByName('p22').AsString:=(edit2.Text);//对动态参数进行赋值;
clientdataset1.Execute;//执行服务器端的SQL语句;
三,显示数据
1, 服务器
在ADOQUERY3的SQL属性中写入
select * from clientinfoM where CustName=:Pname
实现ANSI与UNICODE字符码的转换:在DataSetProvider1的BeforeGetRecords事件里写入如下代码:
adoquery3.Parameters.ParamByName('Pname').Size :=Length(adoquery3.Parameters.ParamByName('Pname').value)+1; (注意:只有中文才有可能显示异常,如果是英文字段,可以不转换)
2,客户端
clientdataset1.Close; //关闭数据集
clientdataset1.ProviderName:='datasetprovider3'; 使客户端数据集指向应用层服务器相应的datasetprovider
dbgrid4.DataSource:=datasource1;
clientdataset1.Params.Clear;
clientdataset1.Params.CreateParam(ftstring,'Pname',ptInput);
clientdataset1.Params.ParamByName(Pname').AsString:=trim(combobox3.text);
clientdataset1.Open; //执行服务器端的SQL语句;
(小结:SQL关键字为UPDATA,INSERT用Excute,如SELECT用Open,打开数据集)
四,其他技术
1, 省市对照表
ComboBox6中是省(province),ComboBox7中是市(city).
在ComboboxChange事件中写入
procedure TForm1.ComboBox6Change(Sender: TObject);
var
i:integer;
begin
clientdataset1.Close;
clientdataset1.ProviderName:='datasetprovider4';
dbgrid1.DataSource:=datasource1;
clientdataset1.Params.Clear;
clientdataset1.Params.CreateParam(ftstring,'province',ptInput);
clientdataset1.Params.ParamByName('province').AsString:=combobox6.text;
clientdataset1.Open;
combobox7.Items.Clear;
combobox7.Text:=clientdataset1.FieldByName('city').AsString;
for i:=0 to clientdataset1.RecordCount-1 do
begin
combobox7.Items.Add(clientdataset1.FieldByName('city').AsString);
clientdataset1.Next;
end;
end;
2,由邮政编码,自动填写区号
在EDIT49的change事件中写入。
其中edit49为邮政编码(youbian),edit66为区号(area)。
procedure TForm1.Edit49Change(Sender: TObject);
begin
if edit49.Text<>'' then
begin
clientdataset1.Close;
clientdataset1.ProviderName:='datasetprovider7';
dbgrid1.DataSource:=datasource1;
clientdataset1.Params.Clear;
clientdataset1.Params.CreateParam(ftstring,'youbian',ptInput);
clientdataset1.Params.ParamByName('youbian').AsString:=edit49.Text;
clientdataset1.Open;
edit66.Text:=clientdataset1.FieldByName('area').AsString;
end;
end;
3,三层里的模糊查询
在三层里的模糊查询和二层有些区别,我试过二层里的方法,好象不太顶用。以下是我的方法:
ClientDataSet2.Filter := '字段名 LIKE ''%' +ComboBox8.Text + '%'' ';
ClientDataSet2.Filtered := true;
4,DbGrid的点击事件
在ComboBox8中显示DbGrid1中单击的内容。
procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
form1.ComboBox8.Text:=dbgrid1.Fields[0].AsString;
end;
由于才写三层时间不长,一个多月,把自己的心得写出来和大家分享,如有说的不对的地方,请指正,QQ:12419483
- 浅谈三层数据库技术(1)
- 浅谈三层架构(1)
- 浅谈三层架构(1)
- 浅谈三层
- 浅谈三层
- 浅谈三层
- 浅谈三层
- 浅谈三层
- 浅谈数据库的分割技术
- 浅谈数据库的分割技术
- 浅谈mysql数据库优化技术
- 浅谈.NET三层架构
- 浅谈三层架构
- 浅谈三层架构
- 浅谈 三层架构
- 浅谈三层架构
- 浅谈三层架构
- 浅谈三层架构
- sqlserver导入数据库
- Windows 下安装maven
- ssh密钥的生成
- Jakarta Struts学习之应用实践
- 在非MFC程序中使用调试宏
- 浅谈三层数据库技术(1)
- 浅析Windows2000/XP服务与后门技术
- 起因
- MapObjects2.2 在C#中的应用(动态加载地图)
- Windows自启动程序十大藏身之所
- 如何删除某个用户的所有表的数据而保留表结构?
- 湖南大学论坛相册----临时放置
- 正式开张
- 六個生活的啟示