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

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

?? sqldriverediteh.pas

?? 一個功能強大的DBGRID控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
{*******************************************************}
{                                                       }
{               EhLib v4.2 (Build 4.2.09)               }
{                                                       }
{                TSQLDataEditWin form                   }
{                                                       }
{     Copyright (c) 2004-2006 by Dmitry V. Bolshakov    }
{                                                       }
{*******************************************************}

unit SQLDriverEditEh;

{$I EHLIB.INC}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Grids, DBGridEh, ExtCtrls, Buttons, Mask,
  DBCtrlsEh, DataDriverEh, DB, MemTableEh, MemTableDataEh, SQLEditFrameEh,
{$IFDEF CIL}
  EhLibVCLNET,
{$ELSE}
  EhLibVCL,
{$ENDIF}
{$IFDEF EH_LIB_6}
  Variants,
{$ENDIF}
  Contnrs, Menus, ImgList, StdActns, ActnList, ToolWin, GridsEh;

type

{ TSQLDataEditWin }
  TSQLTreeNode = class;
  TCustomDBService = class;
  TDesignDataBaseEh = class;
  TCustomDBServiceClass = class of TCustomDBService;

(*  IGetSQLTreeNode = interface
  ['{48BFF91A-8FD5-4F69-8938-8251C1B11C3A}']
    function GetSQLTreeNode: TSQLTreeNode;
  end;
*)

  TSQLDataEditWin = class(TForm)
    Panel1: TPanel;
    DBGridEh1: TDBGridEh;
    Panel2: TPanel;
    StatusBar1: TStatusBar;
    Button1: TButton;
    Button2: TButton;
    Splitter1: TSplitter;
    Splitter3: TSplitter;
    Panel6: TPanel;
    Panel7: TPanel;
    DBEditEh1: TDBEditEh;
    sbRefreshTree: TSpeedButton;
    MemTableEh1: TMemTableEh;
    DataSource1: TDataSource;
    mtParams: TMemTableEh;
    dsParams: TDataSource;
    mtParamsParName: TStringField;
    mtParamsParType: TStringField;
    mtParamsParValue: TStringField;
    gridTreeDetail: TDBGridEh;
    mtTreeDetail: TMemTableEh;
    dsTreeDetail: TDataSource;
    Splitter4: TSplitter;
    Panel3: TPanel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Splitter2: TSplitter;
    PanelParams: TPanel;
    gridParams: TDBGridEh;
    Panel5: TPanel;
    Memo1: TMemo;
    Panel8: TPanel;
    bExecute: TButton;
    Panel9: TPanel;
    SpeedButton2: TSpeedButton;
    TabSheet2: TTabSheet;
    FrameInsertSQL: TSQLEditFrame;
    TabSheet3: TTabSheet;
    FrameUpdateSQL: TSQLEditFrame;
    TabSheet4: TTabSheet;
    FrameDeleteSQL: TSQLEditFrame;
    bBuildUpdates: TButton;
    Image1: TImage;
    Panel4: TPanel;
    sbRefresh: TSpeedButton;
    PopupMenu1: TPopupMenu;
    Ggg1: TMenuItem;
    gridDBTree: TDBGridEh;
    dsDBTree: TDataSource;
    mtDBTree: TMemTableEh;
    mtDBTreeName: TStringField;
    mtDBTreeChieldCount: TIntegerField;
    mtDBTreeDescription: TStringField;
    mtDBTreeId: TAutoIncField;
    mtDBTreeRefParent: TIntegerField;
    bCheck: TButton;
    bQueryPlan: TButton;
    spCut: TSpeedButton;
    sbCopy: TSpeedButton;
    spPaste: TSpeedButton;
    sbSelectAll: TSpeedButton;
    ActionList1: TActionList;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    EditSelectAll1: TEditSelectAll;
    ImageList1: TImageList;
    ImageList2: TImageList;
    mtDBTreeImageIndex: TIntegerField;
    TabSheet5: TTabSheet;
    FrameGetRecSQL: TSQLEditFrame;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    tsSpecParams: TTabSheet;
    Panel11: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    MemoUpdateFields: TMemo;
    MemoKeyFields: TMemo;
    Bevel1: TBevel;
    Bevel2: TBevel;
    dbeUpdateTable: TDBEditEh;
    Label3: TLabel;
    Bevel3: TBevel;
    GroupBox1: TGroupBox;
    cbDinaDeleteSQL: TCheckBox;
    cbDinaInsertSQL: TCheckBox;
    cbDinaUpdateSQL: TCheckBox;
    Panel12: TPanel;
    mSpecParams: TMemo;
    Panel10: TPanel;
    Label4: TLabel;
    Bevel4: TBevel;
    bLoadSpecString: TButton;
    Bevel5: TBevel;
    mtDBTreeRefData: TRefObjectField;
    procedure sbRefreshTreeClick(Sender: TObject);
    procedure bExecuteClick(Sender: TObject);
    procedure sbHideShowClick(Sender: TObject);
    procedure Splitter2CanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure bBuildUpdatesClick(Sender: TObject);
    procedure MemTableEh1AfterOpen(DataSet: TDataSet);
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Memo1Exit(Sender: TObject);
    procedure Memo1Enter(Sender: TObject);
    procedure sbRefreshClick(Sender: TObject);
    procedure DBEditEh1EditButtons0Click(Sender: TObject;
      var Handled: Boolean);
    procedure DBEditEh1EditButtons1Click(Sender: TObject;
      var Handled: Boolean);
    procedure Memo1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure Ggg1Click(Sender: TObject);
    procedure dsDBTreeDataChange(Sender: TObject; Field: TField);
    procedure gridDBTreeMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure gridDBTreeStartDrag(Sender: TObject;
      var DragObject: TDragObject);
    procedure bQueryPlanClick(Sender: TObject);
    procedure gridDBTreeColumns0GetCellParams(Sender: TObject;
      EditMode: Boolean; Params: TColCellParamsEh);
    procedure bLoadSpecStringClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure gridParamsColumns0UpdateData(Sender: TObject; var Text: string;
      var Value: Variant; var UseText, Handled: Boolean);
  private
    FCharHeight: Integer;
    FSQLCanvas: TControlCanvas;
    FDesignDriver: TCustomSQLDataDriverEh;
    FDataDriver: TCustomSQLDataDriverEh;
    FDesignDataBase: TDesignDataBaseEh;
    procedure SetDesignDataBase(const Value: TDesignDataBaseEh);
