亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? udoadataaccess.pas

?? 抽象三層訪問數(shù)據(jù)庫示例
?? PAS
字號:
{*******************************************************}
{       軟件名稱: --通用--                              }
{       單元名稱: uDOADataAccess.pas                    }
{       中文名稱: DOA數(shù)據(jù)訪問類                         }
{       單元描述: Oracle數(shù)據(jù)訪問類                      }
{       創(chuàng)    建: SamonHua                              }
{       創(chuàng)建日期: 2007-12-18                            }
{       修    改: 參見VSS記錄                           }
{       版權所有 (C)2002-2007 深圳壹平臺信息技術有限公司}
{*******************************************************}
unit uDOADataAccess;

interface

uses
  SysUtils, Classes, Variants, DB, DBClient, OracleData, Oracle, Provider,
  uDataCopy, uCommon, uDataAccess;

type
  TDOADataAccess = class(TDataAccess)
  private
    FOracleSession: TOracleSession;
    FOracleQuery: TOracleDataSet;
    FOracleProc: TOracleDataSet;
    FOracleExecQuery: TOracleDataSet;
    FOracleUpdateQuery: TOracleDataSet;
    function GetOracleSession: TOracleSession;
    function GetOracleQuery: TOracleDataSet;
    function GetOracleProc: TOracleDataSet;
    function GetOracleExecQuery: TOracleDataSet;
    function GetOracleUpdateQuery: TOracleDataSet;
    property OracleSession: TOracleSession read GetOracleSession;
    property OracleQuery: TOracleDataSet read GetOracleQuery;
    property OracleProc: TOracleDataSet read GetOracleProc;
    property OracleExecQuery: TOracleDataSet read GetOracleExecQuery;
    property OracleUpdateQuery: TOracleDataSet read GetOracleUpdateQuery;
  protected
    function GetQueryDataSet: TDataSet; override;
    function GetUpdateDataSet: TDataSet; override;
    function DoQueryData(ASQL: string): OleVariant; override;
  public
    function GetID(const TableName: string): string; override;
    function UpdateData(Data: OleVariant; const TableNameOrSQL, KeyFields: string): Boolean; override;
    function ExcuteSQL(const ASQL: string): Boolean; override;
    function GetBlobContent(const TableName, KeyFieldName, KeyFieldValue, BlobFieldName: string;
      BlobFieldContent: TStream): boolean; override;
    function UpdateBlobContent(const TableName, KeyFieldName, KeyFieldValue, BlobFieldName: string;
      BlobFieldContent: TStream): boolean; override;
    function BeginTrans: integer; override;
    procedure CommitTrans; override;
    procedure RollbackTrans; override;
    function InTransaction: boolean; override;
  end;

implementation

{ TDOADataAccess }

function TDOADataAccess.BeginTrans: integer;
begin
  result := 0;
end;

procedure TDOADataAccess.CommitTrans;
begin
  inherited;
  OracleSession.Commit;
end;

function TDOADataAccess.DoQueryData(ASQL: string): OleVariant;
begin
  with OracleQuery do
  begin
    SQL.Text := ASQL;
    try
      Open;
      Result := QueryDataProvider.Data;
      Close;
    except
      raise;
    end;
  end;
end;

function TDOADataAccess.ExcuteSQL(const ASQL: string): Boolean;
begin
  Result := false;
  with OracleExecQuery do
  try
    SQL.Text := ASQL;
    ExecSQL;
    Result := True;
    if Session.InTransaction then
      Session.Commit;
  except
    on e: exception do
    begin
      Session.Rollback;
      raise Exception.CreateFmt('執(zhí)行SQL出錯,錯誤:%s', [e.Message]);
    end;
  end;
end;

