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

📄 dbconnselect.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 4 页
字号:

            DMDB.SchemaSQLQuery.ParamCheck:=False;
            DMDB.SchemaSQLQuery.SetSchemaInfo(stNoSchema, '', '');
            DMDB.SchemaSQLQuery.SQL.Text:='show databases';
            DMDB.SchemaSQLQuery.Open;
            while(Not(DMDB.SchemaSQLQuery.EOF))do
            begin
              theChildTreeNode:=DBConnTV.Items.AddChild(node, DMDB.SchemaSQLQuery.Fields[0].AsString);
              theChildTreeNode.ImageIndex:=7;
              theChildTreeNode.SelectedIndex:=7;
              theChildTreeNode.SubItems.Add('DB');
              theChildTreeNode.SubItems.Add('MySQL');

              DMDB.SchemaSQLQuery.Next;
            end;
            DMDB.SchemaSQLQuery.Close;

            theChildTreeNode:=DBConnTV.Items.AddChild(node, '...');
            theChildTreeNode.ImageIndex:=7;
            theChildTreeNode.SelectedIndex:=7;

            DMDB.DisconnectFromDB;

            AllowExpansion:=True;

            DBConnTV.Selected:=node;
            RefreshDBConnList;

            break;
          end;
        finally
          DBConnLoginForm.Free;
        end;

        DBConnTV.SetFocus;
      finally
        InfoDBConn.Free;
      end;
    end;
  end
  else {if(node.Level=0)then}
    AllowExpansion:=True;
end;

procedure TDBConnSelectForm.DBConnTVItemClick(Sender: TObject;
  Button: TMouseButton; Node: TTreeNode; const Pt: TPoint);
var hostcaption, dbname, ip: string;
  theTreeNode, theChildTreeNode: TTreeNode;
  InfoDBConn: TDBConn;
  i: integer;
  theDBHost: TDBHost;
begin
  RefreshDBConnList;

  if(Node.Level>0)then
  begin
    if(Node.Parent.Text='Network Hosts')and(Node.Text='...')then
    begin
      hostcaption:='';
      if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Add new Host', 117),
        DMMain.GetTranslatedMessage('Hostname/IP:', 118), hostcaption))then
      begin
        if(hostcaption<>'')then
        begin
          //When / in hostname, extract ip
          if(Pos('/', hostcaption)>0)then
          begin
            ip:=Copy(hostcaption, Pos('/', hostcaption)+1, Length(hostcaption));
            hostcaption:=Copy(hostcaption, 1, Pos('/', hostcaption)-1);
          end
          else
            ip:=hostcaption;

          //Add to Host List
          theDBHost:=TDBHost.Create;
          theDBHost.Caption:=hostcaption;
          theDBHost.HostName:=ip;
          theDBHost.User_Name:='root';
          DBHosts.Add(theDBHost);

          //Add Tree
          theTreeNode:=DBConnTV.Items.Insert(Node, hostcaption);
          theTreeNode.Data:=theDBHost;
          theTreeNode.ImageIndex:=4;
          theTreeNode.SelectedIndex:=4;
          theTreeNode.SubItems.Add('HOST');
          theTreeNode.SubItems.Add(ip);
          theTreeNode.SubItems.Add('root');
          theTreeNode.SubItems.Add('');

          theChildTreeNode:=DBConnTV.Items.AddChild(theTreeNode, '...');
          theChildTreeNode.ImageIndex:=7;
          theChildTreeNode.SelectedIndex:=7;
        end;
      end;
    end
    else if(Node.Text='...')then
    begin
      if(Node.Parent.SubItems.Count>0)then
        if(Node.Parent.SubItems[0]='HOST')then
        begin
          dbname:='';
          if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Create new Database', 119),
            DMMain.GetTranslatedMessage('Database Name:', 120), dbname))then
          begin
            if(dbname<>'')then
            begin
              InfoDBConn:=DMDB.GetNewDBConn('InfoDBConn', False, 'MySQL');
              try
                InfoDBConn.Params.Values['HostName']:=Node.Parent.SubItems[1];
                InfoDBConn.Params.Values['Database']:='mysql';
                InfoDBConn.Params.Values['User_Name']:=Node.Parent.SubItems[2];
                InfoDBConn.Params.Values['Password']:=Node.Parent.SubItems[3];

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

                try
                  DMDB.SQLConn.ExecuteDirect('CREATE DATABASE '+dbname);
                except
                  on x: Exception do
                  begin
                    MessageDlg(DMMain.GetTranslatedMessage('Database could not be created.', 122)+#13#10#13#10+
                      x.Message, mtError, [mbOK], 0);
                    Abort;
                  end;
                end;

                DMDB.DisconnectFromDB;

                theTreeNode:=Node.Parent;
                theTreeNode.Expanded:=False;
                theTreeNode.Expanded:=True;

                //Select new created db
                for i:=0 to theTreeNode.Count-1 do
                  if(CompareText(theTreeNode.Item[i].Text, dbname)=0)then
                  begin
                    theTreeNode.Item[i].Selected:=True;
                    DBConnTVItemClick(self, mbLeft, theTreeNode.Item[i], Point(0, 0));

                    break;
                  end;
              finally
                InfoDBConn.Free;
              end;
            end;
          end;
        end;
    end;
  end;
end;

