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

📄 dbconnselect.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 4 页
字号:
      begin
        if(DBConnTV.Selected.SubItems[0]='HOST')then
        begin
          DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to the %s Host', 133, DBConnTV.Selected.SubItems[1]);

          if(CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], DBConnTV.Selected.SubItems[1])<>0)then
            continue;
        end
        else if(DBConnTV.Selected.SubItems[0]='DB')then
        begin
          if(DBConnTV.Selected.SubItems[1]='MySQL')then
          begin
            DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to the %s MySQL Host', 134, DBConnTV.Selected.Parent.SubItems[1]);

            if(CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], DBConnTV.Selected.Parent.SubItems[1])<>0)then
              continue;
          end
          else if(DBConnTV.Selected.SubItems[1]='Oracle')then
          begin
            DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to Oracle', 129);

            if(CompareText(TDBConn(DBConns[i]).DriverName, 'Oracle')<>0)then
              continue;
          end
          else if(DBConnTV.Selected.SubItems[1]='ODBC')then
          begin
            DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to ODBC Databases', 130);

            if(CompareText(TDBConn(DBConns[i]).DriverName, 'OpenODBC')<>0)then
              continue;
          end
          else if(DBConnTV.Selected.SubItems[1]='SQLite')then
          begin
            DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to ODBC Databases', 239);

            if(CompareText(TDBConn(DBConns[i]).DriverName, 'SQLite')<>0)then
              continue;
          end
          else if(DBConnTV.Selected.SubItems[1]='MSSQL')then
          begin
            DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to MSSQL Databases', 240);

            if(CompareText(TDBConn(DBConns[i]).DriverName, 'MSSQL')<>0)then
              continue;
          end
          else
          begin
            DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to %s', 135, DBConnTV.Selected.SubItems[1]);

            if(CompareText(TDBConn(DBConns[i]).DriverName, DBConnTV.Selected.SubItems[1])<>0)then
              continue;
          end;
        end
        else
          continue;
      end
      else
        continue;
    end
    else
      DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Database Connections', 136);

    theNode:=ConnectionsListView.Items.Add;
    theNode.Caption:=TDBConn(DBConns[i]).Name;
    theNode.ImageIndex:=5;
    theNode.Data:=DBConns[i];
    theNode.SubItems.Add(TDBConn(DBConns[i]).DriverName);
    theNode.SubItems.Add(TDBConn(DBConns[i]).Params.Values['HostName']);
    theNode.SubItems.Add(TDBConn(DBConns[i]).Params.Values['Database']);
    theNode.SubItems.Add(TDBConn(DBConns[i]).Description);
    theNode.SubItems.Add('');
    theNode.SubItemImages[4]:=9;
  end;

  //Try to select prev. selected item
  if(PrevSelName<>'')then
  begin
    for i:=0 to ConnectionsListView.Items.Count-1 do
      if(ConnectionsListView.Items[i].Caption=PrevSelName)then
      begin
        ConnectionsListView.Selected:=ConnectionsListView.Items[i];
        break;
      end;
  end;
end;

