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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bdedatadriverdesigneh.pas

?? 一個(gè)功能強(qiáng)大的DBGRID控件
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{*******************************************************}
{                                                       }
{                     EhLib v4.0                        }
{                                                       }
{         TBDEDesignDataBaseEh (Build 4.0.21)               }
{                                                       }
{     Copyright (c) 2004-2005 by Dmitry V. Bolshakov    }
{                                                       }
{*******************************************************}

unit BDEDataDriverDesignEh;

{$I EHLIB.INC}

interface

{$IFDEF CIL}
{$R BDEDataDriverEh.TBDEDataDriverEh.bmp}
{$ENDIF}

uses Windows, SysUtils, Classes, Controls, DB,
{$IFDEF CIL}
  EhLibVCLNET,
{$ELSE}
  EhLibVCL,
{$ENDIF}
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
{$IFDEF EH_LIB_5} Contnrs, {$ENDIF}
  ToolCtrlsEh, DBCommon, MemTableDataEh, DataDriverEh, DBTables,
  SQLDriverEditEh, BDEDataDriverEh, ComCtrls, MemTableEh, Forms;

type

{ IBDEDesignDataBaseEh }

  IBDEDesignDataBaseEh = interface
  ['{9E53BD33-4E5E-414F-9E4A-4980A8F7637A}']
    function GetDataBase: TDataBase;
  end;

{ TBDEDesignDataBaseEh }

  TBDEDesignDataBaseEh = class(TDesignDataBaseEh, IBDEDesignDataBaseEh)
  private
    FDBEDataBase: TDataBase;
    FTreeNodeMan: TCustomDBService;
    FRuntimeDataBaseName: String;
    FDBService: TCustomDBService;
    FUpdateObjectsList: TStringList;
  protected
    function GetConnected: Boolean; override;
    procedure SetConnected(const Value: Boolean); override;
    procedure DataBaseDisconnected(Sender: TObject);
  public
    constructor Create;
    destructor Destroy; override;
    function GetEngineName: String; override;
    function GetServerTypeName: String; override;
    function CreateDesignCopy(RTDataDriver: TCustomSQLDataDriverEh): TCustomSQLDataDriverEh; override;
    function DesignDataBaseConnetionEqual(DataDriver: TCustomSQLDataDriverEh): Boolean; override;
    function Execute(Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof: Boolean): Integer; override;
    function GetDataBase: TDataBase;
    function BuildUpdates(DataDriver: TCustomSQLDataDriverEh): Boolean; override;
    function CreateReader(SQL: String; FParams: TParamsArr): TDataSet; override;
    function ExecuteSQL(SQL: String; FParams: TParamsArr): Integer;
    function BuildObjectTree(List: TList): Boolean; override;
    function BuildInformixObjectTree2(List: TList): Boolean;
    function BuildInterbaseObjectTree2(List: TList): Boolean;
    function BuildOracleObjectTree(List: TList): Boolean;
    function GetFieldList(const TableName: string; DataSet: TDataSet): Boolean; override;
    function SupportCustomSQLDataDriver: Boolean; override;
    function GetSpecParamsList: String; override;
    function GetCustomDBService: TCustomDBService; override;
    function GetIncrementObjectsList: TStrings; override;
    procedure BuildQueryPlan(PlanTable: TMemTableEh; Command: TCustomSQLCommandEh); override;
    procedure EditDatabaseParams; override;
    procedure ResetDesignInfo; override;
    property RuntimeDataBaseName: String read FRuntimeDataBaseName write FRuntimeDataBaseName;
  end;

{ TBDEDesignDataBaseEh }

  TBDEUniService = class(TCustomDBService)
  private
    ServerService: TCustomDBService;
  public
    constructor Create(ADesignDB: TDesignDataBaseEh); override;
    destructor Destroy; override;
    function CreateRootNodes: TList; override;
//    function CreateNodes(Parent: IGetSQLTreeNode): TList; override;
    function CreateNodes(Parent: TSQLTreeNode): TList; override;
    function ShowPopup(Source: TObject; Coord: TPoint; Params: TServicePopupParams): Integer; override;
    class function GetDBServiceName: String; override;
  end;

procedure UnregisterBDEAccessEngines;
procedure RegisterBDEAccessEngines;

{$IFDEF DESIGNTIME}
procedure Register;
{$ENDIF}

implementation