function TDOADataAccess.GetID(const TableName: string): string;
begin
  with OracleProc do
  try
    SQL.Clear;
    SQL.Add('begin');
    SQL.Add('Get_id(:TABLENAME,:ID,:KeyField) ;');
    SQL.Add('end;');

    DeleteVariables;
    DeclareVariable('TABLENAME', otString);
    DeclareVariable('KeyField', otString);
    DeclareVariable('ID', otString);

    SetVariable('TABLENAME', trim(TableName));
    SetVariable('KeyField', ' ');
    SetVariable('ID', trim('0'));

    ExecSQL;
    Result := GetVariable('ID');
  except
    on e: Exception do
      raise Exception.CreateFmt('生成自動主鍵值失敗,錯誤:%s', [TableName]);
  end;
end;

function TDOADataAccess.GetOracleExecQuery: TOracleDataSet;
begin
  if not Assigned(FOracleExecQuery) then
  begin
    FOracleExecQuery := TOracleDataSet.Create(Self);
    FOracleExecQuery.Session := OracleSession;
  end;
  Result := FOracleExecQuery;
end;

function TDOADataAccess.GetOracleProc: TOracleDataSet;
begin
  if not Assigned(FOracleProc) then
  begin
    FOracleProc := TOracleDataSet.Create(Self);
    FOracleProc.Session := OracleSession;
  end;
  Result := FOracleProc;
end;

function TDOADataAccess.GetOracleQuery: TOracleDataSet;
begin
  if not Assigned(FOracleQuery) then
  begin
    FOracleQuery := TOracleDataSet.Create(Self);
    FOracleQuery.Session := OracleSession;
  end;
  Result := FOracleQuery;
end;

function TDOADataAccess.GetOracleSession: TOracleSession;
var
  strConnectionString: string;
begin
  if not Assigned(FOracleSession) then
  begin
    if DBName = '' then
      DBName := DBHost;
    FOracleSession := TOracleSession.Create(Self);
    FOracleSession.BytesPerCharacter := bcAutoDetect;
    FOracleSession.Pooling := spInternal;
    FOracleSession.LogonDatabase := DBName;
    FOracleSession.LogonUsername := DBUserName;
    FOracleSession.LogonPassword := DBPassword;
    FOracleSession.Connected := true;
  end;
  Result := FOracleSession;
end;

function TDOADataAccess.GetOracleUpdateQuery: TOracleDataSet;
begin
  if not Assigned(FOracleUpdateQuery) then
  begin
    FOracleUpdateQuery := TOracleDataSet.Create(Self);
    FOracleUpdateQuery.Session := OracleSession;
  end;
  Result := FOracleUpdateQuery;
end;

function TDOADataAccess.GetQueryDataSet: TDataSet;
begin
  Result := OracleQuery;
end;

function TDOADataAccess.GetUpdateDataSet: TDataSet;
begin
  result := OracleUpdateQuery;
end;

function TDOADataAccess.InTransaction: boolean;
begin
  Result := OracleSession.InTransaction;
end;

function TDOADataAccess.GetBlobContent(const TableName, KeyFieldName,
  KeyFieldValue, BlobFieldName: string;
  BlobFieldContent: TStream): boolean;
var
  tmpCDS: TClientDataSet;
  strSQL, strKeyFieldList: string;
  i: integer;
begin
  Result := false;
  tmpCDS := TClientDataSet.Create(nil);
  try
    if Pos(';', KeyFieldName) > 0 then
    begin
      strKeyFieldList := '1 = 1';
      for i := 0 to SubStrCount(KeyFieldName) do
        strKeyFieldList := strKeyFieldList
          + Format(' and %s = %s', [CopySubStr(KeyFieldName, i), QuotedStr(CopySubStr(KeyFieldValue, i))]);
    end
    else
      strKeyFieldList := Format('%s = %s', [KeyFieldName, QuotedStr(KeyFieldValue)]);
    strSQL := Format('select %s from %s where %s',
      [BlobFieldName, TableName, strKeyFieldList]);
    tmpCDS.Data := GetData(strSQL);
    if tmpCDS.IsEmpty then
      exit;
    BlobFieldContent.Position := 0;
    TBlobField(tmpCDS.Fields[0]).SaveToStream(BlobFieldContent);
    Result := True;
  finally
    tmpCDS.Free;
  end;
end;

