⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 仿真SQL Server查询分析器
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, StdCtrls, Buttons, DB, ADODB;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    StatusBar1: TStatusBar;
    bbtnConn: TBitBtn;
    Label1: TLabel;
    EditIP: TEdit;
    Label2: TLabel;
    EditUser: TEdit;
    bbtnExit: TBitBtn;
    Panel2: TPanel;
    Label3: TLabel;
    EditPWD: TEdit;
    ADOConnGetDB: TADOConnection;
    Panel3: TPanel;
    Label5: TLabel;
    ADOQExecSQL: TADOQuery;
    Panel4: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Memo1: TMemo;
    bbtnOpen: TBitBtn;
    bbtnExecSQL: TBitBtn;
    Label4: TLabel;
    Edit1: TEdit;
    OpenDialog1: TOpenDialog;
    ADOQGetDB: TADOQuery;
    ADOConneExecSQL: TADOConnection;
    ListBox1: TListBox;
    bbtnClear: TBitBtn;
    Splitter1: TSplitter;
    procedure bbtnExitClick(Sender: TObject);
    procedure bbtnConnClick(Sender: TObject);
    procedure bbtnExecSQLClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure bbtnOpenClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure bbtnClearClick(Sender: TObject);
    procedure WriteLog(ErrStr:String);
    procedure ADOQExecSQLPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.WriteLog(ErrStr:String);
var
  LogFilename: String;
  LogFile: TextFile;
begin
  LogFilename:=ExtractFilePath(ParamStr(0)) + 'LOG_' + FormatDateTime('yyyymmdd',Now) + '.LOG';
  AssignFile(LogFile, LogFilename);
  if FileExists(LogFilename) then Append(LogFile)
  else Rewrite(LogFile);
  Writeln(Logfile,DateTimeToStr(now)+': '+ErrStr);
  CloseFile(LogFile);
end;

procedure TForm1.bbtnExitClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.bbtnConnClick(Sender: TObject);
var
  i : integer;
begin
  try
  StatusBar1.Panels[0].Text := '';

  ListBox1.Clear;
  
  if ADOConnGetDB.Connected then
    ADOConnGetDB.Connected := False;

  ADOConnGetDB.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;;'+
                                   'Password=' + Trim(EditPWD.Text) +
                                   ';User ID=' + Trim(EditUser.Text) +
                                   //';Initial Catalog=' + Form1.database3 +
                                   ';Data Source=' + Trim(EditIP.Text);

  ADOConnGetDB.Connected := True;

  with ADOQGetDB do
    begin
      Close;
      SQL.Clear;
      SQL.Text := 'select name from master..sysdatabases order by name';
      Open;
    end;
    
  for i := 1 to ADOQGetDB.RecordCount do
    begin
      ListBox1.Items.Add(ADOQGetDB.FieldByName('name').AsString);
      ADOQGetDB.Next;
    end;
  StatusBar1.Panels[0].Text := '获得数据库列表!';
  except
    StatusBar1.Panels[0].Text := '获得数据库列表 失败!';
    MessageBox(Handle,Pchar('获得数据库列表 失败!'),'提示',MB_OK);
  end;
  {
  ADOConnXNHHos.ConnectionString      := 'Provider=SQLOLEDB.1;Persist Security Info=True;;Password=' + Form1.password3 +
  ';User ID=' + Form1.user3 +
  ';Initial Catalog=' + Form1.database3 +
  ';Data Source='+Form1.server3;
   }
end;

procedure TForm1.bbtnExecSQLClick(Sender: TObject);
var
  s:string;
  sqltext : string;
  sqlfile : TextFile;
