工厂模式之数据工厂

;数据库连接配置文件db.ini

[current database]
dbtype=access

[sql server]
database=wwater
userid=sa
password=
server=192.168.0.177

[access]
server=./db1.mdb
userid=admin
password=
dbpass=

[Oracle]
server=
userid=
password=

unit uADOFactory;

interface

uses
  SysUtils,ADODB,DB,IniFiles,Forms,Classes,ActiveX;

const
  c_SqlSvrPrd='sqloledb';
  c_AccessPrd='microsoft.jet.oledb.4.0';
  c_oracle='MSDAORA.1';

{ 生成TADOConnection }
function GetADOConn(Owner:TComponent):TADOConnection;
{ 生成TADOQuery }
function GetADOQuery(Owner:TComponent;AConn:TADOConnection;ASQL:string):TADOQuery;
{ 生成TDataSource对象 }
function GetDataSource(Owner:TComponent):TDataSource;
{ 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;

function GetADOConn(Owner:TComponent):TADOConnection;
var
  Conn:TADOConnection;
  sFileName,sSection,sType:string;
  ini:TIniFile;
begin
  CoInitialize(nil);
  sFileName:=ExtractFilePath(Application.ExeName)+'db.ini';
  Conn:=TADOConnection.Create(Owner);
  with Conn do
  begin
    LoginPrompt:=False;
    ini:=TIniFile.Create(sFileName);
    sType:=ini.ReadString('current database','dbtype','');
    try
      if sType='sql server' then
      begin
        Provider:=c_SqlSvrPrd;
        sSection:='sql server';
        Properties['Data Source'].Value:=ini.ReadString(sSection,'server','');
        Properties['User ID'].Value:=ini.ReadString(sSection,'userid','');
        Properties['Password'].Value:=ini.ReadString(sSection,'password','');
        Properties['Initial Catalog'].Value:=
          ini.ReadString(sSection,'database','');
      end;
      if sType='access' then
      begin
        Provider:=c_AccessPrd;
        sSection:='access';
        Properties['Jet OLEDB:Database Password'].Value:=
          ini.ReadString(sSection,'database password','');
        Properties['Data Source'].Value:=ini.ReadString(sSection,'server','');
        Properties['User ID'].Value:=ini.ReadString(sSection,'userid','');
        Properties['Password'].Value:=ini.ReadString(sSection,'password','');
      end;
      if sType='oracle' then
      begin
        Provider:=c_oracle;
        sSection:='oracle';
        Properties['Data Source'].Value:=ini.ReadString(ssection,'server','');
        Properties['User ID'].Value:=ini.ReadString(sSection,'userid','');
        Properties['Password'].Value:=ini.ReadString(sSection,'password','');
      end;
      try
        Connected:=True;
        Result:=Conn;
      except
        Result:=nil;
        raise Exception.Create('数据库连接失败');
      end;
    finally
      ini.Free;
    end;
  end;
  CoUninitialize;
end;

function GetADOQuery(Owner:TComponent;AConn:TADOConnection;ASQL:string):TADOQuery;
var
  DataSet:TADOQuery;
begin
  dataset:=TADOQuery.Create(owner);
  dataset.Connection:=aconn;
  with dataset do
  begin
    Close;
    SQL.Clear;
    SQL.Text:=ASQL;
    Open;
  end;
  Result:=DataSet;
end;

end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值