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

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

?? objectsbrowser.pas

?? 仿sql查詢分析器
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
// 對象瀏覽器控件.
//
unit ObjectsBrowser;

interface
uses Windows, Messages, Classes, SysUtils, Controls, StdCtrls, ComCtrls,
    ExtCtrls, Graphics, ImgList, Variants, ADOInt, Pub, Forms, Menus;

type
  TObjectsBrowserPanel = class(TPanel)
  private
    FComboBox: TComboBox;
    FTreeView: TTreeView;
    FConnection: _Connection;
    FImageList: TImageList;
    FMenu: TPopupMenu;
    FRefreshMenu: TMenuItem;
    FServerInfos: TList;

    procedure LoadResBitmap;
    procedure OnSelectServer(Sender: TObject);
    procedure OnTreeNodeDeletion(Sender: TObject; Node: TTreeNode);
    procedure OnTreeNodeChanged(Sender: TObject; Node: TTreeNode);
    procedure OnTreeNodeExpanding(Sender: TObject; Node: TTreeNode;
                        var AllowExpansion: Boolean);

    procedure FillDatabases(Node: TTreeNode);
    procedure FillUserTables(Node: TTreeNode; dbName: string);
    procedure FillSysTables(Node: TTreeNode; dbName: string);
    procedure FillViews(Node: TTreeNode; dbName: string);
    procedure FillUserTypes(Node: TTreeNode; dbName: string);
    procedure FillTableColumns(Node: TTreeNode; Data: TObject);
    procedure FillTableIndexes(Node: TTreeNode; Data: TObject);
    procedure FillTableContraints(Node: TTreeNode; Data: TObject);
    procedure FillDepends(Node: TTreeNode; DBName: string; ObjID: Integer);
    procedure FillTriggers(Node: TTreeNode; DBName: string; ObjID: Integer);
    procedure FillViewColumns(Node: TTreeNode; Data: TObject);
    procedure FillViewIndexes(Node: TTreeNode; Data: TObject);
    procedure FillStoredProcs(Node: TTreeNode; dbName: string);
    procedure FillFunctions(Node: TTreeNode; dbName: string);
    procedure FillSProcParams(Node: TTreeNode; dbName, dbo, spname: string);

    function ExecuteSql(const Sql: string): Integer;
    function ExecuteRst(const Sql: string): _Recordset;
    function GetColumnDescription(colname, typename: string;
        size, prec, scale: Integer; nullable: Boolean): string;

    procedure Relayout;

    procedure DoRefresh(Sender: TObject);
    procedure DoMenuPopup(Sender: TObject);
  protected
    procedure CreateWnd; override;
    procedure Resize; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    procedure RefreshObjects;
    procedure AddServer(AServer, AUserName, APwd,
                        ADataSource, ALoginName: string;
                        AuthType: TAuthType);
  end;

implementation

{$R ObjectsBrowser.RES}

type
  TServerInfo = class
    Server: string;
    UserName: string;
    Password: string;
    AuthType: TAuthType;
    DataSource: string;
  end;

  TDBItemType = (dtUnknown, dtUserTable, dtSysTable, dtView, dtStoredProc,
                  dtFunction, dtUserType);
  TTableItemType = (ttUnknown, ttColumn, ttIndex, ttContraint, ttDepend, ttTrigger);
  TViewItemType = (vtUnknown, vtColumn, vtIndex, vtDepend, vtTrigger);
  TSPItemType = (stUnknown, stParameter, stDepend);
  TFunctionItemType = (ftUnknown, ftParameter, ftDepend);

  TDBNode = class(TObject);

  TDBItemInfo = class
  public
    FDBName: string;
    FItemType: TDBItemType;
    constructor Create(ADBName: string; AType: TDBItemType);
  end;

  TTableNode = class(TObject);

  TTableItemInfo = class
  public
    FDBName: string;
    FTableID: Integer;
    FItemType: TTableItemType;
    constructor Create(ADBName: string; ATableID: Integer; AType: TTableItemType);
  end;

  TViewNode = class(TObject);

  TViewItemInfo = class
  public
    FDBName: string;
    FViewID: Integer;
    FViewName: string;
    FOwner: string;
    FItemType: TViewItemType;
    constructor Create(ADBName: string; AViewID: Integer;
                    AViewName: string; AOwner: string; AType: TViewItemType);
  end;

  TSPNode = class(TObject);
  
  TSPItemInfo = class
  public
    FDBName: string;
    FOwner: string;
    FSPName: string;
    FSPID: Integer;
    FItemType: TSPItemType;
    constructor Create(ADBName, AOwner, ASPName: string; ASPID: Integer;
                      AItemType: TSPItemType);
  end;

  TFuncNode = class(TObject);

  TFuncItemInfo = class
  public
    FDBName: string;
    FOwner: string;
    FFuncName: string;
    FFuncID: Integer;
    FItemType: TFunctionItemType;

    constructor Create(ADBName, AOwner, AFuncName: string; AFuncID: Integer;
                      AItemType: TFunctionItemType);
  end;

