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

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

?? sqlqry.pas

?? 仿sql查詢分析器
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
  FParseOnly := False;
end;

procedure TSqlQryFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

function TSqlQryFrm.GetDatabaseList: TStringList;
const
  sel_db_sql = 'exec master.dbo.sp_MShasdbaccess';
var
  Rst: _Recordset;
begin
  Result := nil;
  ExecuteSql('set showplan_text off');
  ExecuteSql('set showplan_all off');
  ExecuteSql('SET NOEXEC OFF SET PARSEONLY OFF SET ROWCOUNT 0');
  Rst := ExecuteRst(sel_db_sql);
  if Rst <> nil then
  begin
    Result := TStringList.Create;
    while not Rst.EOF do
    begin
      Result.Add(Rst.Fields['dbname'].Value);
      Rst.MoveNext;
    end;
  end;
end;

procedure TSqlQryFrm.OnGridResize(Sender: TObject);
var
  H, I: Integer;
  Ctrl: TControl;
begin
  if PnlResult.ControlCount = 2 then Exit;

  H := 0;

  for I := PnlResult.ControlCount - 1 downto 0 do
  begin
    Ctrl := PnlResult.Controls[I];
    Inc(H, Ctrl.Height);
  end;

  PnlResult.Height := H + 1000;
  SbxResult.VertScrollBar.Range := H + 20;
  SbxResult.VertScrollBar.Visible := SbxResult.ClientHeight < (H + 20);
end;

function TSqlQryFrm.ExecuteSql(const ASql: WideString): Integer;
var
  Affected: OleVariant;
  hr: HResult;
  Rst: _Recordset;
begin
  hr := (FConnection as ConnectionStd).Execute(ASql, Affected, adExecuteNoRecords, Rst);
  if hr < 0 then
    ProcessResults;
  Result := Affected;
end;

function TSqlQryFrm.ExecuteRst(const ASql: WideString): _Recordset;
var
  Affected: OleVariant;
  hr: HResult;
begin
  hr := (FConnection as ConnectionStd).Execute(ASql, Affected, -1, Result);
  if hr < 0 then
    ProcessResults;
end;

procedure TSqlQryFrm.Initialize(Conn: _Connection);
var
  Rst: _Recordset;
begin
  FConnection := Conn;
  FDatabase := FConnection.DefaultDatabase;

  Rst := ExecuteRst('select convert(sysname, serverproperty(N''servername''))');
  if not VarIsNull(Rst.Fields[0].Value) then
    FServerName := Rst.Fields[0].Value;

  Rst := ExecuteRst('SELECT ISNULL(SUSER_SNAME(), SUSER_NAME())');
  if not VarIsNull(Rst.Fields[0].Value) then
    FSUserName := Rst.Fields[0].Value;

  FFileName := Format('無標題%d', [NewFileCount]);
  UpdateTitle;

  Inc(NewFileCount);

  FPnlRate := 0.5;
  PnlMainResize(PnlMain);

  Visible := True;
end;

procedure TSqlQryFrm.PnlMainResize(Sender: TObject);
begin
  if FPnlRate = 0 then FPnlRate := 0.5;

  Pgc1.Height := Round(PnlMain.Height * FPnlRate);
end;

procedure TSqlQryFrm.Splitter1Moved(Sender: TObject);
begin
  FPnlRate := Pgc1.Height / PnlMain.Height;
end;

procedure TSqlQryFrm.FormActivate(Sender: TObject);
begin
  PostMessage(Application.MainForm.Handle, WM_QRYFRMACTIVATE, 0, 0);
end;

function TSqlQryFrm.GetConnectionString: string;
begin
  if FConnection <> nil then
    Result := FConnection.ConnectionString
  else
    Result := '';
end;

procedure TSqlQryFrm.SetDatabase(const Value: string);
begin
  try
    ExecuteSql('set showplan_text off');
    ExecuteSql('set showplan_all off');
    ExecuteSql('SET NOEXEC OFF SET PARSEONLY OFF SET ROWCOUNT 0');
    ExecuteSql(Format('use [%s]', [Value]));
  except
    Application.HandleException(Self);
    Exit;
  end;

  FDatabase := Value;
  UpdateTitle;
end;

procedure TSqlQryFrm.ProcessResults;
var
  err_type: Integer;
  Msg: string;
begin
  err_type := ProcessResult(Msg);
  if Msg <> '' then AddMsg(Msg);
  FConnClosed := err_type = 3;
  if err_type <> 0 then Abort;
end;

procedure TSqlQryFrm.AddMsg(Msg: string);
begin
  MoMsg.Lines.Add(Msg);