uses BDE, DesignConnectionListEh, 
{$IFDEF DESIGNTIME}
	MemTableDesignEh,
{$IFDEF DESIGNTIME}
  {$IFDEF CIL}
    Borland.Vcl.Design.DbEdit,
    Borland.Vcl.Design.FldProp,
  {$ELSE}
    Dbedit,
  {$ENDIF}
{$ENDIF}
{$IFDEF CIL}
  Borland.Vcl.Design.DesignIntf,
{$ELSE}
  {$IFDEF EH_LIB_6}
     DesignIntf,
  {$ELSE} //EH_LIB_6
      DsgnIntf,
  {$ENDIF}
  DBReg,
{$ENDIF}
{$ENDIF}
Dialogs, UpdateSQLEditEh;

type
  TDBDescription = record
    szName          : String;          { Logical name (Or alias) }
    szText          : String;          { Descriptive text }
    szPhyName       : String;          { Physical name/path }
    szDbType        : String;          { Database type }
  end;

{$IFDEF CIL}
{$ELSE}
function StrToOem(const AnsiStr: string): string;
begin
  SetLength(Result, Length(AnsiStr));
  if Length(Result) > 0 then
    CharToOem(PChar(AnsiStr), PChar(Result));
end;
{$ENDIF}

function GetDatabaseDesc(DBName: String; var Description: TDBDescription): Boolean;
var
  Desc: DBDesc;
begin
  Result := False;
{$IFDEF CIL}
  if DbiGetDatabaseDesc(DBName, Desc) <> 0 then Exit;
{$ELSE}
  if DbiGetDatabaseDesc(PChar(StrToOem(DBName)), @Desc) <> 0 then Exit;
{$ENDIF}
  Description.szName := Desc.szName;
  Description.szText := Desc.szText;
  Description.szPhyName := Desc.szPhyName;
  Description.szDbType := Desc.szDbType;
  Result := True;
end;

var
  DataBaseInc: Integer = 0;

function GetUnicalDataBaseName: String;
begin
  Inc(DataBaseInc);
  Result := 'BDEDataDriverEhDataBaseName' + IntToStr(DataBaseInc);
end;

function CreateDesignDataBase(DataDriver: TBDEDataDriverEh): TComponent;
var
  DesignDataBase: TBDEDesignDataBaseEh;
  SourceDataBase: TDataBase;
  Description: TDBDescription;

  function IsAlias(DatabaseName: String): Boolean;
  var
    List: TStringList;
  begin
    Result := False;
    List := TStringList.Create;
    try
      Session.GetAliasNames(List);
      if List.IndexOf(DatabaseName) >= 0 then
        Result := True;
    finally
      List.Free;
    end;
  end;

begin
  DesignDataBase :=  TBDEDesignDataBaseEh.Create;
  SourceDataBase := Session.FindDatabase(DataDriver.DatabaseName);
  if SourceDataBase <> nil then
  begin
    DesignDataBase.FDBEDataBase.DatabaseName := GetUnicalDataBaseName;
    if (SourceDataBase.AliasName = '') and
      (SourceDataBase.DriverName = '') and
      GetDatabaseDesc(DataDriver.DatabaseName, Description)
    then
      DesignDataBase.FDBEDataBase.AliasName := DataDriver.DatabaseName
    else if SourceDataBase.AliasName <> '' then
      DesignDataBase.FDBEDataBase.AliasName := SourceDataBase.AliasName
    else if SourceDataBase.DriverName <> '' then
      DesignDataBase.FDBEDataBase.DriverName := SourceDataBase.DriverName;
    DesignDataBase.FDBEDataBase.Params := SourceDataBase.Params;
  end else if IsAlias(DataDriver.DatabaseName) then
    DesignDataBase.FDBEDataBase.DatabaseName := DataDriver.DatabaseName
  else if GetDatabaseDesc(DataDriver.DatabaseName, Description) then
    DesignDataBase.FDBEDataBase.DatabaseName := DataDriver.DataBaseName;
  DesignDataBase.RuntimeDataBaseName := DataDriver.DatabaseName;

{$IFDEF DESIGNTIME}
  EditDatabase(DesignDataBase.FDBEDataBase);
{$ENDIF}

  Result := DesignDataBase;
end;

procedure SetDesignDBEDataBaseProcEh(DataDriver: TCustomSQLDataDriverEh);
var
  i: Integer;
  DesignDataBase: TComponent;