{ TDBItemInfo }

constructor TDBItemInfo.Create(ADBName: string; AType: TDBItemType);
begin
  FDBName := ADBName;
  FItemType := AType;
end;

{ TTableItemInfo }

constructor TTableItemInfo.Create(ADBName: string; ATableID: Integer;
                          AType: TTableItemType);
begin
  FDBName := ADBName;
  FTableID := ATableID;
  FItemType := AType;
end;

{ TViewItemInfo }

constructor TViewItemInfo.Create(ADBName: string; AViewID: Integer;
                    AViewName: string; AOwner: string; AType: TViewItemType);
begin
  FDBName := ADBName;
  FViewID := AViewID;
  FViewName := AViewName;
  FOwner := AOwner;
  FItemType := AType;
end;

{ TSPItemInfo }

constructor TSPItemInfo.Create(ADBName, AOwner, ASPName: string; ASPID: Integer;
                  AItemType: TSPItemType);
begin
  FDBName := ADBName;
  FOwner := AOwner;
  FSPName := ASPName;
  FSPID := ASPID;
  FItemType := AItemType;
end;

{ TFuncItemInfo }

constructor TFuncItemInfo.Create(ADBName, AOwner, AFuncName: string; AFuncID: Integer;
                  AItemType: TFunctionItemType);
begin
  FDBName := ADBName;
  FOwner := AOwner;
  FFuncName := AFuncName;
  FFuncID := AFuncID;
  FItemType := AItemType;
end;

const
  ConnStr1 = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;' +
             'Persist Security Info=False;Data Source=%s;Application Name=SQL查詢器-對象瀏覽器';

  ConnStr2 = 'Provider=SQLOLEDB.1;Password=%s;' +
             'Persist Security Info=True;User ID=%s;Data Source=%s;' +
             'Application Name=SQL查詢器-對象瀏覽器';

procedure LoadRes;
var
  b: TBitmap;
begin
  b := TBitmap.Create;
  try
    b.LoadFromResourceName(SysInit.HInstance, 'B0');
  finally
    b.Free;
  end;
end;

{ TObjectsBrowserPanel }

procedure TObjectsBrowserPanel.AddServer(AServer, AUserName, APwd,
  ADataSource, ALoginName: string; AuthType: TAuthType);
  
  function FindServer: Boolean;
  var
    I: Integer;
    info: TServerInfo;
  begin
    for I := 0 to FComboBox.Items.Count-1 do
    begin
      info := TServerInfo(FComboBox.Items.Objects[I]);
      if info = nil then Continue;
      if SameText(info.Server, AServer) and SameText(info.UserName, AUserName)
          and SameText(info.Password, APwd) and (info.AuthType = AuthType) then
      begin
        Result := True;
        Exit;
      end;
    end;
    Result := False;
  end;     
var
  info: TServerInfo;
begin
  if FindServer then Exit;

  info := TServerInfo.Create;
  info.Server := AServer;
  info.UserName := AUserName;
  info.Password := APwd;
  info.AuthType := AuthType;
  info.DataSource := ADataSource;

  FServerInfos.Add(Pointer(info));
  FComboBox.AddItem(ADataSource + '(' + ALoginName + ')', TObject(info));
