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

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

?? objectsbrowser.pas

?? 仿sql查詢分析器
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
  var
    Node: TTreeNode;
  begin
    Node := FTreeView.Items.AddChildObject(ParentNode, Title, Pointer(Data));
    Node.ImageIndex := 2;
    Node.SelectedIndex := 3;
    Node.HasChildren := True;
  end;

const
  sql = 'select id, owner = user_name(uid), name, status ' +
        'from [%s].dbo.sysobjects where type = N''U'' order by name';
var
  Rst: _Recordset;
  tabNode: TTreeNode;
  dbo, table: string;
  tabID: Integer;
begin
  ExecuteSql(Format('use [%s]', [dbName]));
  Rst := ExecuteRst(Format(sql, [dbName]));
  while not Rst.EOF do
  begin
    dbo := String(Rst.Fields.Item['owner'].Value);
    table := String(Rst.Fields.Item['name'].Value);
    tabID := Integer(Rst.Fields.Item['id'].Value);

    tabNode := FTreeView.Items.AddChild(Node, dbo + '.' + table);
    tabNode.ImageIndex := 4;
    tabNode.SelectedIndex := 4;
    tabNode.Data := Pointer(TTableNode.Create);

    AddTableItemNode(tabNode, '列', TTableItemInfo.Create(dbName, tabID, ttColumn));
    AddTableItemNode(tabNode, '索引', TTableItemInfo.Create(dbName, tabID, ttIndex));
    AddTableItemNode(tabNode, '約束', TTableItemInfo.Create(dbName, tabID, ttContraint));
    AddTableItemNode(tabNode, '相關(guān)性', TTableItemInfo.Create(dbName, tabID, ttDepend));
    AddTableItemNode(tabNode, '觸發(fā)器', TTableItemInfo.Create(dbName, tabID, ttTrigger));

    Rst.MoveNext;
  end;
  if Node.Count = 0 then Node.HasChildren := False;
end;

procedure TObjectsBrowserPanel.FillUserTypes(Node: TTreeNode;
  dbName: string);
const
  sql =
'select xtype, xusertype, type, name ' +
'from [%s].dbo.systypes where xusertype > 256 order by xtype';
var
  Rst: _Recordset;
  tNode: TTreeNode;
  typename: string;
begin
  ExecuteSql(Format('use [%s]', [dbName]));
  Rst := ExecuteRst(Format(sql, [dbName]));
  while not Rst.EOF do
  begin
    typename := Rst.Fields.Item['name'].Value;
    tNode := FTreeView.Items.AddChild(Node, typename);
    tNode.ImageIndex := 15;
    tNode.SelectedIndex := 15;

    Rst.MoveNext;
  end;

  if Node.Count = 0 then Node.HasChildren := False;
end;

procedure TObjectsBrowserPanel.FillViewColumns(Node: TTreeNode;
  Data: TObject);
const
  sql = 'select * from %s.%s.%s';

  function ADOTypeToSqlType(adotype: Word): string;
  begin
    case adotype of
      adTinyInt, adUnsignedTinyInt: Result := 'tinyint';
      adSmallInt, adUnsignedSmallInt: Result := 'smallint';
      adInteger, adUnsignedInt: Result := 'int';
      adBigInt, adUnsignedBigInt: Result := 'bigint';
      adSingle: Result := 'real';
      adDouble: Result := 'float';
      adCurrency: Result := 'money';
      adDecimal: Result := 'decimal';
      adNumeric, adVarNumeric: Result := 'numeric';
      adBoolean: Result := 'bit';
      adVariant: Result := 'sql_variant';
      adGUID: Result := 'uniqueidentifier';

      adDate, adDBDate, adDBTime,
      adDBTimeStamp, adFileTime, adDBFileTime:
          Result := 'datetime';

      adBSTR: Result := 'varchar';
      adChar: Result := 'char';
      adVarChar: Result := 'varchar';
      adLongVarChar: Result := 'text';
      adWChar: Result := 'nchar';
      adVarWChar: Result := 'nvarchar';
      adLongVarWChar: Result := 'ntext';
      adBinary: Result := 'binary';
      adVarBinary: Result := 'binary';
      adLongVarBinary: Result := 'image';
    else
      Result := 'unknown';
    end;
  end;

  function GetColumnText(f: Field): string;
  begin
    Result := GetColumnDescription(f.Name, ADOTypeToSqlType(f.Type_),
                        f.DefinedSize, f.Precision, f.NumericScale,
                        (f.Attributes and adFldIsNullable) = adFldIsNullable);
  end;

