热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

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

一、背景为什么要做这个三合一数据集组件呢?以前我们公司用delphi开发的系统大多以ADO,BDE方式来连接数据库,这两套组件使用十分方便和灵活,对成本控制也十分友好,从以前十多年间使用情况来看问题都不大,用户也没有三层架构的要求。但在今年投标大公司

一、背景 为什么要做这个三合一数据集组件呢?以前我们公司用delphi开发的系统大多以ADO,BDE方式来连接数据库,这两套组件使用十分方便和灵活,对成本控制也十分友好,从以前十多年间使用情况来看问题都不大,用户也没有三层架构的要求。但在今年投标大公司

一、背景

为什么要做这个三合一数据集组件呢?以前我们公司用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)都可以封装成易用的组件,使开发员生活更美好。

控件地址:https://sourceforge.net/projects/hstxqueryfordelphi/


推荐阅读
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
  • GIMP 2.99.2 发布:UI 采用 GTK3 实现、原生支持高分屏和 Wayland
    开源项目评选最后一周,手里的5票再不用就没用了https:www.oschina.netprojecttop_cn_2020GIMP2.99.2已发布,同时这也标志着GIMP3.0的到来,其中最显著的变化是从GTK2过渡到GTK3工具包。基于 ... [详细]
  • Unity编辑器插件:NGUI资源引用检测工具
    本文介绍了一款基于NGUI的资源引用检测工具,该工具能够帮助开发者快速查找和管理项目中的资源引用。其功能涵盖Atlas/Sprite、字库、UITexture及组件的引用检测,并提供了替换和修复功能。文末提供源码下载链接。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 编写了几个500行左右代码的程序,但基本上解决问题还是面向过程的思维,如何从问题中抽象出类,形成类的划分和设计,从而用面向对象的思维解决问题?有这方面的入门好书吗?最好是结合几个具体的案例分析的 ... [详细]
  • HTML基础入门指南
    本文将深入浅出地介绍HTML的基础知识,包括其定义、开发工具、制定机构、特性、基本标签及更多实用内容。 ... [详细]
  • 在安装 SQL Server 时,选择混合验证模式可以提供更高的灵活性和管理便利性。如果您已经安装了 SQL Server 并使用单一的 Windows 身份验证模式,可以通过以下步骤将其更改为混合验证模式。 ... [详细]
author-avatar
Edwin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有