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

📄 dbconnselect.pas

📁 DBDesigner 4 is a database design system that integrates database design, modelling, creation and ma
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  DBConnTV.Selected:=DBConnTV.Items[0];
  DBConnTV.ScrollBy(0, -1000);

  RefreshDBConnList;

  for i:=0 to ConnectionsListView.Items.Count-1 do
    if(ConnectionsListView.Items[i].Data=theSelDBConn)then
      ConnectionsListView.Selected:=ConnectionsListView.Items[i];
end;

procedure TDBConnSelectForm.ConnectBtnClick(Sender: TObject);
begin
  if(DBConnEd.Text<>'')then
  begin
    //if the user entered an no existing host
    if(SelDBConn=nil)then
      SelDBConn:=DMDB.GetNewDBConn(DBConnEd.Text)
    else if(DBConnEd.Text<>SelDBConn.Name)then
      SelDBConn:=DMDB.GetNewDBConn(DBConnEd.Text);

    {if(TypeLU.ItemIndex<>-1)then
       SelDBConn.Params.Values['DriverName']:=TypeLU.Items[TypeLU.ItemIndex];}
    SelDBConn.Params.Values['User_Name']:=UsernameEd.Text;
    SelDBConn.Params.Values['Password']:=PasswdEd.Text;

    ModalResultIsOK:=True;

    ModalResult:=mrOK;
  end;
end;

procedure TDBConnSelectForm.CancelBtnClick(Sender: TObject);
begin
  ModalResult:=mrCancel;
end;

procedure TDBConnSelectForm.ConnectionsListViewSelectItem(Sender: TObject;
  Item: TListItem; Selected: Boolean);
begin
  if(ConnectionsListView.Selected<>nil)then
  begin
    if(Assigned(ConnectionsListView.Selected.Data))then
    begin
      SelDBConn:=TDBConn(ConnectionsListView.Selected.Data);

      DBConnEd.Text:=SelDBConn.Name;
      UsernameEd.Text:=SelDBConn.Params.Values['User_Name'];
      PasswdEd.Text:=SelDBConn.Params.Values['Password'];
      PasswdEd.SelectAll;
      //DescriptionMemo.Text:=SelDBConn.Description;

      if(Visible)then
        PasswdEd.SetFocus;
    end;
  end
  else
  begin
    SelDBConn:=nil;

    DBConnEd.Text:='';
    UsernameEd.Text:='';
    PasswdEd.Text:='';

    if(Visible)then
      DBConnEd.SetFocus;
  end;
end;

procedure TDBConnSelectForm.FormShow(Sender: TObject);
begin
  {try
    if(CanFocus)then
      SetFocus;
  except
  end;}
end;

procedure TDBConnSelectForm.ConnectionsListViewEdited(Sender: TObject;
  Item: TListItem; var S: WideString);
begin
  SelDBConn.Name:=s;

  DBConnEd.Text:=s;
end;