begin
  if DataDriver.DesignDataBase = nil then
  begin
    for i := 0 to GetDesignDataBaseList.Count-1 do
      if TDesignDataBaseEh(GetDesignDataBaseList[i]).DesignDataBaseConnetionEqual(DataDriver) then
      begin
        DataDriver.DesignDataBase := TComponent(GetDesignDataBaseList[i]);
        Exit;
      end;

    if GetDesignDataBaseList.Count > 0 then
    begin
      DesignDataBase := SelectDesignConnectionListEh(DesignDataBaseList);
      if (DesignDataBase <> nil) and (DesignDataBase <> DataDriver.DesignDataBase) then
        DataDriver.DesignDataBase := DesignDataBase;
    end else
      DataDriver.DesignDataBase := CreateDesignDataBase(TBDEDataDriverEh(DataDriver));
  end;
end;

{ TBDEDesignDataBaseEh }

function TBDEDesignDataBaseEh.BuildObjectTree(List: TList): Boolean;
begin
//  TreeView.Items.Clear;
  if GetServerTypeName = 'INFORMIX' then
    Result := BuildInformixObjectTree2(List)
  else if GetServerTypeName = 'INTRBASE' then
    Result := BuildInterbaseObjectTree2(List)
  else if GetServerTypeName = 'ORACLE' then
    Result := BuildOracleObjectTree(List)
  else
    Result := False;
end;