end;

constructor TObjectsBrowserPanel.Create(AOwner: TComponent);
begin
  inherited;

  Self.BevelOuter := bvNone;
  FServerInfos := TList.Create;

  FComboBox := TComboBox.Create(nil);
  FTreeView := TTreeView.Create(nil);
  FMenu := TPopupMenu.Create(nil);
  FRefreshMenu := TMenuItem.Create(nil);
  FMenu.Items.Add(FRefreshMenu);
end;

procedure TObjectsBrowserPanel.CreateWnd;
begin
  inherited;

  FComboBox.Parent := Self;
  FComboBox.Style := csDropDownList;

  FTreeView.Parent := Self;
  FTreeView.HideSelection := False;
  FTreeView.ReadOnly := True;
  FTreeView.PopupMenu := FMenu;

  FRefreshMenu.Caption := '刷新(&R)';
  FRefreshMenu.ShortCut := ShortCut(116 {VK_F5}, []);
  FRefreshMenu.OnClick := DoRefresh;
  FMenu.OnPopup := DoMenuPopup;

  LoadResBitmap;
  FTreeView.Images := FImageList;

  FComboBox.OnSelect := OnSelectServer;
  FTreeView.OnDeletion := OnTreeNodeDeletion;
  FTreeView.OnChange := OnTreeNodeChanged;
  FTreeView.OnExpanding := OnTreeNodeExpanding;

  Resize;
end;

destructor TObjectsBrowserPanel.Destroy;
var
  I: Integer;
begin
  FComboBox.Free;
  FTreeView.Free;
  FRefreshMenu.Free;
  FMenu.Free;
  FImageList.Free;;

  for I := 0 to FServerInfos.Count-1 do
    TObject(FServerInfos[I]).Free;
  FServerInfos.Free;

  FConnection := nil;

  inherited;
end;

procedure TObjectsBrowserPanel.DoMenuPopup(Sender: TObject);
var
  pt: TPoint;
  Node: TTreeNode;
begin
  GetCursorPos(pt);
  pt := FTreeView.ScreenToClient(pt);
  Node := FTreeView.GetNodeAt(pt.X, pt.Y);
  if Node <> nil then
    Node.Selected := True;

  if Node = nil then
    Node := FTreeView.Selected;

  if Node = nil then Exit;

  FMenu.Items[0].Enabled := Node.Data <> nil;
end;

procedure TObjectsBrowserPanel.DoRefresh(Sender: TObject);
var
  Node, theNode: TTreeNode;
  obj: TObject;
  I: Integer;
begin
  Node := FTreeView.Selected;
  if Node = nil then Exit;

  obj := TObject(Node.Data);
  if obj = nil then Exit;

  if (obj is TDBNode) or (obj is TTableNode) or (obj is TViewNode)
        or (obj is TSPNode) or (obj is TFuncNode) then
  begin
    for I := 0 to Node.Count-1 do
    begin
      theNode := Node[I];
      theNode.DeleteChildren;
      theNode.HasChildren := True;
    end;
  end
  else if (obj is TDBItemInfo) or (obj is TTableItemInfo)
      or (obj is TViewItemInfo) or (obj is TSPItemInfo)
      or (obj is TFuncItemInfo) then
  begin
    Node.DeleteChildren;
    Node.HasChildren := True;
  end;
end;

function TObjectsBrowserPanel.ExecuteRst(const Sql: string): _Recordset;
var
  VarAffected: OleVariant;
begin
  Result := FConnection.Execute(Sql, VarAffected, 0);
end;

function TObjectsBrowserPanel.ExecuteSql(const Sql: string): Integer;
var
  VarAffected: OleVariant;
begin
  FConnection.Execute(Sql, VarAffected, adExecuteNoRecords);
  Result := VarAffected;
end;