procedure TDBConnSelectForm.RenameHostMIClick(Sender: TObject);
var hostname: string;
begin
  if(DBConnTV.Selected<>nil)then
    if(DBConnTV.Selected.SubItems.Count>0)then
      if(DBConnTV.Selected.SubItems[0]='HOST')then
      begin
        hostname:=DBConnTV.Selected.Text;
        if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Rename Host', 123),
          DMMain.GetTranslatedMessage('Hostname:', 124), hostname))then
          if(hostname<>'')then
            DBConnTV.Selected.Text:=hostname;
      end;
end;

procedure TDBConnSelectForm.RenameHostMIShow(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]='HOST')then
          TMenuItem(Sender).Enabled:=True;

end;

procedure TDBConnSelectForm.ChangeHostsIPMIClick(Sender: TObject);
var ip: string;
begin
  if(DBConnTV.Selected<>nil)then
    if(DBConnTV.Selected.SubItems.Count>0)then
      if(DBConnTV.Selected.SubItems[0]='HOST')then
      begin
        ip:=DBConnTV.Selected.SubItems[1];
        if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Change Host''s IP', 125),
          DMMain.GetTranslatedMessage('IP:', 126), ip))then
          if(ip<>'')then
            DBConnTV.Selected.SubItems[1]:=ip;
      end;
end;

procedure TDBConnSelectForm.DeleteHostMIClick(Sender: TObject);
var theDBHost: TDBHost;
begin
  if(DBConnTV.Selected<>nil)then
    if(DBConnTV.Selected.SubItems.Count>0)then
      if(DBConnTV.Selected.SubItems[0]='HOST')then
      begin
        if(MessageDlg(DMMain.GetTranslatedMessage('Do you really want to delete this Host?', 127),
          mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
        begin
          //Delete Host from List
          theDBHost:=DBConnTV.Selected.Data;

          DBConnTV.Selected.Delete;

          if(theDBHost<>nil)then
          begin
            DBHosts.Delete(DBHosts.IndexOf(theDBHost));
          end;
        end;
      end;
end;

procedure TDBConnSelectForm.DBConnTVMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if(Button=mbRight)then
  begin
    DBConnTV.Selected:=DBConnTV.GetNodeAt(X, Y);
    DBConnTV.Repaint;
  end;

  if(Button=mbLeft)then
    DBConnTV.BeginDrag(False, 5);
end;

procedure TDBConnSelectForm.DBConnTVCustomDrawItem(
  Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas;
  const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
var x: integer;
  theRect: TRect;
begin
  x:=Rect.Left+2;
  theRect:=Rect;

  with Canvas do
  begin
    Brush.Color:=clWhite;
    FillRect(Rect);
    
    if(TTreeNode(Item).ImageIndex>-1)then
    begin
      if(TTreeNode(Item).Selected)then
      begin
        DBConnImgList.Draw(Canvas, x, Rect.Top+1, TTreeNode(Item).SelectedIndex);

        theRect.Left:=x+18;
        Brush.Color:=clActiveHighlight;
        FillRect(theRect);
      end
      else
        //Draw Folder Open if it is expanded
        if((TTreeNode(Item).ImageIndex=0)and(TTreeNode(Item).Expanded))then
          DBConnImgList.Draw(Canvas, x, Rect.Top+1, 1)
        else
          DBConnImgList.Draw(Canvas, x, Rect.Top+1, TTreeNode(Item).ImageIndex);
      x:=x+20;
    end;


    if(TTreeNode(Item).Selected)then
      Font.Color:=clWhite
    else
      Font.Color:=clBlack;
    TextOut(x, Rect.Top+2, TTreeNode(Item).Text);
  end;

  DefaultDraw:=False;
end;

procedure TDBConnSelectForm.RefreshDBConnList;
var theNode: TListItem;
  i, j: integer;
  ItemFound: Boolean;
  PrevSelName: string;
begin
  if(ConnectionsListView.Selected<>nil)then
    PrevSelName:=ConnectionsListView.Selected.Caption
  else
    PrevSelName:='';

  ConnectionsListView.Items.Clear;

  for i:=0 to DBConns.Count-1 do
  begin
    if(DBConnTV.Selected<>DBConnTV.Items[0])then
    begin
      if(DBConnTV.Selected=MySQLNode)then
      begin
        DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to MySQL Hosts', 128);

        if(CompareText(TDBConn(DBConns[i]).DriverName, 'MySQL')<>0)then
          continue;
      end
      else if(DBConnTV.Selected=OracleNode)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=ODBCNode)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=SQLiteNode)then
      begin
        DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to SQLite Databases', 239);

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

        if(CompareText(TDBConn(DBConns[i]).DriverName, 'MSSQL')<>0)then
          continue;
      end
      else if(DBConnTV.Selected=NetworkHosts)then
      begin
        //Only display Networkhosts
        DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to Network Hosts', 131);

        ItemFound:=False;
        for j:=0 to NetworkHosts.Count-1 do
          if(NetworkHosts.Item[j].SubItems.Count>0)then
            if(CompareText(NetworkHosts.Item[j].SubItems[1], TDBConn(DBConns[i]).Params.Values['HostName'])=0)then
              ItemFound:=True;

        if(Not(ItemFound))then
          continue;
      end
      else if(DBConnTV.Selected=Localhost)then
      begin
        DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to Localhost', 132);

        if(CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], 'localhost')<>0)and
          (CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], '127.0.0.1')<>0)then
          continue;
      end
      else if(DBConnTV.Selected.SubItems.Count>0)then

⌨️ 快捷键说明

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