procedure TDBConnSelectForm.DelConnBtnClick(Sender: TObject);
begin
  if(SelDBConn<>nil)then
  begin
    if(MessageDlg(DMMain.GetTranslatedMessage('Do you really want to delete the selected DB-Connection?', 108),
      mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
    begin
      if(DBConns.IndexOf(SelDBConn)>-1)then
        DBConns.Delete(DBConns.IndexOf(SelDBConn));

      RefreshDBConnList;
    end;
  end;
end;

procedure TDBConnSelectForm.ConnectionsListViewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  mx:=X;
  my:=Y;
end;

procedure TDBConnSelectForm.OnTypeSelectLBoxDblClick(Sender: TObject);
begin
  TForm(TListBox(Sender).Parent).ModalResult:=mrOK;
end;

procedure TDBConnSelectForm.ResetDefaultParams(theDBConn: TDBConn);
var theIni: TMemIniFile;
  theName: string;
begin
  //Copy settings from defaults
  //Read IniFile
  theIni:=TMemIniFile.Create(DMMain.SettingsPath+'DBConn_DefaultSettings.ini');
  try
    theName:=theDBConn.Name;
    DMDB.ReadDBConnFromIniFile(theIni, theDBConn.DriverName, theDBConn);

    theDBConn.Name:=theName;
  finally
    theIni.Free;
  end;
end;

procedure TDBConnSelectForm.ConnectionsListViewDblClick(Sender: TObject);
var s: string;
  x1, x2: integer;
  TypeSelectForm: TForm;
  TypeSelectLBox: TListBox;
  theListItem: TListItem;
  i, j: integer;
begin
  //Connection Name
  x1:=0;
  x2:=ConnectionsListView.Columns[0].Width;

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

  if(mx>x1)and(mx<x2)then
  begin
    s:=SelDBConn.Name;
    if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Connecion Name', 109), DMMain.GetTranslatedMessage('Name:', 110), s, 0, 2))then
      if(s<>'')then
      begin
        //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

        SelDBConn.Name:=s;

        ConnectionsListView.Selected.Caption:=s;
      end;
  end;

  //Connection Type
  x1:=x2;
  x2:=x2+ConnectionsListView.Columns[1].Width;
  if(mx>x1)and(mx<x2)and(ConnectionsListView.Selected<>nil)then
  begin
    TypeSelectForm:=TForm.Create(self);
    try
      TypeSelectForm.Name:='TypeSelectForm';
      TypeSelectForm.FormStyle:=fsStayOnTop;
      {$IFDEF MSWINDOWS}
      TypeSelectForm.BorderStyle:=TFormBorderStyle(bsNone);
      {$ENDIF}
      {$IFDEF LINUX}
      TypeSelectForm.BorderStyle:=TFormBorderStyle(bsSingle);
      {$ENDIF}
      TypeSelectForm.Left:=Left+LeftPnl.Width+DBConnTV.Width+
        HSplitter.Width+ConnectionsListView.Columns[0].Width;
      TypeSelectForm.Top:=Top+TopPnl.Height+
        (ConnectionsListView.Selected.Index-
        ConnectionsListView.TopItem.Index)*18+28;

      TypeSelectLBox:=TListBox.Create(TypeSelectForm);
      TypeSelectLBox.Parent:=TypeSelectForm;
      TypeSelectLBox.Name:='TypeSelectLU';
      TypeSelectLBox.Left:=0;
      TypeSelectLBox.Top:=0;
      TypeSelectLBox.Items.Assign(DMDB.DatabaseTypes);
      TypeSelectLBox.ItemIndex:=TypeSelectLBox.Items.IndexOf(SelDBConn.DriverName);
      TypeSelectLBox.OnDblClick:=OnTypeSelectLBoxDblClick;

      TypeSelectForm.Width:=TypeSelectLBox.Width;
      TypeSelectForm.Height:=TypeSelectLBox.Height;

      TypeSelectForm.ShowModal;

      if(CompareText(SelDBConn.DriverName, TypeSelectLBox.Items[TypeSelectLBox.ItemIndex])<>0)then
      begin
        SelDBConn.DriverName:=TypeSelectLBox.Items[TypeSelectLBox.ItemIndex];
        ResetDefaultParams(SelDBConn);

        RefreshDBConnList;
      end;

    finally
      TypeSelectForm.Free;
    end;
  end;

  //HostName
  x1:=x2;
  x2:=x2+ConnectionsListView.Columns[2].Width;

  if(mx>x1)and(mx<x2)then
  begin
    s:=SelDBConn.Params.Values['HostName'];
    if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Host', 111),
      DMMain.GetTranslatedMessage('Host:', 112), s))then
      if(s<>'')then
      begin
        SelDBConn.Params.Values['HostName']:=s;

        ConnectionsListView.Selected.SubItems[1]:=s;
      end;
  end;

  //Database
  x1:=x2;
  x2:=x2+ConnectionsListView.Columns[3].Width;

  if(mx>x1)and
    (mx<x2)then
  begin
    s:=SelDBConn.Params.Values['Database'];
    if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Database', 113),
     DMMain.GetTranslatedMessage('Database:', 114), s))then
      if(s<>'')then
      begin
        SelDBConn.Params.Values['Database']:=s;

        ConnectionsListView.Selected.SubItems[2]:=s;
      end;
  end;

  //Description
  x1:=x2;
  x2:=x2+ConnectionsListView.Columns[4].Width;

  if(mx>x1)and
    (mx<x2)then
  begin
    s:=SelDBConn.Description;
    if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Description', 115),
      DMMain.GetTranslatedMessage('Description:', 116), s))then
      if(s<>'')then
      begin
        SelDBConn.Description:=s;

        ConnectionsListView.Selected.SubItems[3]:=s;
      end;
  end;

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

  if(mx>x1)and(mx<x2)then
  begin
    DBConnEditorForm:=TDBConnEditorForm.Create(self);
    try
      DBConnEditorForm.SetData(SelDBConn, DBHosts, '', '', '', '');
      DBConnEditorForm.ShowModal;
      RefreshDBConnList;
    finally
      DBConnEditorForm.Free;
    end;
  end;

  SetFocus;
end;

procedure TDBConnSelectForm.DBConnTVExpanding(Sender: TObject;
  Node: TTreeNode; var AllowExpansion: Boolean);
var InfoDBConn: TDBConn;
  theChildTreeNode: TTreeNode;
  TryCount: integer;
begin
  AllowExpansion:=False;

  //Local Host Node
  if(Node.SubItems.Count>0)then
  begin
    if(Node.SubItems[0]='HOST')then
    begin
      InfoDBConn:=DMDB.GetNewDBConn('InfoDBConn', False, 'MySQL');
      try
        TryCount:=0;

        //Get User/Pwd
        DBConnLoginForm:=TDBConnLoginForm.Create(self);
        try
          InfoDBConn.Params.Values['HostName']:=Node.SubItems[1];
          InfoDBConn.Params.Values['Database']:='mysql';
          InfoDBConn.Params.Values['User_Name']:=Node.SubItems[2];
          InfoDBConn.Params.Values['Password']:=Node.SubItems[3];

          //Try as long as password matches or user selects abort
          while(1=1)do
          begin
            //The first time, try values stored with HOST
            if(TryCount>0)then
            begin
              DBConnLoginForm.SetData(InfoDBConn.Params.Values['User_Name']);

              if(DBConnLoginForm.ShowModal=mrAbort)then
                break;

              InfoDBConn.Params.Values['User_Name']:=DBConnLoginForm.GetUserName;
              InfoDBConn.Params.Values['Password']:=DBConnLoginForm.GetPassword;
            end;

            DMDB.DisconnectFromDB;

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

                inc(TryCount);
                continue;
              end;
            end;

            //if connection was successful, store username/pwd
            Node.SubItems[2]:=InfoDBConn.Params.Values['User_Name'];
            Node.SubItems[3]:=InfoDBConn.Params.Values['Password'];

            node.DeleteChildren;

⌨️ 快捷键说明

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