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

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

?? sqldriverediteh.pas

?? EHlib CN For Delphi2009
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
      else SelectDBService.DBServiceClass := nil;
    SelectDBService.DBName := f.eDataBaseName.Text;
    Result := True;
  end;
  f.Free;

//  Index := SelectFromList(DBServiceList);
//  if Index >=0 then
//    Result := TCustomDBServiceClass(DBServiceList.Objects[Index]);
end;

procedure RegisterDefaultDBService();
begin
//  RegisterDBService('Oracle', TOracleDBService);
  RegisterDBService('Interbase', TInterbaseDBService);
  RegisterDBService('Informix', TInformixDBService);
//  RegisterDBService('MSSQL', TMSSQLDBService);
//  RegisterDBService('MSAccess', TMSAccessDBService);
//  RegisterDBService('MySQL', TMySQLDBService);
end;

{ Engines unils }

procedure InitAccessEngineList();
begin
  if AccessEngineList = nil then
    AccessEngineList := TStringList.Create;
end;

procedure ReleaseAccessEngineList;
var
  i: Integer;
begin
  if AccessEngineList <> nil then
  begin
    for i := 0 to AccessEngineList.Count-1 do
      TAccessEngineEh(AccessEngineList.Objects[i]).Free;
    FreeAndNil(AccessEngineList);
  end;
end;

procedure RegisterAccessEngine(EngineName: String; Engine: TAccessEngineEh);
var
  OldEngine: TAccessEngineEh;
begin
  InitAccessEngineList();
  OldEngine := GetAccessEngineByName(EngineName);
  if OldEngine <> nil then
    UnregisterAccessEngine(EngineName);
  AccessEngineList.AddObject(EngineName, Engine);
//  ShowMessage('AccessEngineList.Count = ' +  IntToStr(AccessEngineList.Count));
end;

procedure UnregisterAccessEngine(EngineName: String);
var
  DBEngineInx: Integer;
begin
// Realy need to release all DesignDataBases for every unit.finalization that have TXXXDesignDataBase.
// but now every unit have UnregisterAccessEngine
  ReleaseDesignDataBaseList;
  if AccessEngineList = nil then
    Exit;
  DBEngineInx := AccessEngineList.IndexOf(EngineName);
  if DBEngineInx > -1 then
  begin
    AccessEngineList.Objects[DBEngineInx].Free;
    AccessEngineList.Delete(DBEngineInx);
  end;
end;

function GetAccessEngineByName(EngineName: String): TAccessEngineEh;
var
  DBEngineInx: Integer;
begin
  Result := nil;
  if AccessEngineList = nil then
    Exit;
  DBEngineInx := AccessEngineList.IndexOf(EngineName);
  if DBEngineInx > -1 then
    Result := TAccessEngineEh(AccessEngineList.Objects[DBEngineInx]);
end;

(*function GUISelectAccessEngine(SelectDBService: TSelectDBService): Boolean;
var
  f: TfSelectFromList;
begin
  Result := False;
  f := TfSelectFromList.Create(Application);
  f.cbEngine.Items := AccessEngineList;
  f.cbDBService.Items := DBServiceList;
  f.eDataBaseName.Text := SelectDBService.DBName;
  if f.ShowModal = mrOk then
  begin
    if f.cbEngine.ItemIndex >= 0
      then SelectDBService.AccessEngine := TAccessEngineEh(AccessEngineList.Objects[f.cbEngine.ItemIndex])
      else SelectDBService.AccessEngine := nil;
    if f.cbDBService.ItemIndex >= 0
      then SelectDBService.DBServiceClass := TCustomDBServiceClass(DBServiceList.Objects[f.cbDBService.ItemIndex])
      else SelectDBService.DBServiceClass := nil;
    SelectDBService.DBName := f.eDataBaseName.Text;
    Result := True;
  end;
  f.Free;
end;*)

function GUISelectAccessEngine(SelectDBService: TSelectDBService): Boolean;
var
  f: TfSelectFromList;
