博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向过程的ado建造者模式
阅读量:7207 次
发布时间:2019-06-29

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

{*******************************************************}

{                                                       }
{       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.

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

你可能感兴趣的文章
虚机不能启动的特例思考
查看>>
OSPF概述
查看>>
自动化部署操作系统-Kickstart+PXE自动部署
查看>>
Eclipse europa 更新时 Error retrieving "feature.xml". [error in opening zip file]的解决
查看>>
Hyper-V损坏数据恢复报告
查看>>
《从零开始学Swift》学习笔记(Day 16)——字典集合
查看>>
[转]配置nginx+apache 其中动态由apache处理,静态由nginx处理
查看>>
在Word中如何实现"后退"?
查看>>
简明 Vim 练级攻略 | 酷壳 - CoolShell.cn
查看>>
养成逻辑的习惯
查看>>
jQuery attributes(上)
查看>>
ISO8583报文协议(转)
查看>>
Android文本框实现搜索和清空效果
查看>>
Logic-算法-XX部队XX侦察队员
查看>>
海量数据(数据量比较大时)的处理分析
查看>>
printf 规定数据输出方式
查看>>
Facebook Graph API(2)--读取数据之picture
查看>>
使用分析服务多维模式建立简单的分析模型
查看>>
Oracle Real Application Testing diagram
查看>>
IoC容器Autofac(2) - 一个简单示例(附demo源码)
查看>>