end;

procedure TSqlQryFrm.AddMsgs(MsgList: TStringList);
begin
  MoMsg.Lines.Assign(MsgList);
end;

procedure TSqlQryFrm.AddRecordsets(DataList: TList);
var
  Grd: TDataGrid;
  Split: TSplitter;
  I: Integer;
begin
  for I := 0 to DataList.Count-1 do
  begin
    Grd := TDataGrid.Create(Self);
    Grd.Height := 120;
    Grd.Top := 65535;
    Grd.Align := alTop;
    Grd.Parent := PnlResult;
    Grd.Flat := True;
    Grd.PopupMenu := GridMenu;
    Grd.SetData(TRowDataList(DataList[I]));
    Grd.OnResize := OnGridResize;

    Split := TSplitter.Create(Self);
    Split.Parent := PnlResult;
    Split.Align := alTop;
    Split.Height := 2;
    Split.MinSize := 10;
    Split.AutoSnap := False;
  end;
end;

procedure TSqlQryFrm.ClearVarRef;
begin
  FExecThread := nil;
end;

procedure TSqlQryFrm.OnThreadTerminate(Sender: TObject);
var
  I: Integer;
  Thread: TExecuteThread;
begin
  FExecuting := False;
  Thread := TExecuteThread(Sender);

  FConnClosed := Thread.FConnClosed;
  UpdateTitle;
  UpdateDatabase;

  AddMsgs(Thread.FMsgList);
  AddRecordsets(Thread.FDataList);

  if MoMsg.Lines.Count = 0 then MoMsg.Lines.Add('命令執行成功.');

  for I := 0 to Thread.FTimeCost.Count - 1 do
  begin
    if I = 0 then MoMsg.Lines.Add(#13#10'耗時: ');
    MoMsg.Lines.Add(' ' + IntToStr(Integer(Thread.FTimeCost[I])));
  end;

  if Thread.FHasErrors then
    SBar.SimpleText := '批查詢已完成, 但有錯誤.'
  else if Thread.FCanceled then
    SBar.SimpleText := '批查詢已取消.'
  else
    SBar.SimpleText := '批查詢已完成.';

  OnGridResize(nil);
  if PnlResult.ControlCount = 0 then
    Pgc1.ActivePageIndex := 1
  else
  begin
    if TExecuteThread(Sender).FHasErrors then
      Pgc1.ActivePageIndex := 1
    else
      Pgc1.ActivePageIndex := 0;

    if PnlResult.ControlCount = 2 then
    begin
      PnlResult.Align := alClient;

      for I := 0 to PnlResult.ControlCount-1 do
        if PnlResult.Controls[I] is TDataGrid then
          PnlResult.Controls[I].Align := alClient
        else
          PnlResult.Controls[I].Visible := False;
    end;
  end;
end;

procedure TSqlQryFrm.UpdateTitle;
begin
  Self.Caption := Format('查詢 -- %s.%s.%s -- %s',
          [FServerName, FDatabase, FSUserName, FFileName]);
end;

procedure TSqlQryFrm.UpdateDatabase;
begin
  if IsConnectionActive(FConnection) then
  begin
    Self.FDatabase := FConnection.DefaultDatabase;
    PostMessage(Application.MainForm.Handle, WM_DATABASECHANGED, 0, 0);
  end;
end;

procedure TSqlQryFrm.FormDestroy(Sender: TObject);
begin
  PostMessage(Application.MainForm.Handle, WM_QRYFRMCLOSE, 0, 0);
end;

procedure TSqlQryFrm.LoadFile;
begin
  if OpenDialog1.Execute then
  begin
    MoSql.Lines.LoadFromFile(OpenDialog1.FileName);
    FFileName := OpenDialog1.FileName;
    UpdateTitle;
  end;
end;

function TSqlQryFrm.SaveFile: Boolean;
begin
  if FileExists(FFileName) then
  begin
    if MoSql.Modified then
      MoSql.Lines.SaveToFile(FFileName);
    Result := True;
  end
  else
    Result := SaveAs;
end;

function TSqlQryFrm.SaveAs: Boolean;
begin
  Result := SaveDialog1.Execute;
  if Result then
  begin
    MoSql.Lines.SaveToFile(SaveDialog1.FileName);
    FFileName := SaveDialog1.FileName;
    UpdateTitle;
  end;
end;

procedure TSqlQryFrm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
var
  Msg: string;
  trans: Integer;
  Rst: _Recordset;
begin
  // 檢查是否正在運行.
  if Self.Executing then
  begin
    Msg := '是否要取消此次查詢?';
    case Application.MessageBox(PChar(Msg), PChar(Application.Title),
              MB_YESNOCANCEL or MB_ICONWARNING) of
      ID_YES:
        begin
          if Self.Executing then
          begin
            Self.CancelExecute;                          
            repeat
              CheckSynchronize; // 因為我們用了TThread.Synchronize
              Sleep(50);
            until not Self.Executing or Application.Terminated;
          end;
        end;
    else
      CanClose := False;
    end;
  end;

  // 檢查是否有未完成的事務.
  try
    Rst := ExecuteRst('select @@trancount');
    trans := Rst.Fields[0].Value;
    if trans > 0 then
    begin
      Msg := '有未提交的事務。'#13#10#13#10'是否希望在關閉窗口之前提交這些事務?';
      case Application.MessageBox(PChar(Msg), PChar(Application.Title),
                MB_YESNOCANCEL or MB_ICONWARNING) of
        ID_YES:
          begin
            try ExecuteSql('commit tran'); except end;
          end;
        ID_NO:
          try  ExecuteSql('rollback tran'); except end;
        ID_CANCEL:
          begin
            CanClose := False;
            Exit;
          end;
      end;
    end;
  except
    
  end;

  // 檢查是否需要保存文件.
  if MoSql.Modified then
  begin
    Msg := Format('%s 中的文本已經修改'#13#10#13#10'是否保存更改?', [Self.FFileName]);
    case Application.MessageBox(PChar(Msg), PChar(Application.Title),
              MB_YESNOCANCEL or MB_ICONWARNING) of
      ID_YES:
        try
          CanClose := SaveFile;
        except
          Application.HandleException(Self);
          CanClose := False;
        end;
      ID_CANCEL:
        CanClose := False;
    end;
  end;
end;

function TSqlQryFrm.GetResultBoxVisible: Boolean;
begin
  Result := Pgc1.Visible;
end;

procedure TSqlQryFrm.ToggleResultBox;
begin
  if Pgc1.Visible then
  begin
    Pgc1.Visible := False;
    Splitter1.Visible := False;
  end
  else
  begin
    Pgc1.Visible := True;
    Splitter1.Visible := True;
  end;
end;

procedure TSqlQryFrm.MnCopyGridTextClick(Sender: TObject);
var
  Grid: TDataGrid;
begin
  if Self.ActiveControl is TDataGrid then
  begin
    Grid := TDataGrid(Self.ActiveControl);
    Clipboard.AsText := Grid.SelectionText;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美人动与zoxxxx乱| 亚洲国产aⅴ成人精品无吗| 精品一区二区三区免费毛片爱| 欧美日韩精品专区| 午夜精品福利在线| 日韩精品专区在线影院重磅| 极品瑜伽女神91| 国产片一区二区| 91在线视频在线| 亚洲国产wwwccc36天堂| 欧美一区二区三区不卡| 国产一区二区三区日韩| 国产精品乱码一区二区三区软件| 99久久精品免费| 同产精品九九九| 久久嫩草精品久久久精品| 99久久久精品| 日本欧美韩国一区三区| 久久久久国产免费免费 | 在线播放日韩导航| 经典三级在线一区| 亚洲视频1区2区| 91精品黄色片免费大全| 韩日av一区二区| 一区二区在线免费| 69av一区二区三区| 床上的激情91.| 午夜激情一区二区三区| 久久久亚洲欧洲日产国码αv| 成人黄色电影在线| 色哟哟在线观看一区二区三区| 国产激情精品久久久第一区二区| 亚洲情趣在线观看| 色老汉av一区二区三区| 日韩电影一区二区三区四区| 久久精品一区二区三区四区| 欧美色电影在线| 国产大陆亚洲精品国产| 亚洲二区在线观看| 26uuu精品一区二区在线观看| 91欧美一区二区| 激情图区综合网| 亚洲午夜一二三区视频| 国产午夜亚洲精品午夜鲁丝片| 欧美三片在线视频观看| 成人av综合一区| 激情五月播播久久久精品| 亚洲欧美精品午睡沙发| 久久综合色播五月| 3d动漫精品啪啪| 色狠狠一区二区| 成人精品视频网站| 韩国欧美一区二区| 三级欧美韩日大片在线看| 欧美国产精品一区| 精品少妇一区二区| 欧美欧美欧美欧美| 91麻豆成人久久精品二区三区| 国产精品自拍毛片| 看片网站欧美日韩| 日本视频中文字幕一区二区三区| 最新久久zyz资源站| 精品少妇一区二区三区在线视频| 欧美日韩国产影片| 欧美亚洲国产一区二区三区| 99re视频精品| 99久久国产免费看| 成人v精品蜜桃久久一区| 国产精品538一区二区在线| 蜜桃91丨九色丨蝌蚪91桃色| 日韩黄色免费电影| 日产国产欧美视频一区精品| 亚洲第一久久影院| 亚洲风情在线资源站| 亚洲成av人综合在线观看| 亚洲狠狠爱一区二区三区| 亚洲一区二区偷拍精品| 一区二区三区四区乱视频| 亚洲欧美日韩在线不卡| 中文字幕亚洲在| 国产精品电影一区二区| 欧美激情艳妇裸体舞| 国产偷国产偷精品高清尤物| 久久精品人人爽人人爽| 欧美激情一区二区| 中文字幕一区二区日韩精品绯色| 亚洲人成人一区二区在线观看| 亚洲欧美怡红院| 亚洲综合在线免费观看| 午夜精品123| 极品美女销魂一区二区三区免费| 国产精品99久久久久久有的能看 | 亚洲欧美电影一区二区| 国产精品久久久久久户外露出| 日韩毛片高清在线播放| 一区二区三区日韩欧美| 午夜久久久久久久久| 美女脱光内衣内裤视频久久影院| 国产在线不卡一卡二卡三卡四卡| 成人网在线免费视频| 一本色道亚洲精品aⅴ| 欧美午夜精品理论片a级按摩| 日韩三级在线观看| 中文在线免费一区三区高中清不卡| 国产精品萝li| 日韩一区精品视频| 国产一区 二区 三区一级| 成人av在线电影| 欧美乱妇20p| 久久久久久一二三区| 亚洲区小说区图片区qvod| 日韩高清电影一区| 丁香婷婷综合五月| 欧美日韩一区二区三区在线| 精品久久久久久久久久久久包黑料 | 26uuu精品一区二区在线观看| 国产精品亲子伦对白| 亚洲成人综合视频| 风间由美中文字幕在线看视频国产欧美 | 成人国产亚洲欧美成人综合网| 欧美在线综合视频| 精品日韩av一区二区| 亚洲精品美国一| 精品制服美女丁香| 91成人免费在线| 久久这里只有精品首页| 一区二区三区四区国产精品| 精品一区二区成人精品| 色婷婷综合激情| 久久精品在线观看| 日本欧美一区二区在线观看| 成人精品电影在线观看| 91精品国产综合久久精品麻豆| 国产视频一区在线观看| 婷婷久久综合九色国产成人| 成人动漫在线一区| 久久综合九色综合欧美亚洲| 午夜视频久久久久久| av中文一区二区三区| 精品成人一区二区| 日韩高清电影一区| 欧美日韩在线三区| 一区在线观看视频| 国产盗摄精品一区二区三区在线| 91麻豆精品国产| 亚洲一区二区av电影| 丁香激情综合国产| 久久久久亚洲蜜桃| 久久99精品久久久久久动态图| 欧美三级电影一区| 亚洲自拍另类综合| 97久久精品人人澡人人爽| 国产日韩欧美精品一区| 国内外成人在线| 精品第一国产综合精品aⅴ| 首页欧美精品中文字幕| 欧美性猛交一区二区三区精品| 中文字幕在线播放不卡一区| 国产精品正在播放| 久久网站热最新地址| 美女精品自拍一二三四| 3d成人h动漫网站入口| 婷婷开心久久网| 欧美久久免费观看| 日韩精品欧美成人高清一区二区| 在线观看免费成人| 亚洲午夜在线电影| 欧美三级三级三级| 亚洲国产另类av| 欧美性猛交xxxx黑人交| 亚洲aⅴ怡春院| 9191成人精品久久| 麻豆久久一区二区| 欧美精品一区二区三区在线播放| 久久精品国产精品青草| 精品国产乱码久久久久久浪潮 | 国产精品免费网站在线观看| 国产精品一区二区在线看| 国产日韩精品一区二区三区在线| 国产在线麻豆精品观看| 国产欧美日韩久久| 99久久精品免费观看| 亚洲综合男人的天堂| 欧美日韩高清不卡| 免费成人在线观看| 国产丝袜欧美中文另类| 99久久久久免费精品国产| 亚洲午夜三级在线| 欧美一卡2卡3卡4卡| 国产一区久久久| 国产精品国产自产拍高清av| 91麻豆国产在线观看| 午夜精品久久久| 久久久精品国产免大香伊 | 欧美三级韩国三级日本三斤| 婷婷综合另类小说色区| 欧美精品一区二区在线播放 | 国产v综合v亚洲欧| 亚洲免费观看高清完整版在线| 欧美日韩视频在线观看一区二区三区|