begin
  Result := False;
  f := TfSelectFromList.Create(Application);
  if AccessEngineList <> nil then
    f.cbEngine.Items := AccessEngineList;
  if DBServiceList <> nil then
    f.cbDBService.Items := DBServiceList;
  f.eDataBaseName.Text := SelectDBService.DBName;
  f.DBServiceEngineList := GetDBServiceEngineList;
  if f.ShowModal = mrOk then
  begin
    if f.cbEngine.ItemIndex >= 0
      then SelectDBService.AccessEngine := TAccessEngineEh(AccessEngineList.Objects[f.cbEngine.ItemIndex])
      else SelectDBService.AccessEngine := nil;
    if f.cbDBService.ItemIndex >= 0
      then SelectDBService.DBServiceClass := TCustomDBServiceClass(f.cbDBService.Items.Objects[f.cbDBService.ItemIndex])
//      then SelectDBService.DBServiceClass := TCustomDBServiceClass(DBServiceList.Objects[f.cbDBService.ItemIndex])
      else SelectDBService.DBServiceClass := nil;
    SelectDBService.DBName := f.eDataBaseName.Text;
    Result := True;
  end;
  f.Free;
end;


procedure SetDesignSQLDataBaseProcEh(DataDriver: TCustomSQLDataDriverEh);
var
  sdb: TSelectDBService;
  DesignDataBase: TComponent;
begin
  if DataDriver.DesignDataBase <> nil then Exit;
  if GetDesignDataBaseList.Count > 0 then
  begin
    DesignDataBase := SelectDesignConnectionListEh(DesignDataBaseList);
    if (DesignDataBase <> nil) and (DesignDataBase <> DataDriver.DesignDataBase) then
      DataDriver.DesignDataBase := DesignDataBase;
  end else
  begin
    sdb := TSelectDBService.Create;
    if GUISelectAccessEngine(sdb) and (sdb.AccessEngine <> nil) then
      DataDriver.DesignDataBase := sdb.AccessEngine.CreateDesignDataBase(DataDriver, sdb.DBServiceClass, sdb.DBName);
    sdb.Free;
  end;
end;

{ DBServiceEngines unils }

var
  DBServiceEngineList: TObjectList = nil;

function GetDBServiceEngineList: TObjectList;
begin
  Result := DBServiceEngineList;
end;

procedure RegisterDBServiceEngine(AccessEngine: TAccessEngineEh; DBService: TCustomDBServiceClass);
var
  i: Integer;
begin
  if DBServiceEngineList = nil then
    DBServiceEngineList := TObjectList.Create(True);
  for i := 0 to DBServiceEngineList.Count-1 do
  begin
    if (TDBServiceItem(DBServiceEngineList[i]).AccessEngine = AccessEngine) and
       (TDBServiceItem(DBServiceEngineList[i]).DBService = DBService)
    then
    begin
      TDBServiceItem(DBServiceEngineList[i]).AccessEngine := AccessEngine;
      TDBServiceItem(DBServiceEngineList[i]).DBService := DBService;
      Exit;
    end;
  end;
  DBServiceEngineList.Add(TDBServiceItem.Create);
  TDBServiceItem(DBServiceEngineList[DBServiceEngineList.Count-1]).AccessEngine := AccessEngine;
  TDBServiceItem(DBServiceEngineList[DBServiceEngineList.Count-1]).DBService := DBService;
end;

procedure UnregisterDBServiceEngine(DBService: TCustomDBServiceClass);
var
  i: Integer;
begin
  if DBServiceEngineList = nil then
    DBServiceEngineList := TObjectList.Create(True);
  for i := 0 to DBServiceEngineList.Count-1 do
  begin
    if {(TDBServiceItem(DBServiceEngineList[i]).AccessEngine = AccessEngine) and}
       (TDBServiceItem(DBServiceEngineList[i]).DBService = DBService)
    then
    begin
      TObject(DBServiceEngineList.Extract(DBServiceEngineList[i])).Free;
      Exit;
    end;
  end;