var
  info: TViewItemInfo;
  Rst: _Recordset;
  cNode: TTreeNode;
  s: string;
  I: Integer;
begin
  info := Data as TViewItemInfo;

  ExecuteSql(Format('use [%s]', [info.FDBName]));
  Rst := ExecuteRst(Format(sql, [info.FDBName, info.FOwner, info.FViewName]));
  for I := 0 to Rst.Fields.Count - 1 do
  begin
    s := GetColumnText(Rst.Fields.Item[I]);
    cNode := FTreeView.Items.AddChild(Node, s);
    cNode.ImageIndex := 5;
    cNode.SelectedIndex := 5;
  end;

  if Node.Count = 0 then Node.HasChildren := False;
end;

procedure TObjectsBrowserPanel.FillViewIndexes(Node: TTreeNode;
  Data: TObject);
const
  sql =
'select I.name, I.status ' +
'from [%s].dbo.sysindexes I ' +
'where I.id = %d and I.indid > 0 and I.indid < 255';

var
  info: TViewItemInfo;
  Rst: _Recordset;
  iNode: TTreeNode;
  idxname: string;
begin
  info := Data as TViewItemInfo;

  ExecuteSql(Format('use [%s]', [info.FDBName]));
  Rst := ExecuteRst(Format(sql, [info.FDBName, info.FViewID]));
  while not Rst.EOF do
  begin
    idxname := Rst.Fields.Item['name'].Value;
    iNode := FTreeView.Items.AddChild(Node, idxname);
    iNode.ImageIndex := 6;
    iNode.SelectedIndex := 6;
    
    Rst.MoveNext;
  end;
  if Node.Count = 0 then Node.HasChildren := False;
end;

procedure TObjectsBrowserPanel.FillViews(Node: TTreeNode; dbName: string);

  procedure AddViewItemNode(ParentNode: TTreeNode; Title: string;
                                Data: TViewItemInfo);
  var
    Node: TTreeNode;
  begin
    Node := FTreeView.Items.AddChildObject(ParentNode, Title, Pointer(Data));
    Node.ImageIndex := 2;
    Node.SelectedIndex := 3;
    Node.HasChildren := True;
  end;

const
  sql = 'select id, owner = user_name(uid), name, status, ' +
        'OBJECTPROPERTY(id, N''isschemabound'') ' +
        'from [%s].dbo.sysobjects where type = N''V'' order by name';
var
  Rst: _Recordset;
  tabNode: TTreeNode;
  dbo, view: string;
  viewID: Integer;
begin
  ExecuteSql(Format('use [%s]', [dbName]));
  Rst := ExecuteRst(Format(sql, [dbName]));
  while not Rst.EOF do
  begin
    dbo := String(Rst.Fields.Item['owner'].Value);
    view := String(Rst.Fields.Item['name'].Value);
    viewID := Rst.Fields.Item['id'].Value;
    
    tabNode := FTreeView.Items.AddChildObject(Node, dbo + '.' + view, nil);
    tabNode.ImageIndex := 11;
    tabNode.SelectedIndex := 11;

    AddViewItemNode(tabNode, '列',
      TViewItemInfo.Create(dbName, viewID, view, dbo, vtColumn));
    AddViewItemNode(tabNode, '索引',
      TViewItemInfo.Create(dbName, viewID, view, dbo, vtIndex));
    AddViewItemNode(tabNode, '相關(guān)性',
      TViewItemInfo.Create(dbName, viewID, view, dbo, vtDepend));
    AddViewItemNode(tabNode, '觸發(fā)器',
      TViewItemInfo.Create(dbName, viewID, view, dbo, vtTrigger));

    Rst.MoveNext;
  end;
  if Node.Count = 0 then Node.HasChildren := False;
end;

function TObjectsBrowserPanel.GetColumnDescription(colname, typename: string;
    size, prec, scale: Integer; nullable: Boolean): string;
var
  s: string;