procedure TDOADataAccess.RollbackTrans;
begin
  inherited;
  OracleSession.Rollback;
end;

function TDOADataAccess.UpdateBlobContent(const TableName, KeyFieldName,
  KeyFieldValue, BlobFieldName: string;
  BlobFieldContent: TStream): boolean;
var
  tmpCDS: TClientDataSet;
  strSQL, strKeyFieldList: string;
  i: integer;
begin
  Result := false;
  tmpCDS := TClientDataSet.Create(nil);
  try
    if Pos(';', KeyFieldName) > 0 then
    begin
      strKeyFieldList := '1 = 1';
      for i := 0 to SubStrCount(KeyFieldName) do
        strKeyFieldList := strKeyFieldList
          + Format(' and %s = %s', [CopySubStr(KeyFieldName, i), QuotedStr(CopySubStr(KeyFieldValue, i))]);
    end
    else
      strKeyFieldList := Format('%s = %s', [KeyFieldName, QuotedStr(KeyFieldValue)]);
    strSQL := Format('select %s from %s where %s',
      [BlobFieldName, TableName, strKeyFieldList]);
    tmpCDS.Data := GetData(strSQL);
    if tmpCDS.IsEmpty then
      exit;
    BlobFieldContent.Position := 0;
    tmpCDS.Edit;
    TBlobField(tmpCDS.Fields[0]).LoadFromStream(BlobFieldContent);
    tmpCDS.Post;
    Result := UpdateData(tmpCDS.Delta, TableName, KeyFieldName);
  finally
    tmpCDS.Free;
  end;
end;

function TDOADataAccess.UpdateData(Data: OleVariant; const TableNameOrSQL,
  KeyFields: string): Boolean;
var
  strTableName, strKeyFields: string;
  i: integer;
  tmpField: TField;
  blnAutoTrans: boolean;
  setProviderFlags: TProviderFlags;
