{*******************************************************}
{                                                       }
{       ADO数据工厂                                     }
{                                                       }
{       版权所有 (C) 2008 咏南工作室                    }
{                                                       }
{*******************************************************}

unit uDataFactory;

interface

uses
  SysUtils,ADODB,DB,Classes,uCommFunc,ActiveX;

{ 生成连接对象 }
function GetADOConn(Owner:TComponent;AProvider:Integer=1):TADOConnection;
{ 生成数据集对象 }
function GetADODataSet(Owner:TComponent;AConn:TADOConnection;ASQL:string):TDataSet;
{ 执行事务性SQL }
procedure UpdateADODataSet(Owner:TComponent;AConn:TADOConnection;ASQL:string);
{ 生成DataSource对象 }
function GetDataSource(Owner:TComponent):TDataSource;
{ 数据绑定 }
procedure LinkControl(ADataSet:TDataSet;ADataSource:TDataSource);

implementation

function GetDataSource(Owner:TComponent):TDataSource;
var
  FDataSource:TDataSource;
begin
  FDataSource:=TDataSource.Create(Owner);
  Result:=FDataSource;
end;

procedure LinkControl(ADataSet:TDataSet;ADataSource:TDataSource);
begin
  ADataSource.DataSet:=ADataSet;
end;

//==============================================================================
// AProvider=1 sql Server: 'sqloledb'
// AProvider=2 Access: 'Microsoft.Jet.OLEDB.4.0'
//==============================================================================

function GetADOConn(Owner:TComponent;AProvider:Integer=1):TADOConnection;
var
  Conn:TADOConnection;
  sFileName,sSection:string;
begin
  sFileName:=GetINIFile;
  Conn:=TADOConnection.Create(Owner);
  with Conn do
  begin
    LoginPrompt:=False;
    if AProvider=1 then
    begin
      Provider:='sqloledb';
      sSection:='sql server';
      Properties['Data Source'].Value:=ReadIniFile(sFileName,sSection,'server','');
      Properties['User ID'].Value:=ReadIniFile(sFileName,sSection,'userid','');
      Properties['Password'].Value:=ReadIniFile(sFileName,sSection,'password','');
      Properties['Initial Catalog'].Value:=ReadIniFile(sFileName,sSection,'database','');
    end;
    if aprovider=2 then
    begin
      Provider:='microsoft.jet.oledb.4.0';
      sSection:='access';
      Properties['Jet OLEDB:Database Password'].Value:=ReadIniFile(sFileName,sSection,'database password','');
      Properties['Data Source'].Value:=ReadIniFile(sFileName,sSection,'server','');
      Properties['User ID'].Value:=ReadIniFile(sFileName,sSection,'userid','');
      Properties['Password'].Value:=ReadIniFile(sFileName,sSection,'password','');
    end; 
    try
      open;
      Result:=Conn;
    except
      raise Exception.Create('数据库连接失败');
    end;
  end;
end;

function GetADODataSet(Owner:TComponent;AConn:TADOConnection;ASQL:string):TDataSet;
var
  DataSet:TADODataSet;
begin
  dataset:=TADODataSet.Create(owner);
  dataset.Connection:=aconn;
  with dataset do
  begin
    Close;
    CommandText:='';
    CommandText:=ASQL;
    Open;
  end;
  Result:=DataSet;
end;

procedure UpdateADODataSet(Owner:TComponent;AConn:TADOConnection;ASQL:string);
var
  FDataSet:TADOCommand;
begin
  FDataSet:=TADOCommand.Create(Owner);
  FDataSet.Connection:=AConn;
  AConn.BeginTrans;
  try
    with FDataSet do
    begin
      CommandText:='';
      CommandText:=ASQL;
      Execute;
    end; 
    AConn.CommitTrans;
  except
    AConn.RollbackTrans;
  end;
end;

end.

转载于:https://www.cnblogs.com/hnxxcxg/archive/2008/03/14/2941061.html