function TBDEDesignDataBaseEh.BuildUpdates(DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
  Result := EditDataDriverUpdateSQL(DataDriver as TCustomSQLDataDriverEh);// UpdateSQLEditEh
end;

constructor TBDEDesignDataBaseEh.Create;
begin
  inherited Create;
  FDBEDataBase := TDatabase.Create(Application);
  FDBEDataBase.DatabaseName := GetUnicalDataBaseName;
  FDBEDataBase.AfterDisconnect := DataBaseDisconnected;
//  FColumnsMT := TMemTableEh.Create(nil);
end;

destructor TBDEDesignDataBaseEh.Destroy;
begin
//  ShowMessage('TBDEDesignDataBaseEh.Destroy');
  if not (csDestroying in Application.ComponentState) then
    FreeAndNil(FDBEDataBase);
//  FreeAndNil(FColumnsMT);
  FreeAndNil(FTreeNodeMan);
  FreeAndNil(FDBService);
  inherited Destroy;
end;

function TBDEDesignDataBaseEh.CreateDesignCopy(RTDataDriver: TCustomSQLDataDriverEh): TCustomSQLDataDriverEh;
begin
  Result := TBDEDataDriverEh.Create(nil);
  Result.SelectCommand := RTDataDriver.SelectCommand;
  Result.UpdateCommand := RTDataDriver.UpdateCommand;
  Result.InsertCommand := RTDataDriver.InsertCommand;
  Result.DeleteCommand := RTDataDriver.DeleteCommand;
  Result.GetrecCommand := RTDataDriver.GetrecCommand;
  TBDEDataDriverEh(Result).SpecParams := TBDEDataDriverEh(RTDataDriver).SpecParams;
  TBDEDataDriverEh(Result).DatabaseName := FDBEDataBase.DatabaseName;
end;

function TBDEDesignDataBaseEh.DesignDataBaseConnetionEqual(DataDriver: TCustomSQLDataDriverEh): Boolean;
begin
  Result := False;
  if DataDriver is TBDEDataDriverEh then
    Result := (TBDEDataDriverEh(DataDriver).DatabaseName = RuntimeDataBaseName);
end;

function TBDEDesignDataBaseEh.Execute(Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
begin
  Result := -1;
  FreeOnEof := True;
  with Command do
    case CommandType of
      cthSelectQuery, cthUpdateQuery:
        begin
          Cursor := TQuery.Create(nil);
          with Cursor as TQuery do
          begin
            DataBaseName := FDBEDataBase.DatabaseName;
            SQL := Command.CommandText;
            Params := Command.GetParams;
            if CommandType = cthSelectQuery then
              Open
            else
            begin
              ExecSQL;
              Result := RowsAffected;
            end;
          end;
        end;
      cthTable:
        begin
          Cursor := TTable.Create(nil);
          with Cursor as TTable do
          begin
            DataBaseName := FDBEDataBase.DatabaseName;
            TableName := Command.CommandText.Text;
//            Params := Command.GetParams;
            Open;
          end;
        end;
      cthStoredProc:
        begin
          Cursor := TStoredProc.Create(nil);
          with Cursor as TStoredProc do
          begin
            DataBaseName := FDBEDataBase.DatabaseName;
            StoredProcName := Command.CommandText.Text;
            Params := Command.GetParams;
            ExecProc;
          end;
        end;
    end;
end;

function TBDEDesignDataBaseEh.GetDataBase: TDataBase;
begin
  Result := FDBEDataBase;
end;

function TBDEDesignDataBaseEh.GetServerTypeName: String;
var
  Description: TDBDescription;
begin
  if not FDBEDataBase.Connected then
  try
    FDBEDataBase.Open;
  except
    Application.HandleException(Self);
  end;
  if GetDatabaseDesc(FDBEDataBase.DatabaseName, Description) then
  begin
    Result := UpperCase(Description.szDbType);
  end;
end;

function TBDEDesignDataBaseEh.BuildInterbaseObjectTree2(List: TList): Boolean;
var
  NList: Tlist;
  i: Integer;
//  TreeNode: TTreeNode;
begin
  if FTreeNodeMan <> nil then
    FTreeNodeMan.Free;
  FTreeNodeMan := TInterbaseDBService.Create(Self);
  NList := FTreeNodeMan.CreateRootNodes;
//  List.Assign(NList, laCopy);
  List.Clear;
  for I := 0 to NList.Count - 1 do
    List.Add(NList[I]);

{  for i := 0 to List.Count-1 do
  begin
    TreeNode := TreeView.Items.Add(nil, TSQLTreeNode(List[i]).FName);
    TreeNode.HasChildren := True;
    TreeNode.Data := List[i];
  end;}
  NList.Free;
  Result := True;
end;

function TBDEDesignDataBaseEh.BuildInformixObjectTree2(List: TList): Boolean;
var
  NList: Tlist;
  i: Integer;
//  TreeNode: TTreeNode;
begin
  if FTreeNodeMan <> nil then
    FTreeNodeMan.Free;
  FTreeNodeMan := TInformixDBService.Create(Self);
  NList := FTreeNodeMan.CreateRootNodes;
//  List.Assign(NList, laCopy);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利一区福利二区| 日韩精品色哟哟| 波多野结衣在线一区| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩av二区在线播放| 91精品国产欧美一区二区18| 捆绑紧缚一区二区三区视频| 精品国产乱码久久久久久牛牛| 国产一区二区三区日韩| 国产精品久久久久一区二区三区| 色婷婷精品大在线视频| 亚洲午夜在线观看视频在线| 欧美一区在线视频| 国产精品白丝jk白祙喷水网站| 国产精品萝li| 在线看不卡av| 久久99精品国产.久久久久| 欧美精彩视频一区二区三区| 色偷偷成人一区二区三区91| 日韩电影在线免费观看| 国产午夜精品福利| 色综合 综合色| 精品制服美女久久| 国产精品乱码妇女bbbb| 欧美精选午夜久久久乱码6080| 韩国成人精品a∨在线观看| 亚洲欧洲一区二区三区| 91精品在线免费观看| 国产成人av在线影院| 亚洲一区二区在线观看视频| 26uuu精品一区二区三区四区在线| 成人短视频下载| 图片区小说区区亚洲影院| 国产欧美精品一区二区色综合 | 91麻豆自制传媒国产之光| 日日骚欧美日韩| 久久精品男人的天堂| 欧美日韩dvd在线观看| 成人午夜电影网站| 日本成人在线电影网| 亚洲天堂久久久久久久| 精品国精品自拍自在线| 色女孩综合影院| 国产二区国产一区在线观看| 日本v片在线高清不卡在线观看| 国产精品不卡一区| 日韩女优av电影| 欧美日韩激情在线| 91网站黄www| 国v精品久久久网| 捆绑紧缚一区二区三区视频| 亚洲高清免费视频| 亚洲日本在线视频观看| 久久久久国产一区二区三区四区| 欧美日韩国产三级| 99久久精品99国产精品| 国产真实精品久久二三区| 婷婷夜色潮精品综合在线| 亚洲男人的天堂av| 1024精品合集| 国产欧美日韩亚州综合| 精品国产乱码久久久久久久久 | 欧美三级韩国三级日本三斤| av福利精品导航| 国产高清精品在线| 国产一区二区调教| 美女mm1313爽爽久久久蜜臀| 三级不卡在线观看| 天天操天天综合网| 亚洲成av人片在线观看无码| 亚洲综合色区另类av| 17c精品麻豆一区二区免费| 国产精品美女久久久久aⅴ国产馆| 国产亚洲一本大道中文在线| 久久只精品国产| 亚洲精品一区二区三区四区高清| 日韩视频免费观看高清完整版在线观看 | 3d动漫精品啪啪| 欧美日韩mp4| 欧美一区二区三区成人| 91精品午夜视频| 欧美一区二区三区思思人| 91精品国产91综合久久蜜臀| 欧美一区永久视频免费观看| 日韩一级高清毛片| 精品国产第一区二区三区观看体验| 亚洲一区二区三区在线播放| 精品国产电影一区二区| 日韩精品资源二区在线| 日韩欧美精品在线| 欧美精品一区二区高清在线观看| 久久先锋影音av鲁色资源网| 久久久精品日韩欧美| 国产欧美日本一区二区三区| 中文字幕一区二区在线观看| 一区二区三区高清在线| 午夜精品久久久久久久| 久色婷婷小香蕉久久| 高清av一区二区| 91麻豆国产精品久久| 欧美日韩日日夜夜| 日韩精品一区二区三区四区视频| 久久精品一区二区三区不卡| 1024成人网色www| 亚洲高清视频的网址| 日本aⅴ精品一区二区三区| 国产高清精品网站| 色噜噜狠狠成人网p站| 91精品国产日韩91久久久久久| 久久久久久久久久久久电影| 亚洲天堂精品视频| 美女在线观看视频一区二区| 国产91丝袜在线播放| 欧美最猛性xxxxx直播| 91精品国产综合久久久久久久久久 | 国产精品成人免费在线| 亚洲va天堂va国产va久| 国产一区二区在线看| 在线精品国精品国产尤物884a| 日韩一卡二卡三卡国产欧美| 国产精品网友自拍| 午夜精品久久久久久久99樱桃| 国产成人亚洲综合a∨婷婷图片| 日本韩国一区二区| 久久先锋资源网| 亚洲超碰精品一区二区| 国产精品一线二线三线精华| 欧美中文字幕不卡| 欧美激情一区三区| 免费高清在线一区| 色婷婷综合久色| 久久久久久久久久久黄色| 亚洲高清久久久| 成人av片在线观看| 欧美白人最猛性xxxxx69交| 伊人色综合久久天天| 国产河南妇女毛片精品久久久| 欧美精品久久99| 亚洲素人一区二区| 国产成人精品网址| 日韩精品中午字幕| 亚洲综合成人在线视频| 懂色av一区二区在线播放| 日韩欧美久久久| 五月综合激情网| 在线中文字幕一区| 国产精品国产三级国产专播品爱网| 精品一区二区免费视频| 777久久久精品| 亚洲综合色成人| 99久久精品情趣| 中文字幕中文字幕在线一区| 国产在线精品免费| 欧美videos中文字幕| 日韩高清不卡一区| 欧美日韩国产免费| 亚洲一区二区三区激情| 色老综合老女人久久久| 中文字幕综合网| 99精品欧美一区| 亚洲色图欧美在线| 色狠狠色狠狠综合| 亚洲欧美另类小说视频| 一本色道久久综合亚洲精品按摩| 国产精品的网站| 99综合电影在线视频| 亚洲欧洲av另类| 色综合视频一区二区三区高清| 中文字幕一区二区三区蜜月 | 18欧美亚洲精品| 91一区二区三区在线播放| 国产精品久久久久久久久免费相片 | 亚洲视频一区在线| 91丨九色丨国产丨porny| 国产精品久久毛片av大全日韩| www.亚洲精品| 亚洲免费av网站| 欧美精品一级二级三级| 丝袜亚洲另类欧美综合| 欧美成人在线直播| 国产乱色国产精品免费视频| 欧美国产精品久久| 色8久久人人97超碰香蕉987| 亚洲在线视频一区| 制服丝袜成人动漫| 九色porny丨国产精品| 国产三级三级三级精品8ⅰ区| 国产99久久久精品| 亚洲女人的天堂| 欧美乱熟臀69xxxxxx| 精品一区二区三区在线播放视频| 久久久99免费| 色综合网色综合| 奇米精品一区二区三区四区| 久久久精品国产99久久精品芒果| thepron国产精品| 日韩精品一卡二卡三卡四卡无卡| 欧美不卡一区二区三区| 99久久久国产精品| 人人超碰91尤物精品国产|