begin
  {
  if ADOConneExecSQL.Connected then
    ADOConneExecSQL.Connected := False;

  ADOConneExecSQL.Connected := True;
  }

  if (Trim(Edit1.Text) = '') or (not FileExists(Trim(Edit1.Text))) then
    begin
      MessageBox(Handle,Pchar('请选择要执行的SQL脚本!'),'提示',MB_OK);
      Exit;
    end;

  if not ADOConneExecSQL.Connected then
    begin
      MessageBox(Handle,Pchar('请选择要连接的数据库!'),'提示',MB_OK);
      Exit;
    end;
  if Edit1.Text <> '' then
  begin
    //以下代码参考网上资源
    AssignFile(sqlfile, Edit1.Text);
    FileMode := 0;
    Reset(sqlfile);
    try
      ADOConneExecSQL.BeginTrans;
      while not eof(sqlfile) do
      begin
        Readln(sqlfile, s);
        sqltext := s;
        while (not eof(sqlfile)) and
         (uppercase(trim(s))<>'GO') do
        begin
          Readln(sqlfile, s);
          if (uppercase(trim(s))<>'GO') then
            sqltext := sqltext+' '+s;
        end;
        ADOQExecSQL.Close;
        ADOQExecSQL.SQL.Clear;
        ADOQExecSQL.SQL.Add(sqltext);
        ADOQExecSQL.ExecSQL;
      end;
      CloseFile(sqlfile);
      ADOConneExecSQL.CommitTrans;
      application.MessageBox('SQL脚本完成!','提示',MB_OK+MB_ICONINFORMATION);
    except
      CloseFile(sqlfile);
      raise exception.Create('SQL脚本执行失败!');
      ADOConneExecSQL.RollbackTrans;
    end;
  end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  dbname : String;
begin
  if ListBox1.ItemIndex > -1 then
  begin
    dbname := ListBox1.Items[ListBox1.ItemIndex];
    try
    StatusBar1.Panels[0].Text := '';
    if ADOConneExecSQL.Connected then
      ADOConneExecSQL.Connected := False;

    ADOConneExecSQL.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;;'+
                                        'Password=' + Trim(EditPWD.Text) +
                                        ';User ID=' + Trim(EditUser.Text) +
                                        ';Initial Catalog=' + dbname +
                                        ';Data Source=' + Trim(EditIP.Text);
    ADOConneExecSQL.Connected := True;
    StatusBar1.Panels[0].Text := '连接数据库成功!';
    
    except
      StatusBar1.Panels[0].Text := '连接数据库 ' + dbname +' 失败!';
      MessageBox(Handle,Pchar('连接数据库 ' + dbname +' 失败!'),'提示',MB_OK);
    end
  end
end;

procedure TForm1.bbtnOpenClick(Sender: TObject);
var
  SQLFile : String;
begin
  if (OpenDialog1.Execute) and (OpenDialog1.FileName <> '') then
    begin
      SQLFile := Uppercase(OpenDialog1.FileName);

      if Copy(SQLFile,Length(SQLFile) - 4 + 1,4)  = '.SQL'then
        begin
          Edit1.Text := OpenDialog1.FileName;
          Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
        end
      else
        begin
          MessageBox(Handle,Pchar('不是 SQL 文件!'),'提示',MB_OK);
          Edit1.Clear;
          Memo1.Clear;
          Exit;
        end
    end
  else
    begin
      Edit1.Clear;
      Memo1.Clear;
    end
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Form1.Caption := '执行SQL';
  Edit1.Clear;
  Memo1.Clear;
  EditPWD.Clear;
end;

procedure TForm1.bbtnClearClick(Sender: TObject);
begin
  EditIP.Clear;
  EditUser.Clear;
  EditPWD.Clear;
  Edit1.Clear;
  Memo1.Clear;
  ListBox1.Clear;
  StatusBar1.Panels[0].Text := '';
  
  if ADOConnGetDB.Connected then
    ADOConnGetDB.Connected := False;

  if ADOConneExecSQL.Connected then
    ADOConneExecSQL.Connected := False;

end;

procedure TForm1.ADOQExecSQLPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
{var
  adoerrors:errors;
  adoerror:error;
  icount:integer;
}
begin
{  showmessage('aa');

  adoerrors := ADOConneExecSQL.Errors;
  for icount:=0 to adoerrors.count-1 do
    begin
      adoerror:=adoerrors.item[icount];

      // listbox1.Items.add('Error Number : ' + inttostr(adoerror.number));
      // listbox1.items.add('Error Source : ' + adoError.source);
      // listbox1.items.add('Error Description : '+ adoerror.description);
      // listbox1.items.add('Error HelpFile : ' + adoerror.helpfile);
      // listbox1.items.add('Error SWLState : ' + adoerror.sqlstate);
      // listbox1.Items.add('Error NativeError : '+ inttostr(adoerror.nativeError));

      WriteLog('Error Number : ' + inttostr(adoerror.number));
    end;
}
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -