zoukankan      html  css  js  c++  java
  • 工厂模式之数据工厂

    ;数据库连接配置文件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.

  • 相关阅读:
    采用软件负载均衡器实现web服务器集群
    MS Server 定时备份
    项目失败的若干征兆
    理解SQL Server中的权限体系
    项目管理思考 权利
    基于'sessionStorage'与'userData'的类session存储
    Fit健身APP与HarmonyOS创新合作 打造全新在线健身体验
    #2020征文手机#HarmonyOS轻量级偏好数据库初体验
    鸿蒙HarmonyOS应用开发落地实践,Harmony Go 技术沙龙落地北京
    【2021年1月16日公开课】分布式家庭记账本Demo分享,干货满满!
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940906.html
Copyright © 2011-2022 走看看