procedure TObjectsBrowserPanel.FillDatabases(Node: TTreeNode);

  procedure AddItemNode(PNode: TTreeNode; s: string; data: TDBItemInfo);
  var
    itemNode: TTreeNode;
  begin
    itemNode := FTreeView.Items.AddChild(PNode, s);
    itemNode.HasChildren := True;
    itemNode.ImageIndex := 2;
    itemNode.SelectedIndex := 3;
    itemNode.Data := Pointer(data);
  end;

const
  sql = 'exec sp_MShasdbaccess';
var
  Rst: _Recordset;
  dbNode: TTreeNode;
  dbname: string;
begin
  Rst := ExecuteRst(sql);

  while not Rst.EOF do
  begin
    dbname := String(Rst.Fields['dbname'].Value);
    dbNode := FTreeView.Items.AddChild(Node, dbname);
    dbNode.ImageIndex := 1;
    dbNode.SelectedIndex := 1;
    dbNode.Data := Pointer(TDBNode.Create);
    
    AddItemNode(dbNode, '用戶表', TDBItemInfo.Create(dbname, dtUserTable));
    AddItemNode(dbNode, '系統表', TDBItemInfo.Create(dbname, dtSysTable));
    AddItemNode(dbNode, '視圖', TDBItemInfo.Create(dbname, dtView));
    AddItemNode(dbNode, '存儲過程', TDBItemInfo.Create(dbname, dtStoredProc));
    AddItemNode(dbNode, '函數', TDBItemInfo.Create(dbname, dtFunction));
    AddItemNode(dbNode, '用戶定義的數據類型', TDBItemInfo.Create(dbname, dtUserType));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品视频免费观看| 麻豆成人综合网| 麻豆精品视频在线观看| 91在线高清观看| 国产亚洲一区字幕| 热久久国产精品| 在线一区二区视频| 自拍偷拍国产精品| 不卡一区中文字幕| 久久精品欧美一区二区三区不卡| 亚洲国产欧美在线| 色素色在线综合| 国产精品久久久久久久久免费桃花| 麻豆国产精品视频| 欧美一级片免费看| 日韩激情视频在线观看| 欧美偷拍一区二区| 一区二区三区小说| 色偷偷88欧美精品久久久| 中文字幕av一区二区三区免费看| 精品亚洲成a人在线观看| 日韩视频国产视频| 日本欧美加勒比视频| 欧美精品亚洲二区| 无码av免费一区二区三区试看| 91传媒视频在线播放| 亚洲制服丝袜av| 在线日韩一区二区| 亚洲国产欧美日韩另类综合 | 久久影视一区二区| 免费成人av在线播放| 欧美一区二区人人喊爽| 奇米综合一区二区三区精品视频| 3d成人h动漫网站入口| 天堂成人国产精品一区| 51精品秘密在线观看| 五月天激情综合| 日韩区在线观看| 国产一区二区免费在线| 日本一区二区成人在线| jvid福利写真一区二区三区| 一区在线播放视频| 在线观看日韩电影| 日韩高清在线不卡| 精品久久久久久久久久久院品网| 国产综合色在线视频区| 国产精品久久影院| 欧美性大战xxxxx久久久| 青青国产91久久久久久| 久久久久久久久久电影| 色偷偷久久人人79超碰人人澡| 亚洲妇熟xx妇色黄| 精品第一国产综合精品aⅴ| 豆国产96在线|亚洲| 一区二区三区不卡在线观看| 欧美日韩一级视频| 激情欧美一区二区| 亚洲人成精品久久久久久| 欧美日韩视频在线观看一区二区三区 | 久久综合资源网| 成人深夜在线观看| 亚洲丰满少妇videoshd| 久久精品一区二区三区不卡牛牛| av成人免费在线观看| 五月天中文字幕一区二区| 久久蜜桃av一区精品变态类天堂| 91免费在线播放| 久久精品国产**网站演员| 中文字幕欧美日本乱码一线二线| 欧美艳星brazzers| 高清在线不卡av| 午夜视频在线观看一区二区三区| 久久亚洲影视婷婷| 欧美色图激情小说| 岛国精品在线观看| 免费成人在线网站| 亚洲精品免费电影| 久久精品在线免费观看| 欧美一区二区在线播放| 欧美性大战xxxxx久久久| 久草精品在线观看| 亚洲国产美国国产综合一区二区| 国产精品青草综合久久久久99| 欧美日韩一区在线观看| 波多野结衣中文字幕一区二区三区| 五月综合激情婷婷六月色窝| 最近日韩中文字幕| 国产日韩欧美激情| 欧美成人免费网站| 69堂成人精品免费视频| 欧洲视频一区二区| 99久久99精品久久久久久| 国产美女精品在线| 日本在线播放一区二区三区| 一区二区三区四区亚洲| 一区精品在线播放| 欧美高清在线一区二区| 国产欧美一区二区精品性色| 日韩一本二本av| 欧美一区二区三区小说| 欧美日韩一区二区三区在线| 色菇凉天天综合网| 92精品国产成人观看免费 | 欧美在线一区二区| 色综合久久综合网| 色综合视频在线观看| 99re视频精品| 91免费看片在线观看| 99视频一区二区| 成人激情文学综合网| www.激情成人| 99精品在线免费| 精品一区二区av| 国产乱国产乱300精品| 国产成人精品免费网站| 国产精品一区在线观看乱码| 东方aⅴ免费观看久久av| 亚洲天堂av一区| 最新成人av在线| 亚洲国产综合91精品麻豆| 亚洲主播在线播放| 日韩高清在线电影| 天堂影院一区二区| 日韩激情中文字幕| 国产一区二区免费在线| 国产麻豆一精品一av一免费| 午夜伦理一区二区| 不卡一区在线观看| 中文字幕制服丝袜成人av| 欧美日韩五月天| 欧美精品乱码久久久久久按摩| 欧美日免费三级在线| 欧美日韩国产bt| 婷婷成人综合网| 中文成人综合网| 国产精品久久久久久久久动漫| 国产精品三级在线观看| 一区二区三区成人| 日本不卡的三区四区五区| 国产乱码精品一区二区三区忘忧草 | 大白屁股一区二区视频| av成人免费在线| 欧美无人高清视频在线观看| 日韩欧美中文字幕精品| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲一区二区三区在线播放| 青青草伊人久久| 99精品在线免费| 日韩欧美精品在线视频| 自拍av一区二区三区| 免费欧美在线视频| 91香蕉视频mp4| 欧美大片一区二区| 亚洲乱码精品一二三四区日韩在线 | 亚洲激情图片qvod| 国内精品在线播放| 欧美亚洲综合在线| 国产日韩精品一区| 日韩电影免费在线看| 国产91丝袜在线播放九色| 欧美日韩亚洲另类| 欧美韩日一区二区三区| 秋霞午夜鲁丝一区二区老狼| av欧美精品.com| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲精选一二三| 丰满亚洲少妇av| 精品捆绑美女sm三区| 亚洲va欧美va国产va天堂影院| 国产sm精品调教视频网站| 884aa四虎影成人精品一区| 国产精品美女久久久久aⅴ| 极品销魂美女一区二区三区| 欧美体内she精视频| 国产精品每日更新| 国内精品写真在线观看| 91精品啪在线观看国产60岁| 一区二区三区在线观看动漫| 成人做爰69片免费看网站| 精品成人a区在线观看| 日韩国产欧美在线视频| 欧美亚洲国产一区二区三区va| 国产婷婷一区二区| 国内成人自拍视频| 精品国产乱码久久久久久夜甘婷婷| 亚洲国产精品尤物yw在线观看| 91猫先生在线| 亚洲欧美色综合| 色综合久久中文综合久久97| 18涩涩午夜精品.www| www..com久久爱| 亚洲视频小说图片| 成年人午夜久久久| 日韩一区日韩二区| 9人人澡人人爽人人精品| 国产精品妹子av| 91美女片黄在线观看91美女| 亚洲乱码中文字幕| 欧美日韩亚洲国产综合| 日韩电影在线免费观看|