博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
阅读量:5967 次
发布时间:2019-06-19

本文共 3619 字,大约阅读时间需要 12 分钟。

Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery

一、背景

为什么要做这个三合一数据集组件呢?曾经我们公司用delphi开发的系统大多以ADO,BDE方式来连接数据库,这两套组件使用十分方便和灵活,对成本控制也十分友好,从曾经十多年间使用情况来看问题都不大,用户也没有三层架构的要求。但在今年投标大公司的项目时,往往会被技术要求阻拦,为什么呢?甲方的标书上写着要三层架构,这令我们十分头疼,眼下我们公司是使用Tuxedo来做中间层,假设改造,那么成本估计是一年的时间,二个版本号的维护成本也是十分高昂。面对这样的情况,我提出三合一的思路,即构建新数据集组件。新组件兼容曾经Query的所有属性和方法,仅仅需使用UE编辑器替换曾经Query类就能够了,并能够在Tuxedo,BDE,ADO三种连接方式间进行切换,系统也不用另外维护一个版本号。思疏才浅,希望大家多多不吝赐教,感激不尽。

二、组件结构图

从结构图中能够看到使用了装饰模式,HsTxQuery将用户的訪问对象放在了自己的身后,依据连接方式转发给不同对象。它訪问Tuxedo是通过HsTxQuery.dll訪问,中间有一层转换,而BDE、ADO是直接连接。

三、设计类

 

四、样例

1、  打开

procedure TForm1.Button7Click(Sender: TObject);

begin

  HsQuery2.close;

  HsQuery2.SQL.Text := 'select * from users';

  HsQuery2.Open;   

end;

 

2、  运行

procedure TForm1.Button7Click(Sender: TObject);

begin

  HsQuery2.close;

  HsQuery2.SQL.Text := 'insert test value(1,2,3)';

  HsQuery2. ExecSQL;   

end;

 

3、  插入记录

procedure TForm1.Button9Click(Sender: TObject);

var

  ms : TMemoryStream;

begin

  ms := TMemoryStream.Create;

  Image2.Picture.Graphic.SaveToStream(ms);

  with HsQuery2 do

  begin

    database.StartTransaction;

    Append;

    HsQuery2.FieldByName('f1').AsString := FormatDateTime('YYYYMMDDHHMMSS',now);

    HsQuery2.FieldByName('f2').AsString := FormatDateTime('YYYYMMDD',now);

    HsQuery2.FieldByName('f3').AsString := FormatDateTime('HHMMSS',now);

    HsQuery2.FieldByName('f4').AsString := '潇洒哥';

    HsQuery2.FieldByName('f5').AsString := '1';

    HsQuery2.FieldByName('f6').AsString := '330102199001164317';

    HsQuery2.FieldByName('f7').AsString := '1';

    HsQuery2.SetBlobStream(HsQuery2.FieldByName('fPHOTO'),ms); 

    Post;

    ApplyUpdates;

    CommitUpdates;

    database.Commit;

  end;

  ms.Free;

end;

 

4、  更新记录

procedure TForm1.Button10Click(Sender:TObject);

var

  ms: TMemoryStream;

begin

  ms:= TMemoryStream.Create;

 Image2.Picture.Graphic.SaveToStream(ms);

 HsQuery2.Edit;

 HsQuery2.Fields.Fields[0].AsString := '6';

 HsQuery2.Fields.Fields[1].AsInteger := 198;

 HsQuery2.Fields.Fields[2].AsString := '';

 HsQuery2.Fields.Fields[3].AsString := 'Roy';

 HsQuery2.Fields.Fields[4].AsString := '1';

 HsQuery2.Fields.Fields[5].AsString := '2';

 HsQuery2.SetBlobStream(HsQuery2.Fields.Fields[6],ms);

 HsQuery2.Post;

 HsQuery2.ApplyUpdates;

 HsQuery2.CommitUpdates;

 ms.Free;

end;

 

5、  删除记录

 HsQuery2.Delete;

 

6、  存/取Blob数据

存,查看插入样例。

procedure TForm1.Button8Click(Sender: TObject);

var

      Stream:TMemoryStream;

      Jpg:TjpegImage;

begin

 Stream:=HsQuery2.GetBlobStream(HsQuery2.FieldByName('DATA'))   ;

   Jpg:=TjpegImage.Create   ;

   Stream.Position   :=0;

   jpg.LoadFromStream(Stream);         //   载入图片

   image2.Picture.Assign(Jpg);

end;

 

7、  获取字段值

 

procedure TForm1.Button15Click(Sender: TObject);

begin

  ShowMessage(hsQuery2.FieldByName('userid').AsString);

  ShowMessage(hsQuery2.Fields.Fields[0].AsString);

end;

 

8、  过滤

//以下是过滤

hsQuery2.Filter := 'userid=102';

  hsQuery2.Filtered := true;

//以下是反过滤

hsQuery2.Filter := '';

  hsQuery2.Filtered := true;

 

9、  參数

/

procedure TForm1.Button16Click(Sender: TObject);

begin

  with hsquery2 do

  begin

    close;

    sql.clear;

    sql.Text := 'Select * From users where USERID = :id';

    ParamByName('id').value := 106;

    open;

  end;

end;

 

10、             Tuxedo、BDE和ADO模式动态切换

/

procedure TForm1.ComboBox1Change(Sender: TObject);

begin

  case combobox1.ItemIndex of

    0 :

    begin

      hsQuery2.DatasetType := dtTuxedo;

      hsQuery2.ConnectionString := '//192.168.1.121:8887';

    end;

    1 :

    begin

      hsQuery2.DatasetType := dtBDE;

      hsQuery2.ConnectionString := 'orcl';

      hsQuery2.Connection := Database1;

    end;

    2 :

    begin

      hsQuery2.DatasetType := dtADO;

      hsQuery2.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Password=gf;Persist Security Info=True;User ID=gf;Data Source=orcl;Extended Properties=""';

      hsQuery2.Connection := ADOConnection1;

    end;

  end;

end;

 

 

五、展望

非常多进行数据换的中间件(如各种MQ)都能够封装成易用的组件,使开发员生活更美好。

开发样例请增加QQ群:69024049 进行索取和讨论。

转载地址:http://kwqax.baihongyu.com/

你可能感兴趣的文章
对软件测试团队“核心价值”的思考
查看>>
深入理解html5系列-文本标签
查看>>
mysql基础知识点
查看>>
Microsoft.System.Center.Operations.Manager.2007 中文版完整光盘下载地址
查看>>
Python快速教程
查看>>
我的友情链接
查看>>
ssh免密码登录
查看>>
Linux下Django环境安装
查看>>
如何在指定的内容中找出指定字符串的个数
查看>>
我的友情链接
查看>>
浅谈如何用We7站群平台打造垂直性政务网站
查看>>
我的友情链接
查看>>
Traversing Mapping Filtering Folding Reducing
查看>>
Go bytes包
查看>>
Spring MVC请求处理流程分析
查看>>
ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
查看>>
生产环境MySQL 5.5.x单机多实例配置实践
查看>>
Web应用工作原理、动态网页技术
查看>>
EXCEL工作表保护密码破解 宏撤销保护图文教程
查看>>
Catalan数(卡特兰数)
查看>>