begin
  result := false;
  if VarIsNull(Data) or VarIsEmpty(Data) then
  begin
    Result := True;
    exit;
  end;
  if not VarIsArray(Data) then
    raise Exception.Create('傳入的數(shù)據(jù)集數(shù)據(jù)格式非法');
  blnAutoTrans := not InTransaction;
  if blnAutoTrans then
    BeginTrans;
  try
    OracleUpdateQuery.Close;
    //UpdateDataProvider.DataSet := nil;//避免賦Data時出錯
    UpdateDataProvider.UpdateMode := upWhereAll;
    //簡單方式獲取表名
    if CompareText(Copy(Trim(TableNameOrSQL), 1, 6), 'select') = 0 then
    begin
      OracleUpdateQuery.SQL.Text := TableNameOrSQL;
      strTableName := Trim(Copy(TableNameOrSQL, pos('FROM', UpperCase(TableNameOrSQL)) + 4, MaxInt));
      if Pos(' ', strTableName) > 0 then
        strTableName := Copy(strTableName, 1, pos(' ', strTableName) - 1);
    end
    //建議采用傳表名的方式
    else
    begin
      OracleUpdateQuery.SQL.Text := Format('select * from %s where 1 = 2', [TableNameOrSQL]);
      strTableName := TableNameOrSQL;
    end;
    OracleUpdateQuery.Open;
    if not CheckSimpleTableUpdate(UpdateDataCDS, Data, KeyFields) then
      UpdateDataCDS.Data := Data;
    if UpdateDataCDS.ChangeCount = 0 then
    begin
      Result := True;
      exit;
    end;
    //設置字段更新方式
    if KeyFields <> '' then
    begin
      strKeyFields := StringReplace(KeyFields, ',', ';', [rfReplaceAll]);
      for i := 0 to UpdateDataCDS.FieldCount - 1 do
      begin
        //pfInUpdate, pfInWhere, pfInKey, pfHidden
        if ParamExists(strKeyFields, UpdateDataCDS.Fields[i].FieldName, true) then
          UpdateDataCDS.Fields[i].ProviderFlags := [pfInUpdate, pfInWhere, pfInKey]//OracleUpdateQuery.Fields[i].ProviderFlags + [pfInKey]
        else
          UpdateDataCDS.Fields[i].ProviderFlags := [pfInUpdate];//OracleUpdateQuery.Fields[i].ProviderFlags - [pfInWhere, pfInKey];
        OracleUpdateQuery.FieldByName(UpdateDataCDS.Fields[i].FieldName).ProviderFlags := UpdateDataCDS.Fields[i].ProviderFlags;
      end;
    end;
    try
      UpdateDataProvider.DataSet := OracleUpdateQuery;
      UpdateDataProvider.Options := UpdateDataProvider.Options +
        [poAllowCommandText, poCascadeUpdates];
      if KeyFields <> '' then
        UpdateDataProvider.UpdateMode := upWhereKeyOnly;
      result := UpdateDataCDS.ApplyUpdates(0) = 0;//更新數(shù)據(jù)至數(shù)據(jù)庫中
      if blnAutoTrans then
        CommitTrans;
    except
      on e: Exception do
      begin
        if blnAutoTrans then
          RollbackTrans;
        raise Exception.CreateFmt('數(shù)據(jù)集 %s 更新數(shù)據(jù)失敗,錯誤:%s', [TableNameOrSQL, e.Message]);
      end;
    end;
  finally
    OracleUpdateQuery.Close;
    UpdateDataCDS.Close;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xxxxxxxxx| 五月婷婷激情综合网| 亚洲综合丝袜美腿| 粉嫩aⅴ一区二区三区四区五区 | 色一情一伦一子一伦一区| 91精品欧美福利在线观看| 国产精品久线在线观看| 精品一区二区三区免费观看| 色婷婷久久99综合精品jk白丝 | 国产精品一区二区在线播放| 欧美日韩免费在线视频| 日韩一区中文字幕| 高清shemale亚洲人妖| 正在播放一区二区| 亚洲丰满少妇videoshd| 91国产丝袜在线播放| 1024成人网| 91在线视频观看| 国产精品久久看| 国产91精品久久久久久久网曝门| 欧美狂野另类xxxxoooo| 亚洲高清视频在线| 欧美影院一区二区三区| 亚洲黄色免费电影| 色综合久久中文字幕| 国产精品不卡在线观看| 成人avav在线| 亚洲日本乱码在线观看| 色哟哟一区二区三区| 樱花草国产18久久久久| 在线观看日产精品| 亚洲国产aⅴ天堂久久| 欧美日韩国产首页在线观看| 亚洲动漫第一页| 51午夜精品国产| 蜜臀av一区二区在线免费观看| 欧美一卡二卡三卡四卡| 久久精品99国产精品日本| 久久婷婷成人综合色| 成人av在线播放网站| 亚洲色图第一区| 欧美亚洲国产bt| 日韩精品五月天| wwwwxxxxx欧美| 成人精品一区二区三区四区 | 午夜伦欧美伦电影理论片| 欧美性欧美巨大黑白大战| 亚洲第一成人在线| 欧美v国产在线一区二区三区| 国产一区不卡在线| 中文字幕永久在线不卡| 在线观看国产91| 免费看欧美女人艹b| 国产午夜亚洲精品午夜鲁丝片| 成人高清视频在线| 亚洲夂夂婷婷色拍ww47 | 日本高清免费不卡视频| 亚洲一二三四区不卡| 日韩午夜电影在线观看| 成人免费观看视频| 天天操天天色综合| 久久久精品黄色| 日本韩国一区二区三区视频| 日本不卡的三区四区五区| 久久综合五月天婷婷伊人| k8久久久一区二区三区| 亚洲福利视频导航| 日本一区二区三区久久久久久久久不| 一本大道久久精品懂色aⅴ| 喷白浆一区二区| 亚洲精品亚洲人成人网| 欧美xxxxxxxx| 欧美亚洲综合一区| 国产福利一区在线观看| 香蕉成人伊视频在线观看| 国产精品欧美一级免费| 91精品国产91久久久久久一区二区| 大白屁股一区二区视频| 奇米四色…亚洲| 亚洲愉拍自拍另类高清精品| 久久久久久久久一| 欧美人与z0zoxxxx视频| av在线不卡电影| 极品少妇xxxx精品少妇偷拍| 亚洲综合一区二区精品导航| 国产日韩欧美精品在线| 在线成人高清不卡| 一本在线高清不卡dvd| 国产毛片精品视频| 美腿丝袜亚洲三区| 图片区日韩欧美亚洲| 亚洲尤物视频在线| 亚洲少妇屁股交4| 国产日韩精品视频一区| 日韩欧美色综合| 欧美伦理影视网| 在线中文字幕一区| 99久久久久久| aaa亚洲精品| 成人国产视频在线观看| 国产麻豆成人精品| 国产一区二区三区四| 蜜臀91精品一区二区三区| 天天影视色香欲综合网老头| 亚洲午夜三级在线| 亚洲成a人片在线观看中文| 亚洲欧美另类久久久精品| 国产精品嫩草影院com| 日本一区二区视频在线| 国产欧美视频在线观看| 国产亚洲一区字幕| 国产精品丝袜一区| 专区另类欧美日韩| 亚洲精品日韩一| 亚洲一区电影777| 亚洲大片免费看| 天天综合网 天天综合色| 亚洲成人免费观看| 日韩主播视频在线| 精品制服美女丁香| 国产成人精品影院| av在线不卡电影| 欧洲精品视频在线观看| 欧美色综合网站| 欧美一级日韩免费不卡| 欧美精品一区二| 国产精品久久久久三级| 亚洲激情一二三区| 美日韩一区二区| 成人自拍视频在线观看| 色域天天综合网| 欧美日本韩国一区二区三区视频 | 午夜精品福利一区二区三区av| 亚洲在线一区二区三区| 美日韩一区二区| 丁香一区二区三区| 在线观看网站黄不卡| 欧美一级免费观看| 亚洲男人天堂av网| 肉丝袜脚交视频一区二区| 精品一区二区三区香蕉蜜桃| 成人黄色网址在线观看| 欧美日韩国产高清一区二区| 欧美xxx久久| 亚洲另类色综合网站| 免费精品视频在线| 99久久精品99国产精品| 欧美日本韩国一区二区三区视频 | 亚洲国产美女搞黄色| 久久国产生活片100| 99久久久久久| 日韩欧美一二三区| 尤物在线观看一区| 经典三级在线一区| 在线观看成人小视频| 国产亚洲欧美在线| 亚洲一区中文在线| 成人手机在线视频| 欧美一区二区视频在线观看 | 精品日产卡一卡二卡麻豆| 中文在线一区二区 | 99v久久综合狠狠综合久久| 91精品国产一区二区三区蜜臀 | 久久人人97超碰com| 亚洲综合色噜噜狠狠| 国产毛片一区二区| 日韩三级免费观看| 一区二区三区高清不卡| 国产精品91xxx| 在线播放国产精品二区一二区四区| 欧美高清在线一区二区| 蜜臀av国产精品久久久久| 欧美视频在线观看一区| 中文字幕一区二区三区乱码在线| 免费观看在线综合| 欧美日韩黄色影视| 亚洲男人的天堂av| 成人黄色av电影| 久久久久久久久久久久久久久99 | 国产欧美日韩激情| 久久爱www久久做| 欧美精品tushy高清| 伊人一区二区三区| 91丝袜美腿高跟国产极品老师| 亚洲国产精品99久久久久久久久 | 日韩二区三区在线观看| 91免费在线看| 日韩理论片中文av| 91丨porny丨国产入口| 国产精品伦理一区二区| 国产精品69久久久久水密桃| 久久伊99综合婷婷久久伊| 美国十次了思思久久精品导航| 欧美年轻男男videosbes| 亚洲综合在线免费观看| 欧美在线一二三四区| 一区二区三区中文字幕电影| 色综合天天做天天爱| 亚洲欧美日韩国产另类专区| 色婷婷亚洲婷婷|