//    procedure InsertText(Text: string; AddComma: Boolean = True);
    procedure DrawCaretPosIndicator;
//    procedure SetDataDriver(const Value: TCustomSQLDataDriverEh);
    property DesignDriver: TCustomSQLDataDriverEh read FDesignDriver write FDesignDriver;
    procedure SetObjectTreeParams;
    procedure ResetObjectTreeParams;
//    procedure BuildObjectTree;
    function ExecuteCommand(DataDriver: TCustomSQLDataDriverEh;
      Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
//    function DesignDataBase: TDesignDataBaseEh;
    procedure DesignDatabaseChanged();
  protected
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    Panel3Width: Integer;
//    DragSQLTreeNode: IGetSQLTreeNode;
    DragSQLTreeNode: TSQLTreeNode;
    mtDBTreeLoading: Boolean;
    destructor Destroy; override;
    procedure AssignToDesignDriver;
    procedure AssignToDesignControls;
    procedure mtDBTreeExpanding(Sender: TObject; RecordNumber: Integer; var AllowExpansion: Boolean);
    procedure gridTreeDetailColumns0GetCellParams(Sender: TObject;
      EditMode: Boolean; Params: TColCellParamsEh);
    property DataDriver: TCustomSQLDataDriverEh read FDataDriver write FDataDriver;
    property DesignDataBase: TDesignDataBaseEh read FDesignDataBase write SetDesignDataBase;
  end;

  TParamsArr = array of Variant;

{ TDesignDataBaseEh }

  TDesignDataBaseEh = class(TComponent, IDesignDataBaseEh
{$IFNDEF EH_LIB_6}, IInterfaceComponentReference, IUnknown {$ENDIF}
    )
  protected
    FTreeDataSet: TMemTableEh;
    procedure RemoveFromDesignDataBaseList;
    function GetConnected: Boolean; virtual;
    procedure SetConnected(const Value: Boolean); virtual;
{$IFNDEF EH_LIB_6}
    { IInterfaceComponentReference }
    function IInterfaceComponentReference.GetComponent = IntfGetComponent;
    function IntfGetComponent: TComponent;
{$ENDIF}
  public
    constructor Create; reintroduce;
    destructor Destroy; override;
    function BuildObjectTree(List: TList): Boolean; virtual;
    function BuildUpdates(DataDriver: TCustomSQLDataDriverEh): Boolean; virtual;
//    function Connected: Boolean; virtual; abstract;
    function CreateDesignCopy(RTDataDriver: TCustomSQLDataDriverEh): TCustomSQLDataDriverEh; virtual;
    function CreateReader(SQL: String; FParams: TParamsArr): TDataSet; virtual;
    function DesignDataBaseConnetionEqual(DataDriver: TCustomSQLDataDriverEh): Boolean; virtual;
    function Execute(Command: TCustomSQLCommandEh; var Cursor: TDataSet; var FreeOnEof: Boolean): Integer; overload; virtual;
    function Execute(SQLText: String; CommandType: TSQLCommandTypeEh; VarParams: Variant; var Cursor: TDataSet): Integer; overload; virtual;
    function GetEngineName: String; virtual;
    function GetServerTypeName: String; virtual;
    function GetFieldList(const TableName: string; DataSet: TDataSet): Boolean; virtual;
    function GetSpecParamsList: String; virtual;
    function SupportCustomSQLDataDriver: Boolean; virtual; abstract;
    function GetCustomDBService: TCustomDBService; virtual;
    function GetIncrementObjectsList: TStrings; virtual;
    function GetObjectTreeDataSet: TDataSet; virtual;
    function CreateTreeDataSet: TMemTableEh; virtual;
    procedure mtDBTreeExpanding(Sender: TObject; RecordNumber: Integer; var AllowExpansion: Boolean);
    procedure BuildQueryPlan(PlanTable: TMemTableEh; Command: TCustomSQLCommandEh); virtual;
    procedure EditDatabaseParams; virtual;
    procedure ResetDesignInfo; virtual;
    procedure AssignFromDesignDataDriver(DesignDataDriver, RuntimeDataDriver: TCustomSQLDataDriverEh); virtual;
    procedure AssignToDesignDataDriver(DesignDataDriver, RuntimeDataDriver: TCustomSQLDataDriverEh); virtual;
    property Connected: Boolean read GetConnected write SetConnected;
  end;

  TDesignDataBaseClassEh = class of TDesignDataBaseEh;

{ Engines unils }

  TAccessEngineEh = class(TObject)
    function AccessEngineName: String; virtual; abstract;
    function CreateDesignDataBase(DataDriver: TCustomSQLDataDriverEh;
      DBServiceClass: TCustomDBServiceClass; DataBaseName: String): TDesignDataBaseEh;
        virtual; abstract;
  end;

  TSQLTreeNodeTemplate = class;

  TColumnAtribute = record
    FieldName: String;
    Title: String;
    Width: Integer;
  end;

  TFieldAtribute = record
    FieldName: String;
    FieldType: TMTDataFieldEh;
    Size: Integer;
  end;

  TGetTextEvent = function(Sender: TObject): String of object;

  TServicePopupParam = record
    Text: String;
    OnSelect: TNotifyEvent;
    OnGetMenuText: TGetTextEvent;
    OnGetDataText: TGetTextEvent;
  end;

  TServicePopupParams = array of TServicePopupParam;

  TColumnAttributes = array of TColumnAtribute;

  TFieldAtributesEh = array of TFieldAtribute;

//  TSQLTreeNode = class(TObject, IInterface, IGetSQLTreeNode)
//  TSQLTreeNode = class(TInterfacedObject, IGetSQLTreeNode)
  TSQLTreeNode = class(TObject)
  private
    FOnDragDrop: TDragDropEvent;
    function GetSQLTreeNode: TSQLTreeNode;
  protected
(*
{$IFNDEF CIL}
    { IInterface }
    function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
{$ENDIF}
*)
  public
    FFullName: String;
    FImageIndex: Integer;
    FMemRec: TMemoryRecordEh;
    FName: String;
    FNodes: TObjectList;
//    FNodes: TInterfaceList;
    FNodesLoaded: Boolean;
    FNodesSelect: String;
    FNodesTemplate: TSQLTreeNodeTemplate;
    FObjId: String;
//    FParent: IGetSQLTreeNode;
    FParent: TSQLTreeNode;
    FTable: TMemTableEh;
    FTableFields: String;
    FTableFilter: String;
    FTypeId: String;
    FParentRecordToTableMode: Boolean;
    PopupParams: TServicePopupParams;
    constructor Create;
    destructor Destroy; override;
//    procedure AddChild(Node: IGetSQLTreeNode);
    procedure AddChild(Node: TSQLTreeNode);
    function GetTable: TMemTableEh;
    property OnDragDrop: TDragDropEvent read FOnDragDrop write FOnDragDrop;
  end;

//  TSQLTreeNodeManager = class;

  TSQLTreeNodeTemplate = class(TObject)
  private
    FName: String;
    FMasterTemplateName: String;
    FNodesMemTableName: String;
    FParams: TParamsArr;
    FNodeManager: TCustomDBService;
    FObjIdFieldName: String;
    FInTreeTextFieldName: String;
    FNodesFilter: String;
//    FNodesFieldsInGrid: String;
    FNodesSQLClassName: String;
//    FFieldAttributes: TFieldAtributesEh;
    FColumnAttributes: TColumnAttributes;
    FOnNodeDragDrop: TDragDropEvent;
    FNodeDropMenuParams: TServicePopupParams;
    FTableNodeDropMenuParams: TServicePopupParams;
    FHasNodes: Boolean;
    FSelectedIndex: Integer;
    FAdditionalLoadSQL: String;
    FColumnAttributesStr: String;
    FAdditionalFielsInfo: String;
    procedure SetColumnAttributes(const Value: String);
  public
    constructor Create(ANodeManager: TCustomDBService;
                       AName: String
{                       ANodesSQLClassName: String;
                       AMasterTemplateName: String;
                       ANodesMemTableName: String;
//                       AParams: TParamsArr;
                       AParams: array of Variant;
                       AObjIdFieldName: String;
                       AInTreeTextFieldName: String;
                       AHasNodes: Boolean;
                       ANodesFilter: String;
                       ANodesFieldsInGrid: String;
                       AColumnAttributes: String = ''; // FieldName, Caption, Width
                       AAdditionalLoadSQL: String = '';
                       AAdditionalFielsInfo: String = '' // FieldName, Type, Width
}
    );
    destructor Destroy; override;
//    function CreateNodes(Parent: TSQLTreeNode): TList; virtual;
//    function CreateNode: IGetSQLTreeNode; virtual;
    function CreateNode: TSQLTreeNode; virtual;
    function DropMenuNodeText(Sender: TObject): String;
    function DropMenuNlCommaNodeText(Sender: TObject): String;
    function DropMenuSelectAstFromName(Sender: TObject): String;
    function DropMenuSelectAllFieldsFromName(Sender: TObject): String;
    function DropDataSelectAllFieldsFromName(Sender: TObject): String;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜精品久久| 日韩一区二区不卡| 国产欧美日韩在线| 国产a精品视频| 国产精品久久久久影院亚瑟| 99精品黄色片免费大全| 国产精品电影院| 欧美亚洲一区二区在线| 日本麻豆一区二区三区视频| 欧美一区二区三区视频在线| 国产尤物一区二区| 中文字幕第一区综合| 日本高清视频一区二区| 天天综合天天做天天综合| 欧美精品一区二区在线观看| 99在线热播精品免费| 亚洲一卡二卡三卡四卡 | 亚洲视频一二三区| 色综合久久天天| 亚洲成av人片一区二区| 精品对白一区国产伦| a亚洲天堂av| 午夜视频一区在线观看| 久久久91精品国产一区二区精品 | fc2成人免费人成在线观看播放| 中文字幕在线视频一区| 91免费版pro下载短视频| 午夜影院在线观看欧美| 国产亚洲一区二区在线观看| 欧美综合久久久| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲欧美激情在线| 日韩精品一区国产麻豆| 91在线国产观看| 麻豆精品蜜桃视频网站| 亚洲视频一区二区在线| 欧美videos大乳护士334| 99久久99久久综合| 久久99国产精品久久| 亚洲精品国久久99热| 精品国产亚洲在线| 在线看不卡av| 成人精品电影在线观看| 蜜臀国产一区二区三区在线播放| 中文字幕日本乱码精品影院| 精品福利一区二区三区 | 丝袜亚洲另类欧美| 中文字幕国产一区| 日韩精品一区二区三区老鸭窝| 91在线小视频| 粉嫩在线一区二区三区视频| 蜜桃一区二区三区在线观看| 亚洲免费看黄网站| 国产精品五月天| 2024国产精品| 欧美一区二区三区四区在线观看| 一本到三区不卡视频| 国产乱人伦偷精品视频不卡| 蜜臀精品久久久久久蜜臀| 亚洲一区二区三区四区五区黄| 国产精品婷婷午夜在线观看| 欧美精品一区二区三区高清aⅴ| 欧美视频一区二区三区在线观看 | 国产精品123| 精品系列免费在线观看| 日本少妇一区二区| 日韩中文字幕区一区有砖一区| 亚洲日本免费电影| 国产精品电影一区二区三区| 中文字幕va一区二区三区| 久久久久久久久久久久久久久99| 日韩小视频在线观看专区| 欧美日韩国产小视频| 在线观看视频一区二区欧美日韩 | 欧美伊人久久久久久久久影院| www.欧美色图| 99久久精品免费观看| www.色精品| 色综合久久综合| 欧美性受xxxx黑人xyx性爽| 色婷婷av一区二区| 欧美在线观看视频一区二区| 色婷婷精品久久二区二区蜜臂av| 91黄色免费看| 欧美日韩精品是欧美日韩精品| 欧美日韩大陆一区二区| 欧美日韩高清在线播放| 777久久久精品| 日韩一区二区精品| 久久综合网色—综合色88| 欧美精品一区二区三| 国产欧美精品一区二区色综合 | 精品久久人人做人人爰| 久久久久久久综合日本| 国产欧美日韩在线| 亚洲蜜桃精久久久久久久| 亚洲一区二区三区四区在线观看| 丝袜美腿成人在线| 麻豆精品久久久| 成人黄色在线网站| 日本韩国欧美一区| 欧美一级高清片| 国产欧美一区视频| 亚洲精品第1页| 欧美a级理论片| 成人91在线观看| 欧美日韩久久不卡| 久久色在线观看| 亚洲乱码国产乱码精品精小说| 亚洲成a人v欧美综合天堂| 久久99久久精品欧美| www.av精品| 91精品一区二区三区久久久久久| 久久久精品免费免费| 亚洲精品v日韩精品| 久久99久久精品欧美| 91丝袜国产在线播放| 制服.丝袜.亚洲.中文.综合| 国产婷婷色一区二区三区在线| 亚洲裸体在线观看| 久久69国产一区二区蜜臀| 99re成人精品视频| 日韩欧美一级二级三级| 一区精品在线播放| 老司机一区二区| 一本久道中文字幕精品亚洲嫩| 日韩欧美电影一二三| 樱花影视一区二区| 国产一区二区三区免费播放| 精品视频在线免费看| 中文天堂在线一区| 免费成人你懂的| 欧美在线视频不卡| 中文字幕av资源一区| 精品一区二区三区在线观看国产| 一本大道久久a久久综合| 久久久影视传媒| 亚洲a一区二区| 色网综合在线观看| 欧美激情一区二区| 蜜臀va亚洲va欧美va天堂| 欧美亚男人的天堂| 亚洲丝袜另类动漫二区| 国产高清不卡二三区| 欧美一区二区三区四区久久| 夜夜嗨av一区二区三区四季av| 国产99一区视频免费| 欧美精品一区二区久久久| 五月天一区二区三区| 91麻豆精品在线观看| 亚洲国产精品成人综合色在线婷婷| 热久久国产精品| 欧美日韩在线亚洲一区蜜芽| 亚洲欧美日韩精品久久久久| 国产精品88888| www一区二区| 国产呦萝稀缺另类资源| 精品久久五月天| 久久99精品国产麻豆婷婷| 欧美精品123区| 香蕉久久夜色精品国产使用方法 | 91福利精品第一导航| 亚洲欧美在线另类| 99视频一区二区| 中文字幕在线一区免费| av在线不卡观看免费观看| 中文字幕av免费专区久久| 国产盗摄视频一区二区三区| 精品国产一区二区三区忘忧草| 乱一区二区av| 精品国产电影一区二区| 国产在线不卡一区| 国产午夜精品一区二区| 成人丝袜视频网| 中文字幕亚洲不卡| 日本高清成人免费播放| 亚洲第一电影网| 日韩欧美成人激情| 国产精品综合在线视频| 国产精品人成在线观看免费| 波多野结衣中文字幕一区 | 国产91富婆露脸刺激对白| 国产精品天美传媒| 91丨porny丨首页| 亚洲图片欧美一区| 制服丝袜亚洲精品中文字幕| 久久国产精品无码网站| 精品福利一区二区三区| 成人免费观看男女羞羞视频| 国产精品灌醉下药二区| 欧美视频中文字幕| 精品一区二区三区在线播放| 欧美国产成人在线| 日本韩国欧美国产| 久久成人免费日本黄色| 中文字幕av免费专区久久| 欧美视频你懂的| 国产一区在线观看视频| 亚洲欧美日韩国产另类专区| 7777精品伊人久久久大香线蕉 |