begin
  if SameText(typename, 'numeric') or
    SameText(typename, 'decimal') then
  begin
    s := Format('%s(%d, %d)', [typename, prec, scale]);
  end
  else if SameText(typename, 'varchar') or
    SameText(typename, 'nvarchar') or
    SameText(typename, 'binary') or
    SameText(typename, 'varbinary') or
    SameText(typename, 'char') or
    SameText(typename, 'nchar') then
  begin
    s := Format('%s(%d)', [typename, size]);
  end
  else
    s := typename;
  Result := colname + '(' + s;
  if nullable then
    Result := Result + ', Null)'
  else
    Result := Result + ', Not Null)';  
end;

procedure TObjectsBrowserPanel.LoadResBitmap;
var
  I: Integer;
  bmp: TBitmap;
begin
  if FImageList = nil then
    FImageList := TImageList.Create(nil);
  FImageList.Clear;
  bmp := TBitmap.Create;
  try
    for I := 0 to 20 do
    begin
      bmp.LoadFromResourceName(SysInit.HInstance, 'B' + IntToStr(I));
      FImageList.AddMasked(bmp, clFuchsia);
    end;
  finally
    bmp.Free;
  end;
end;

procedure TObjectsBrowserPanel.OnSelectServer(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;
  try
    RefreshObjects;
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TObjectsBrowserPanel.OnTreeNodeChanged(Sender: TObject;
  Node: TTreeNode);
begin

end;

procedure TObjectsBrowserPanel.OnTreeNodeDeletion(Sender: TObject;
  Node: TTreeNode);
begin
  if Node.Data <> nil then
  begin
    TObject(Node.Data).Free;
    Node.Data := nil;
  end;
end;

procedure TObjectsBrowserPanel.OnTreeNodeExpanding(Sender: TObject;
  Node: TTreeNode; var AllowExpansion: Boolean);
var
  obj: TObject;
  dbinfo: TDBItemInfo;
  tabinfo: TTableItemInfo;
  vwinfo: TViewItemInfo;
  spinfo: TSPItemInfo;
  funcinfo: TFuncItemInfo;
begin
  if Node.Data = nil then Exit;
  if Node.Count > 0 then Exit;

  obj := TObject(Node.Data);
  Screen.Cursor := crHourGlass;
  try

  if obj is TDBItemInfo then
  begin
    dbinfo := TDBItemInfo(obj);
    case dbinfo.FItemType of
      dtUserTable: FillUserTables(Node, dbinfo.FDBName);
      dtSysTable: FillSysTables(Node, dbinfo.FDBName);
      dtView: FillViews(Node, dbinfo.FDBName);
      dtStoredProc: FillStoredProcs(Node, dbinfo.FDBName);
      dtFunction: FillFunctions(Node, dbinfo.FDBName);
      dtUserType: FillUserTypes(Node, dbinfo.FDBName);
    end;
  end
  else if obj is TTableItemInfo then
  begin
    tabinfo := TTableItemInfo(obj);
    case tabinfo.FItemType of
      ttColumn: FillTableColumns(Node, tabinfo);
      ttIndex: FillTableIndexes(Node, tabinfo);
      ttContraint: FillTableContraints(Node, tabinfo);
      ttDepend: FillDepends(Node, tabinfo.FDBName, tabinfo.FTableID);
      ttTrigger: FillTriggers(Node, tabinfo.FDBName, tabinfo.FTableID);
    end;
  end
  else if obj is TViewItemInfo then
  begin
    vwinfo := TViewItemInfo(obj);
    case vwinfo.FItemType of
      vtColumn: FillViewColumns(Node, vwinfo);
      vtIndex: FillViewIndexes(Node, vwinfo);
      vtDepend: FillDepends(Node, vwinfo.FDBName, vwinfo.FViewID);
      vtTrigger: FillTriggers(Node, vwinfo.FDBName, vwinfo.FViewID);
    end;
  end
  else if obj is TSPItemInfo then
  begin
    spinfo := TSPItemInfo(obj);
    case spinfo.FItemType of
      stParameter: FillSProcParams(Node, spinfo.FDBName, spinfo.FOwner, spinfo.FSPName);
      stDepend: FillDepends(Node, spinfo.FDBName, spinfo.FSPID);
    end;
  end
  else if obj is TFuncItemInfo then
  begin
    funcinfo := TFuncItemInfo(obj);
    case funcinfo.FItemType of
      ftParameter: FillSProcParams(Node, funcinfo.FDBName, funcinfo.FOwner, funcinfo.FFuncName);
      ftDepend: FillDepends(Node, funcinfo.FDBName, funcinfo.FFuncID);
    end;
  end;

  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TObjectsBrowserPanel.RefreshObjects;
var
  serv_info: TServerInfo;
  RootNode: TTreeNode;
begin
  if FComboBox.ItemIndex < 0 then Exit;

  with FComboBox do
    serv_info := TServerInfo(Items.Objects[ItemIndex]);

  if FConnection = nil then
    FConnection := CoConnection.Create;

  if (FConnection.State and adStateOpen) = adStateOpen then
    FConnection.Close;

  if serv_info.AuthType = atWindows then
    FConnection.ConnectionString := Format(ConnStr1, [serv_info.Server])
  else
    FConnection.ConnectionString := Format(ConnStr2,
        [serv_info.Password, serv_info.UserName, serv_info.Server]);
  FConnection.Open('', '', '', 0);

  FTreeView.Items.Clear;
  RootNode := FTreeView.Items.Add(nil, serv_info.DataSource);
  RootNode.ImageIndex := 0;
  RootNode.SelectedIndex := 0;

  FillDatabases(RootNode);
end;

procedure TObjectsBrowserPanel.Relayout;
begin
  if (FComboBox = nil) or (FTreeView = nil) then Exit;

  if FComboBox.Parent <> nil then FComboBox.HandleNeeded;
  FComboBox.Left := 0;
  FComboBox.Top := 0;
  FComboBox.Width := Self.Width;

  FTreeView.Left := 0;
  FTreeView.Top := FComboBox.Height + 2;
  FTreeView.Width := Self.Width;
  FTreeView.Height := Self.Height - FComboBox.Height - 2;
end;

procedure TObjectsBrowserPanel.Resize;
begin
  Relayout;
  inherited;
end;

initialization
  Variants.NullStrictConvert := False;
end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草精品视频| 亚洲综合色在线| 午夜成人在线视频| 成人一区在线观看| 678五月天丁香亚洲综合网| 国产精品久久久久久久久动漫| 亚洲成av人片一区二区梦乃 | 久久精品无码一区二区三区| 一区二区三区电影在线播| 国产精品一卡二卡| 欧美一区二区黄色| 一区二区三区四区不卡在线| 国产精品系列在线观看| 欧美一区二区成人| 亚洲一线二线三线久久久| av在线不卡免费看| 国产日韩精品视频一区| 精一区二区三区| 在线成人av网站| 亚洲精品va在线观看| 成人av影视在线观看| 久久影院视频免费| 看电视剧不卡顿的网站| 欧美精品乱码久久久久久 | 精品国产乱码久久久久久免费 | 国产欧美在线观看一区| 水野朝阳av一区二区三区| 色狠狠一区二区| 国产精品亲子伦对白| 国产一区二区伦理| 精品国产乱码久久久久久牛牛| 伦理电影国产精品| 91精品国产一区二区三区香蕉| 亚洲图片欧美综合| 欧美图片一区二区三区| 亚洲精品网站在线观看| 91麻豆免费在线观看| 综合激情网...| 菠萝蜜视频在线观看一区| 中文字幕av一区 二区| 国产福利不卡视频| 中文字幕乱码日本亚洲一区二区| 国产麻豆91精品| 国产蜜臀av在线一区二区三区| 国产精品18久久久久久久网站| 26uuu另类欧美亚洲曰本| 黑人精品欧美一区二区蜜桃| 精品99久久久久久| 国产精品99久久久久| 国产亚洲精品资源在线26u| 成人午夜视频福利| 日韩毛片视频在线看| 色哟哟一区二区| 亚洲一区在线观看免费观看电影高清| 色婷婷综合久久久中文一区二区| 一区二区视频在线看| 欧美在线观看一二区| 午夜精品久久久久久久久久 | 成人免费电影视频| 1000精品久久久久久久久| 91蜜桃免费观看视频| 一区二区三区中文字幕| 在线成人免费视频| 精品一区二区免费| 久久久91精品国产一区二区三区| 国产成a人无v码亚洲福利| 国产精品久久国产精麻豆99网站 | 精品在线一区二区三区| 日本一区二区三区在线不卡| 99亚偷拍自图区亚洲| 亚洲女同ⅹxx女同tv| 欧美日韩精品一区二区在线播放 | 亚洲成人在线网站| 4hu四虎永久在线影院成人| 久久99精品久久久久久久久久久久| 亚洲精品在线免费播放| 成人精品免费看| 亚洲男女一区二区三区| 欧美丰满嫩嫩电影| 国产福利一区在线观看| 亚洲综合一区二区三区| 日韩一区二区麻豆国产| 国内精品久久久久影院色| 国产精品久久久久久妇女6080| 日本丶国产丶欧美色综合| 美女视频一区在线观看| 国产精品全国免费观看高清 | 欧美吻胸吃奶大尺度电影 | 五月天一区二区三区| 欧美精品一区在线观看| 色综合天天做天天爱| 青椒成人免费视频| 亚洲图片你懂的| 欧美一级理论片| 99这里只有久久精品视频| 天堂av在线一区| 国产精品久久久久永久免费观看| 欧美性色综合网| 福利一区二区在线观看| 亚洲小说春色综合另类电影| 久久久久久久久久久黄色 | 欧美一区二区播放| www.激情成人| 日本特黄久久久高潮| **欧美大码日韩| 日韩精品一区二区三区在线播放 | 国产一区二区福利| 亚洲sss视频在线视频| 欧美国产一区视频在线观看| 538在线一区二区精品国产| www.欧美日韩国产在线| 精品一区二区国语对白| 一区二区三区四区中文字幕| 久久久久99精品一区| 欧美精品日韩一本| 日本久久一区二区三区| 国产mv日韩mv欧美| 免费看黄色91| 亚洲国产视频直播| 国产精品电影一区二区三区| 欧美va亚洲va国产综合| 欧美日韩精品免费| av在线一区二区| 国产精品一区免费在线观看| 视频在线观看91| 亚洲乱码国产乱码精品精小说| 久久精品人人爽人人爽| 欧美一区中文字幕| 欧美在线制服丝袜| av成人动漫在线观看| 高清久久久久久| 国产原创一区二区| 日av在线不卡| 日本中文在线一区| 亚洲自拍偷拍av| 亚洲少妇屁股交4| 日本一区二区三区久久久久久久久不 | 亚洲一区二区三区国产| 国产精品国产馆在线真实露脸 | 欧美精品一区二区三区蜜桃| 欧美日韩日日摸| 欧洲一区在线电影| 91色综合久久久久婷婷| 成人福利视频网站| 成人性生交大合| 国产1区2区3区精品美女| 国产一区视频网站| 国产又粗又猛又爽又黄91精品| 开心九九激情九九欧美日韩精美视频电影| 亚洲18女电影在线观看| 亚洲动漫第一页| 亚洲激情av在线| 一区二区三区四区在线播放| 亚洲日本护士毛茸茸| 17c精品麻豆一区二区免费| 亚洲欧洲性图库| 亚洲丝袜另类动漫二区| 亚洲欧美自拍偷拍| 亚洲精品视频一区二区| 亚洲色图在线看| 伊人婷婷欧美激情| 亚洲国产中文字幕在线视频综合| 洋洋成人永久网站入口| 亚洲伊人伊色伊影伊综合网| 一卡二卡欧美日韩| 樱桃视频在线观看一区| 亚洲精品日产精品乱码不卡| 一区二区三区四区亚洲| 夜色激情一区二区| 日韩专区欧美专区| 免费高清在线一区| 国产精品一区在线| 成人av影视在线观看| 91高清在线观看| 91精品国产综合久久精品| 精品91自产拍在线观看一区| 久久精品人人做人人爽人人| 国产精品乱人伦中文| 亚洲男人的天堂网| 视频在线观看91| 久久99久久精品| 丰满放荡岳乱妇91ww| 91麻豆蜜桃一区二区三区| 欧美美女bb生活片| 久久亚洲私人国产精品va媚药| 国产精品嫩草影院com| 一区二区三区国产精华| 香蕉久久一区二区不卡无毒影院| 免费精品视频最新在线| 国产激情一区二区三区| 一本久久a久久精品亚洲| 欧美日韩国产大片| 久久午夜国产精品| 亚洲人成7777| 视频一区欧美精品| 国产成人免费av在线| 91久久一区二区| 日韩欧美精品在线| 成人欧美一区二区三区1314 | 国产精品青草久久|