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 进行索取和讨论。

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

  1. delphi每次mysql密码BDE_关于Delphi的BDE

    标题:Delphi 7.0开发技巧集锦(一)------关于Delphi的BDE作者:  出处:  更新时间: 2004年08月09日 Delphi 7.0开发技巧集锦(一) 这里为读者提供一些实用的 ...

  2. delphi 用MDAC微软数据库访问组件的dll动态库

    delphi 用MDAC微软数据库访问组件的dll动态库 一.概念 MDAC(Microsoft Data Access Components)是微软数据库访问组件,Netpise和许多利用数据库的软 ...

  3. Delphi 7自带的TeeChart组件

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Delp ...

  4. ADO.NET数据集的工作原理(DataSet)

    数据集,又称为资料集.数据集合或资料集合,是指一种由数据所组成的集合.Data set(或dataset)是一个数据的集合,通常以表格形式出现 数据集 并不直接和数据库打交道,它和数据库之间的相互作用 ...

  5. WPViewPDF Delphi 和 .NET 的 PDF 查看组件

    WPViewPDF Delphi 和 .NET 的 PDF 查看组件 wpViewPDF 允许您查看可以从内存.文件或流中加载的 PDF 数据.wpViewPDF 已被开发为 Windows 类,使其 ...

  6. WPViewPDF Crack,Delphi 和 .NET 的PDF 查看组件

    WPViewPDF Crack,Delphi 和 .NET 的PDF 查看组件 wpViewPDF 允许您查看可以从内存.文件或流加载的 PDF 数据.wpViewPDF 已被开发为 Windows ...

  7. delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达

    delphi XE应用Restful时Rest组件的delphi XE ContentType即delphi XE mime type怎样获取和表达 一.uses REST.Types; //var ...

  8. delphi 自定义控件_Delphi中的自定义组件开发

    delphi 自定义控件 Components are essential elements of the Delphi environment. One of the most important ...

  9. delphi每次mysql密码BDE_关于DELPHI中BDE连接不上ORACLE数据库的問題

    Delphi连接Oracle数据库的三种方式 Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库,是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一,目前被广 ...

最新文章

  1. 一种广泛存在于Facebook、谷歌、小米、阿里等公司的研发组织管理方式
  2. mysql基础sql语句_SQL基础语句汇总
  3. 阿里巴巴云原生 etcd 服务集群管控优化实践
  4. Java的Map接口,以及Collection和Collections的区别
  5. Nginx的index指令
  6. 枚举算法称硬币C语言,【算法系列之枚举】称硬币
  7. 更新elementui图标不显示_elementUI字体图标不显示问题
  8. 基于Dockerfile创建一个最简单的docker镜像
  9. Python随机梯度下降法(三)
  10. FusionChart 保存图片
  11. 蓝桥杯 ADV-136算法提高 大数加法
  12. VC知识库搜索ADO
  13. C++——判身份证号码真伪
  14. Windows安装本地组策略编辑器
  15. html老师祝福语,教师节给老师的温馨祝福语
  16. [LeetCode刷题] 476. 数字的补数--Java实现
  17. 独立思考者的思考模型----智商160以上的人都应该学会的(摘自杜牛牛博客)
  18. Cartopy画地图第七天(python画浮雕地图和比例尺)
  19. xiuno论坛目录结构摸索记录【hook】
  20. Java基础学习——第十四章 网络编程

热门文章

  1. Jquery UI dialog 详解
  2. SQL Server 2005 Express 版
  3. 使用python库matplotlib绘制不同的图表
  4. 安装WebDriverAgent时,执行bootstrap.sh脚本报错提示:ERROR in ./js/app.js的解决方法
  5. Xamarin.Forms支持的地图显示类型
  6. iOS 访问权限设置
  7. 在docker中构建普通java程序_Docker入门-构建第一个Java程序
  8. python 字符串list转为数字list
  9. Nature封面:脑机接口重大突破!意念手写字速度破纪录!
  10. HTC打算一条道走到黑,开始资助「脑后插管操作」