面向过程的ado建造者模式相关推荐

  1. Java设计模式之创建型:建造者模式

    一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...

  2. java - 建造者模式

    2019独角兽企业重金招聘Python工程师标准>>> 1,定义: 建造者模式也叫生成器模式,将一个复杂对象的构件与它的标识分离,使得同样的构建过程可以构件不同的标识. 2,通用类图 ...

  3. 学习设计模式之建造者模式

    文章目录 一.定义 二.问题背景 三.违背设计模式的设计实现 四.问题改进 五.总结 一.定义 建造者模式的核心目的是通过使用多个简单对象一步步地构建出一个复杂对象,通过控制操作台,一步步地组装出坦克 ...

  4. 设计模式详解:建造者模式

    今天来看一下创建新模式中的第五种模式:建造者模式.仍然是先看两张图,复习模式类型,加深记忆. 定义: 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Build ...

  5. 浅谈工厂和建造者模式

    最近在写安卓项目,在引入rxJava和Retrofit发现大量引用的建造者模式.那在此就记录和简单介绍一下两者的区别和使用方法. 工厂模式和建造者模式都属于创建型模式,它对类的实例化进行了抽象. 1. ...

  6. C++设计模式——建造者模式

    建造者模式 在GOF的<设计模式 可复用面向对象软件的基础>中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话,似懂非懂的.一个复杂对象的创建 ...

  7. Java建造者模式(生成器模式)

    基本介绍: 建造者模式又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象 建造者模式是一步一步建造一个复杂 ...

  8. C++ 设计模式 建造者模式(复杂对象的构建与其表示分离)肯德基不同烧鸡的制作过程

    文章目录 1. 理论基础 2. 逻辑代码 3. 应用 3.1 做汉堡咯 思考: 为何肯德基麦当劳这些快餐能在中国这个上下五千年的国都站住脚? 中国的鱼香肉丝为何不能成为令人追捧的快餐? 因为麦当劳肯德 ...

  9. 一口气讲完设计模式(单例模式、工厂模式、原型模式、建造者模式、适配器、桥梁模式)

    设计模式 使用设计模式,可以让我们的代码具有更好的可读性.可扩展性.可读性.重用性.符合高内聚低耦合的特点.作为程序员,是我们经常听到的概念,也是我们程序员必须深入学习,了解的知识. 设计模式种类 该 ...

最新文章

  1. AndroidStudio中下载某版本gradle速度慢,从哪里高速下载指定版本gradle
  2. C语言多维数组做函数参数技术推演
  3. Xcode 不用签名编译程序
  4. 图论--Dijkstra算法总结
  5. 2014/4/4做题感悟
  6. 算法笔记_036:预排序(Java)
  7. Home_W的位运算(位运算+预处理)
  8. shell脚本编程之循环控制语句(continue/break/sleep)
  9. 二维\三维绘图AutoCAD 2022 for Mac
  10. IF:4+ 铁代谢和免疫相关基因标记预测三阴性乳腺癌的临床结局和分子特征
  11. php getimagesize svg,getimagesize
  12. 现在买笔记本电脑要注意哪些方面? 哪些比较好?
  13. 如何快速在两个服务器之间传送大文件
  14. 自组织竞争网络(SOM)
  15. IETP认证辅导,什么是认证供应商计划及安全保证证书由哪个组织颁发的
  16. Manjaro找不到声卡问题
  17. Fig : 一款超高颜值和功能强大的终端自动补全工具
  18. [RCTF 2019]Nextphp(php7.4的FFI扩展安全问题)
  19. 《三国志11》版明星头像
  20. ObjectARX 类库

热门文章

  1. 存储知识:U盘的实际容量要比标注容量小,你知道原因吗?
  2. 【收集】常用的cmd命令
  3. 计算机应用用什么样的笔记本,制图用什么笔记本好
  4. Android 第九课 常用控件-------ListView
  5. 真效率神器,UI稿智能转换成前端代码,准确率极高
  6. 碎片时间学习前端,我推荐这些~
  7. 金三银四的腾讯、阿里、​字节等大厂前端社招面经
  8. 一个简单的JDBC通用工具
  9. React Native - FlexBox弹性盒模型
  10. RDS for MySQL Mysqldump常见问题及处理