procedure TDBConnSelectForm.ConnectionsListViewDragOver(Sender,
  Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:=False;

  if(Source<>nil)then
    if(Source.ClassNameIs('TTreeView'))then
      if(TTreeView(Source).Name='DBConnTV')then
        if(DBConnTV.Selected.SubItems.Count>0)then
          if(DBConnTV.Selected.SubItems[0]='DB')then
          Accept:=True;
end;

procedure TDBConnSelectForm.ConnectionsListViewDragDrop(Sender,
  Source: TObject; X, Y: Integer);
var theDBConn: TDBConn;
  i, j: integer;
  s: string;
begin
  if(Source.ClassNameIs('TTreeView'))then
    if(TTreeView(Source).Name='DBConnTV')then
      if(DBConnTV.Selected<>nil)then
        if(DBConnTV.Selected.SubItems.Count>0)then
          if(DBConnTV.Selected.SubItems[0]='DB')then
          begin
            //Create a new DBConn of the given DatabaseType
            s:=DBConnTV.Selected.Text;

            //Check if there are two connections with the same name
            j:=0;
            while(j=0)do
            begin
              j:=1;
              for i:=0 to DMDB.DBConnections.Count-1 do
                if(TDBConn(DMDB.DBConnections[i]).Name=s)and(DMDB.DBConnections[i]<>SelDBConn)then
                begin
                  try
                    s:=LeftStr(s, Length(s)-1)+IntToStr(StrToInt(RightStr(s, 1))+1)
                  except
                    s:=s+'_2';
                  end;

                  j:=0;
                  break;
                end;
            end;
            //End Check

            theDBConn:=DMDB.GetNewDBConn(s, True, DBConnTV.Selected.SubItems[1]);
            if(CompareText(DBConnTV.Selected.SubItems[1], 'MySQL')=0)then
            begin
              theDBConn.Params.Values['HostCaption']:=DBConnTV.Selected.Parent.Text;
              theDBConn.Params.Values['HostName']:=DBConnTV.Selected.Parent.SubItems[1];
              theDBConn.Params.Values['User_Name']:=DBConnTV.Selected.Parent.SubItems[2];
              theDBConn.Params.Values['Database']:=DBConnTV.Selected.Text;
            end;
            RefreshDBConnList;

            //Select new created DBConn
            for i:=0 to ConnectionsListView.Items.Count-1 do
             if(ConnectionsListView.Items[i].Data=theDBConn)then
                ConnectionsListView.Selected:=ConnectionsListView.Items[i];

            ConnectionsListViewSelectItem(self,
              ConnectionsListView.Selected, True);
          end;
end;

procedure TDBConnSelectForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose:=True;

  if(Not(ModalResultIsOK))then
    ModalResult:=mrCancel;
end;

procedure TDBConnSelectForm.HSplitterMoved(Sender: TObject);
begin
  DBConnLbl.Left:=LeftPnl.Width+DBConnTV.Width+HSplitter.Width;
end;

procedure TDBConnSelectForm.ConnectionsListViewClick(Sender: TObject);
var x1, x2, i: integer;
  theData: Pointer;
  theListItem: TListItem;
begin
  x2:=0;
  for i:=0 to 4 do
    x2:=x2+ConnectionsListView.Columns[i].Width;

  //paramaters
  x1:=x2;
  x2:=x2+ConnectionsListView.Columns[5].Width;

  //BUG in DELPHI 7
  theListItem:=ConnectionsListView.GetItemAt(10, my);
  if(theListItem<>nil)then
    ConnectionsListView.Selected:=theListItem;

  if(mx>x1)and(mx<x2)and(ConnectionsListView.Selected<>nil)then
  begin
    DBConnEditorForm:=TDBConnEditorForm.Create(self);
    try
      theData:=ConnectionsListView.Selected.Data;

      DBConnEditorForm.SetData(SelDBConn, DBHosts);
      DBConnEditorForm.ShowModal;

      RefreshDBConnList;
      for i:=0 to ConnectionsListView.Items.Count-1 do
       if(ConnectionsListView.Items[i].Data=theData)then
         ConnectionsListView.Selected:=ConnectionsListView.Items[i];
    finally
      DBConnEditorForm.Free;
    end;
  end;
end;

procedure TDBConnSelectForm.NewConnBtnClick(Sender: TObject);
var db, dbtype, host, user: string;
  i: integer;
begin
  DBConnEditorForm:=TDBConnEditorForm.Create(self);
  try
    db:='';
    dbtype:='MySQL';
    host:='';
    user:='';

    if(DBConnTV.Selected<>nil)then
      if(DBConnTV.Selected.SubItems.Count>0)then
        if(DBConnTV.Selected.SubItems[0]='DB')then
        begin
          db:=DBConnTV.Selected.Text;
          dbtype:=DBConnTV.Selected.SubItems[1];

          if(CompareText(DBConnTV.Selected.SubItems[1], 'MySQL')=0)then
          begin
            host:=DBConnTV.Selected.Parent.Text;
            user:=DBConnTV.Selected.Parent.SubItems[2];
          end;
        end;

    if(DBConnTV.Selected<>nil)then
      if(DBConnTV.Selected.SubItems.Count>0)then
        if(DBConnTV.Selected.SubItems[0]='HOST')then
        begin
          host:=DBConnTV.Selected.Text;
          user:=DBConnTV.Selected.SubItems[2];
        end;

    if(DBConnTV.Selected<>nil)then
      if(DBConnTV.Selected.SelectedIndex=1)then
        if(DBConnTV.Selected.Text<>DMMain.GetTranslatedMessage('All Connections', 107))then
        begin
          dbtype:=DBConnTV.Selected.Text;
        end;

    DBConnEditorForm.SetData(nil, DBHosts, dbtype, host, db, user);
    if(DBConnEditorForm.ShowModal=mrOK)then
    begin
      RefreshDBConnList;
      for i:=0 to ConnectionsListView.Items.Count-1 do
        if(CompareText(ConnectionsListView.Items[i].Caption, DBConnEditorForm.DBConn2Change.Name)=0)then
        begin
          ConnectionsListView.Selected:=ConnectionsListView.Items[i];
          ConnectionsListViewSelectItem(self, ConnectionsListView.Items[i], True);
          break;
        end;
    end;

  finally
    DBConnEditorForm.Free;
  end;
end;

procedure TDBConnSelectForm.DropDatabaseMIShow(Sender: TObject);
begin
  TMenuItem(Sender).Enabled:=False;

  if(DBConnTV.Selected<>nil)then
    if(DBConnTV.Selected<>Localhost)then
      if(DBConnTV.Selected.SubItems.Count>0)then
        if(DBConnTV.Selected.SubItems[0]='DB')then
          if(DBConnTV.Selected.SubItems[1]='MySQL')then
            TMenuItem(Sender).Enabled:=True;
end;

procedure TDBConnSelectForm.DropDatabaseMIClick(Sender: TObject);
var InfoDBConn: TDBConn;
begin
  if(DBConnTV.Selected<>nil)then
    if(DBConnTV.Selected<>Localhost)then
      if(DBConnTV.Selected.SubItems.Count>0)then
        if(DBConnTV.Selected.SubItems[0]='DB')then
        begin
          if(CompareText(DBConnTV.Selected.Text, 'mysql')=0)then
          begin
            MessageDlg(DMMain.GetTranslatedMessage('You cannot delete the MySQL Database', 137),
              mtError, [mbOK], 0);

            Exit;
          end;

          if(MessageDlg(DMMain.GetTranslatedMessage('Do you want to drop the selected database %s'+
            #13#10#13#10+
            'All data will be lost!', 138, DBConnTV.Selected.Text), mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
          begin
            if(MessageDlg(DMMain.GetTranslatedMessage('Do you REALLY want to drop the selected database %s'+
              #13#10#13#10+
              'The Database cannot be restored!', 139, DBConnTV.Selected.Text), mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
            begin
              InfoDBConn:=DMDB.GetNewDBConn('InfoDBConn', False, 'MySQL');
              try
                InfoDBConn.Params.Values['HostName']:=DBConnTV.Selected.Parent.SubItems[1];
                InfoDBConn.Params.Values['Database']:='mysql';
                InfoDBConn.Params.Values['User_Name']:=DBConnTV.Selected.Parent.SubItems[2];
                InfoDBConn.Params.Values['Password']:=DBConnTV.Selected.Parent.SubItems[3];

                try
                  DMDB.ConnectToDB(InfoDBConn);
                except
                  on x: Exception do
                  begin
                    MessageDlg(DMMain.GetTranslatedMessage('Connection to database failed.'+#13#10#13#10+'%s',
                      121, x.Message), mtError, [mbOK], 0);
                    Abort;
                  end;
                end;

                try
                  DMDB.SQLConn.ExecuteDirect('DROP DATABASE '+DBConnTV.Selected.Text);
                except
                  on x: Exception do
                  begin
                    MessageDlg('Database could not be dropped.'+#13#10#13#10+
                      x.Message, mtError, [mbOK], 0);
                    Abort;
                  end;
                end;

                DMDB.DisconnectFromDB;

                DBConnTV.Items.Delete(DBConnTV.Selected);
              finally
                InfoDBConn.Free;
              end;
            end;
          end;
        end;
end;

procedure TDBConnSelectForm.AddConnection1Click(Sender: TObject);
begin
  NewConnBtnClick(self);
end;

procedure TDBConnSelectForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if(Key=Key_F1)then
    DMMain.ShowHelp('db', 'dbconn');
end;

procedure TDBConnSelectForm.DelConSBtnClick(Sender: TObject);
begin
  DelConnBtnClick(self);
end;

end.

⌨️ 快捷键说明

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