end;

procedure ReleaseDBServiceEngineList;
begin
  if DBServiceEngineList <> nil then
    FreeAndNil(DBServiceEngineList);
end;

{ DesignDataBaseList }

function GetDesignDataBaseList: TObjectList;
begin
  if DesignDataBaseList = nil then
    DesignDataBaseList := TObjectList.Create(False);
  Result := DesignDataBaseList;
end;

procedure ReleaseDesignDataBaseList;
begin
  if DesignDataBaseList = nil then
    Exit;

  while DesignDataBaseList.Count > 0 do
    DesignDataBaseList[0].Free;

//  for i := 0 to DesignDataBaseList.Count-1 do
//    DesignDataBaseList[i] := nil; // Free as
  FreeAndNil(DesignDataBaseList);
end;

{ DesignDataBase unils }

var
  DesignDBClassList: TStringList = nil;

procedure InitDesignDBClassList();
begin
  if DesignDBClassList = nil then
    DesignDBClassList := TStringList.Create;
end;

procedure RegisterDesignDataBaseClass(EngineName: String; DesignDBClass: TDesignDataBaseClassEh);
var
  OldDesignClass: TDesignDataBaseClassEh;
begin
  InitDesignDBClassList();
  OldDesignClass := GetDesignDataBaseClassByName(EngineName);
  if OldDesignClass <> nil then
    UnregisterDesignDataBaseClass(EngineName);
  DesignDBClassList.AddObject(EngineName, TObject(DesignDBClass));
end;

procedure UnregisterDesignDataBaseClass(EngineName: String);
var
  DesignClassIdx: Integer;
begin
  if DesignDBClassList = nil then
    Exit;
  DesignClassIdx := DesignDBClassList.IndexOf(EngineName);
  if DesignClassIdx > -1 then
  begin
    DesignDBClassList.Objects[DesignClassIdx].Free;
    DesignDBClassList.Delete(DesignClassIdx);
  end;
end;

function GetDesignDataBaseClassByName(EngineName: String): TDesignDataBaseClassEh;
var
  DesignClassIdx: Integer;
begin
  Result := nil;
  if DesignDBClassList = nil then
    Exit;
  DesignClassIdx := DesignDBClassList.IndexOf(EngineName);
  if DesignClassIdx > -1 then
    Result := TDesignDataBaseClassEh(DesignDBClassList.Objects[DesignClassIdx]);
end;

function GUISelectDesignDataBaseClass: TDesignDataBaseClassEh;
begin
  Result := nil;
  if DesignDBClassList = nil then
    Exit;
end;

{ TDesignDataBaseEh }

constructor TDesignDataBaseEh.Create;
begin
  inherited Create(nil);
  GetDesignDataBaseList.Add(Self);
  FTreeDataSet := CreateTreeDataSet;
//  FTreeDataSet.Open;
end;

destructor TDesignDataBaseEh.Destroy;
begin
//  ShowMessage('TBDEDesignDataBaseEh.Destring');
  GetDesignDataBaseList.Remove(Self);
  FTreeDataSet.Close;
  FreeAndNil(FTreeDataSet);
  inherited Destroy;
//  ShowMessage('TBDEDesignDataBaseEh.Destred');
end;

{$IFNDEF EH_LIB_6}

function TDesignDataBaseEh.IntfGetComponent: TComponent;
begin
  Result := Self;
end;

{$ENDIF}

{
function TDesignDataBaseEh._AddRef: Integer;
begin
  Result := inherited _AddRef;
end;

function TDesignDataBaseEh._Release: Integer;
//var
//  OldRefCount: Integer;
begin
//  OldRefCount := RefCount;
  Result := inherited _Release;
//  if OldRefCount = 2 then
//    RemoveFromDesignDataBaseList;
end;

function TDesignDataBaseEh.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  Result := inherited QueryInterface(IID, Obj);
end;
}

procedure TDesignDataBaseEh.RemoveFromDesignDataBaseList;
begin
  GetDesignDataBaseList.Remove(Self);
end;

procedure TDesignDataBaseEh.EditDatabaseParams;
begin

end;

function TDesignDataBaseEh.GetEngineName: String;
begin
  Result := '';
end;

function TDesignDataBaseEh.GetFieldList(const TableName: string; DataSet: TDataSet): Boolean;
begin
  Result := False;
end;

function TDesignDataBaseEh.GetServerTypeName: String;
begin
  Result := '';
end;

procedure TDesignDataBaseEh.BuildQueryPlan(PlanTable: TMemTableEh;
  Command: TCustomSQLCommandEh);
begin
 //
end;

function TDesignDataBaseEh.GetConnected: Boolean;
begin
  Result := False;
end;

procedure TDesignDataBaseEh.SetConnected(const Value: Boolean);
begin
end;

function TDesignDataBaseEh.GetSpecParamsList: String;
begin
  Result := '';
end;

function TDesignDataBaseEh.GetCustomDBService: TCustomDBService;
begin
  Result := nil;
end;

function TDesignDataBaseEh.GetIncrementObjectsList: TStrings;
begin
  Result := nil;
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人91精品二区三区| 一本色道久久综合亚洲精品按摩| 国产一区二区中文字幕| 91视频观看视频| 精品国产乱码久久| 午夜精品福利一区二区三区av| 国产一区二区三区在线观看免费 | 久久超级碰视频| 在线精品国精品国产尤物884a| 国产性天天综合网| 蜜桃av噜噜一区二区三区小说| 一本色道久久综合狠狠躁的推荐| 精品国产第一区二区三区观看体验| 夜夜嗨av一区二区三区四季av | 日韩av一区二| 欧美三级中文字幕在线观看| 亚洲三级在线免费观看| 成人一区二区三区在线观看| 精品国产乱码91久久久久久网站| 图片区小说区国产精品视频| 欧美亚洲国产bt| 伊人色综合久久天天| 国产91对白在线观看九色| 精品日韩在线观看| 奇米777欧美一区二区| 欧美日韩国产一级二级| 亚洲午夜激情网页| 欧美视频在线不卡| 亚洲欧美一区二区三区久本道91 | 亚洲精选免费视频| 国产黄色精品网站| 久久久久免费观看| 国产乱子伦一区二区三区国色天香| 91精品婷婷国产综合久久竹菊| 亚洲超碰97人人做人人爱| 欧美色偷偷大香| 午夜欧美电影在线观看| 91精品欧美久久久久久动漫| 丝袜美腿亚洲一区二区图片| 欧美一卡2卡3卡4卡| 蜜桃av噜噜一区| 久久久综合九色合综国产精品| 国产精品66部| 亚洲猫色日本管| 欧美日本国产一区| 国产自产v一区二区三区c| 欧美本精品男人aⅴ天堂| 国产一区二区精品久久| 国产精品超碰97尤物18| 色综合天天狠狠| 天天影视涩香欲综合网| 欧美成人免费网站| 大尺度一区二区| 一区二区三区电影在线播| 欧美久久久久久久久久| 久久99久久久欧美国产| 国产嫩草影院久久久久| 色婷婷av一区二区三区大白胸| 亚洲高清免费在线| 久久综合色婷婷| 成人久久18免费网站麻豆| 一级精品视频在线观看宜春院| 欧美嫩在线观看| 国产凹凸在线观看一区二区| 亚洲免费毛片网站| 日韩精品一区二区三区四区视频| 国产成人精品免费视频网站| 亚洲一区二区欧美日韩| 久久麻豆一区二区| 欧美日韩精品电影| 粉嫩aⅴ一区二区三区四区| 夜夜精品视频一区二区| 久久男人中文字幕资源站| 欧美无砖专区一中文字| 福利电影一区二区| 视频一区免费在线观看| 欧美国产激情二区三区| 欧美一三区三区四区免费在线看 | 韩国女主播成人在线| 一区二区三区国产| 国产三级精品三级| 日韩一区二区免费视频| 99这里只有久久精品视频| 免费观看在线综合色| 欧美日韩色综合| 国产精品99久久久久久久vr| 日韩欧美国产高清| 蜜桃视频免费观看一区| 亚洲图片一区二区| 国产日韩欧美高清| 亚洲人成网站在线| 欧美日韩亚洲丝袜制服| 97久久超碰国产精品| 最新日韩在线视频| 久久久久国产精品免费免费搜索| 欧美优质美女网站| youjizz国产精品| 精品一区二区三区视频| 亚洲高清中文字幕| 一区二区激情小说| 国产精品久久久久7777按摩| 久久久久久一级片| 亚洲精品在线网站| 精品欧美久久久| 日韩一区二区三区视频在线| 在线不卡欧美精品一区二区三区| 在线观看亚洲精品| 色婷婷精品久久二区二区蜜臂av| 99麻豆久久久国产精品免费| 成人听书哪个软件好| 成人毛片在线观看| 99国产精品99久久久久久| 97精品视频在线观看自产线路二| 国产激情视频一区二区三区欧美 | 日本乱码高清不卡字幕| heyzo一本久久综合| av欧美精品.com| va亚洲va日韩不卡在线观看| 99久久久精品免费观看国产蜜| av欧美精品.com| 在线观看三级视频欧美| 在线观看网站黄不卡| 在线不卡免费av| 欧美成人精品1314www| 欧美va亚洲va香蕉在线| 久久久久久综合| 国产精品电影一区二区三区| 一区二区三区精密机械公司| 亚洲国产日韩一级| 麻豆精品一二三| 国产99久久久国产精品免费看| av电影一区二区| 欧美性色aⅴ视频一区日韩精品| 欧美日韩国产小视频在线观看| 欧美一区二区三区四区高清| 精品欧美一区二区久久| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 色94色欧美sute亚洲线路二 | 国产精品久久久久婷婷| 欧美主播一区二区三区| 色综合视频一区二区三区高清| 在线亚洲免费视频| 日韩一区二区三区精品视频 | 国产成人亚洲综合色影视| 国产精品精品国产色婷婷| 亚洲色图.com| 青青草视频一区| 国产91精品露脸国语对白| 91福利精品视频| 欧美成人艳星乳罩| 亚洲欧美另类在线| 麻豆视频观看网址久久| 成人福利视频在线| 欧美一区二区三区成人| 日本一区免费视频| 亚洲成人高清在线| 国产精品一区专区| 欧美在线一二三四区| 精品国产一区二区三区四区四| 中文字幕中文在线不卡住| 日韩专区一卡二卡| 91在线观看污| 精品国产乱码久久久久久图片| 亚洲免费观看在线观看| 国产高清久久久| 欧美另类z0zxhd电影| 亚洲欧洲av在线| 国产一区亚洲一区| 9191国产精品| 亚洲免费观看高清完整| 国产精品自拍av| 日韩精品专区在线| 亚洲午夜精品久久久久久久久| 成人国产一区二区三区精品| 欧美一级国产精品| 亚洲成人免费在线观看| 99精品在线观看视频| 国产视频在线观看一区二区三区| 午夜精品久久久久久久| 91在线视频观看| 国产精品伦一区| 国产精品77777| 精品久久久久久久久久久院品网| 亚洲不卡一区二区三区| 97久久精品人人做人人爽50路| 精品国产网站在线观看| 三级成人在线视频| 欧美综合一区二区| 亚洲乱码国产乱码精品精小说| 国产成人免费网站| 国产亲近乱来精品视频| 国产制服丝袜一区| 日韩欧美在线综合网| 蜜桃一区二区三区在线| 欧美一区2区视频在线观看| 免费日本视频一区| 欧美一级高清大全免费观看| 美女高潮久久久| 欧美电影免费提供在线观看| 麻豆成人久久精品二区三区红|