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

📄 dbconneditor.pas

📁 功能强大的ER图建模工具的源代码。 可以代替ERWin了
💻 PAS
📖 第 1 页 / 共 2 页
字号:

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

procedure TDBConnEditorForm.DBEdExit(Sender: TObject);
begin
  //Update Database
  DBConn.Params.Values['Database']:=DBEd.Text;

  //RefreshParams;
end;

procedure TDBConnEditorForm.CommentEdExit(Sender: TObject);
begin
  //Update Description
  DBConn.Description:=CommentEd.Text;
  
  //RefreshParams;
end;

procedure TDBConnEditorForm.ConnectBtnClick(Sender: TObject);
var i, j: integer;
  theDBHost: TDBHost;
  theChildTreeNode: TTreeNode;
begin
  if(Pos('(', HostIPEd.Text)>0)then
    DBConn.Params.Values['HostCaption']:=Trim(Copy(HostIPEd.Text, 1, Pos('(', HostIPEd.Text)-1))
  else
    DBConn.Params.Values['HostCaption']:=HostIPEd.Text;

  //Remove HostCaption ( ) from Hostname
  HostIPEd.Text:=RemoveHostCaption(HostIPEd.Text);
  DBConn.Params.Values['HostName']:=HostIPEd.Text;

  //Check Hosts
  theDBHost:=nil;
  for i:=0 to DBHosts.Count-1 do
  begin
    if(CompareText(TDBHost(DBHosts[i]).HostName, HostIPEd.Text)=0)then
    begin
      theDBHost:=DBHosts[i];
      break;
    end;
  end;

  //if the Host was not found, add new host
  if(theDBHost=nil)and(HostIPEd.Text<>'')then
  begin
    theDBHost:=TDBHost.Create;
    theDBHost.Caption:=DBConn.Params.Values['HostCaption'];
    theDBHost.HostName:=DBConn.Params.Values['HostName'];
    theDBHost.User_Name:='root';

    theChildTreeNode:=DBConnSelectForm.DBConnTV.Items.Insert(DBConnSelectForm.NetworkHosts.Item[DBConnSelectForm.NetworkHosts.Count-1], theDBHost.Caption);
    theChildTreeNode.Data:=theDBHost;
    theChildTreeNode.ImageIndex:=4;
    theChildTreeNode.SelectedIndex:=4;
    theChildTreeNode.SubItems.Add('HOST');
    theChildTreeNode.SubItems.Add(theDBHost.HostName);
    theChildTreeNode.SubItems.Add(theDBHost.User_Name);
    theChildTreeNode.SubItems.Add('');
  end;

  //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=DBConn.Name)and(DMDB.DBConnections[i]<>DBConn2Change)then
      begin
        try
          DBConn.Name:=LeftStr(DBConn.Name, Length(DBConn.Name)-1)+IntToStr(StrToInt(RightStr(DBConn.Name, 1))+1)
        except
          DBConn.Name:=DBConn.Name+'_2';
        end;

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

  //Apply changes to DBConn2Change
  if(DBConn2Change<>nil)then
    DBConn2Change.Assign(DBConn)
  else
  begin
     DBConn2Change:=TDBConn.Create;
     DBConn2Change.Assign(DBConn);
     DMDB.DBConnections.Add(DBConn2Change);
  end;

  DBConn.Free;

  ModalResult:=mrOK;
end;

procedure TDBConnEditorForm.DBConnEdExit(Sender: TObject);
begin
  //Set DBConn Name
  DBConn.Name:=DBConnEd.Text;
end;

procedure TDBConnEditorForm.RefreshParams;
var tablescope: string;
  i: integer;
begin
  //Conn Name
  DBConnEd.Text:=DBConn.Name;

  //HOST & IP
  if(DBConn.Params.Values['HostCaption']<>'')and
    (DBConn.Params.Values['HostName']<>'')then
    HostIPEd.Text:=DBConn.Params.Values['HostCaption']+' ('+
      DBConn.Params.Values['HostName']+')'
  else if(DBConn.Params.Values['HostName']<>'')then
    HostIPEd.Text:=DBConn.Params.Values['HostName'];

  //Database & Type
  if(DBConn.Params.Values['Database']<>'')then
    DBEd.Text:=DBConn.Params.Values['Database'];
  DatabaseTypesCBox.ItemIndex:=DatabaseTypesCBox.Items.IndexOf(DBConn.DriverName);
  if(DatabaseTypesCBox.ItemIndex=-1)then
    DatabaseTypesCBox.ItemIndex:=DatabaseTypesCBox.Items.IndexOf(Copy(DBConn.DriverName, 5, 8));
  CheckHostEdits;

  //Username & Pwd
  if(DBConn.Params.Values['User_Name']<>'')then
    UserNameEd.Text:=DBConn.Params.Values['User_Name'];
  if(DBConn.Params.Values['Password']<>'')then
    PasswordEd.Text:=DBConn.Params.Values['Password'];

  //Comment
  CommentEd.Text:=DBConn.Description;

  //------------------
  //Advanced Grid

  ParamStrGrid.RowCount:=6+DBConn.Params.Count;
  ParamStrGrid.Cols[1].Clear;

  ParamStrGrid.Cells[1, 1]:=DBConn.DriverName;
  ParamStrGrid.Cells[1, 2]:=DBConn.GetDriverFunc;
  ParamStrGrid.Cells[1, 3]:=DBConn.LibraryName;
  ParamStrGrid.Cells[1, 4]:=DBConn.VendorLib;

  tablescope:='';
  if(tsTable in DBConn.tablescope)then
    tablescope:=tablescope+'tsTable, ';
  if(tsView in DBConn.tablescope)then
    tablescope:=tablescope+'tsView, ';
  if(tsSysTable in DBConn.tablescope)then
    tablescope:=tablescope+'tsSysTable, ';
  if(tsSynonym in DBConn.tablescope)then
    tablescope:=tablescope+'tsSynonym';

  ParamStrGrid.Cells[1, 5]:=tablescope;

  for i:=0 to DBConn.Params.Count-1 do
  begin
    ParamStrGrid.Cells[0, 6+i]:=Copy(DBConn.Params[i], 1, Pos('=', DBConn.Params[i])-1);
    ParamStrGrid.Cells[1, 6+i]:=DBConn.Params.Values[ParamStrGrid.Cells[0, 6+i]];
  end;
end;

procedure TDBConnEditorForm.UserNameEdExit(Sender: TObject);
begin
  //Update Username
  DBConn.Params.Values['User_Name']:=UserNameEd.Text;

  //RefreshParams;
end;

procedure TDBConnEditorForm.PasswordEdExit(Sender: TObject);
begin
  //Update Password
  DBConn.Params.Values['Password']:=PasswordEd.Text;

  //RefreshParams;
end;

procedure TDBConnEditorForm.CancelBtnClick(Sender: TObject);
begin
  DBConn.Free;

  ModalResult:=mrAbort;
end;

procedure TDBConnEditorForm.DatabaseTypesCBoxCloseUp(Sender: TObject);
begin
  if(DatabaseTypesCBox.ItemIndex<>0)then
  begin
    HostIPEd.Text:='';
    DBEd.Text:='';
    UserNameEd.Text:='';
    PasswordEd.Text:='';
    PortEd.Text:='';
  end;

  CheckHostEdits;

  ResetDefaultParamsBtnClick(self);

  DBEd.SelectAll;
  DBEd.SetFocus;
end;

procedure TDBConnEditorForm.CheckHostEdits;
begin
  if(CompareText(
    DatabaseTypesCBox.Items[DatabaseTypesCBox.ItemIndex], 'MySQL')=0)then
  begin
    HostIPLbl.Enabled:=True;
    HostIPEd.Enabled:=True;
    PortLbl.Enabled:=True;
    PortEd.Enabled:=False;
    if(PortEd.Text='')then
      PortEd.Text:='3306';

    DatabaseLbl.Caption:=DMMain.GetTranslatedMessage('Database Name:', 140);
  end
  else if(CompareText(
    DatabaseTypesCBox.Items[DatabaseTypesCBox.ItemIndex], 'MSSQL')=0)then
  begin
    HostIPLbl.Enabled:=True;
    HostIPEd.Enabled:=True;
    PortLbl.Enabled:=False;
    PortEd.Enabled:=False;

    DatabaseLbl.Caption:=DMMain.GetTranslatedMessage('Database Name:', 140);    
  end
  else
  begin
    HostIPLbl.Enabled:=False;
    HostIPEd.Enabled:=False;
    PortEd.Enabled:=False;
    PortLbl.Enabled:=False;

    //Rename DatabaseLbl for ODBC Conn
    if(CompareText(DatabaseTypesCBox.Items[DatabaseTypesCBox.ItemIndex], 'ODBC')=0)then
      DatabaseLbl.Caption:=DMMain.GetTranslatedMessage('ODBC DNS Name:', 141)
    else
    //Rename DatabaseLbl for ORCL Conn
    if(CompareText(DatabaseTypesCBox.Items[DatabaseTypesCBox.ItemIndex], 'Oracle')=0)then
      DatabaseLbl.Caption:=DMMain.GetTranslatedMessage('Service Name:', 142)
    else
    //Rename DatabaseLbl for SQLite
    if(CompareText(DatabaseTypesCBox.Items[DatabaseTypesCBox.ItemIndex], 'SQLite')=0)then
      DatabaseLbl.Caption:=DMMain.GetTranslatedMessage('Database File:', 143)
    else
      DatabaseLbl.Caption:=DMMain.GetTranslatedMessage('Database Name:', 140);
      
  end;


end;

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

function TDBConnEditorForm.RemoveHostCaption(Hostname: string): string;
begin
  if(Pos('(', Hostname)>0)then
    RemoveHostCaption:=Copy(Hostname, Pos('(', Hostname)+1, Length(Hostname)-Pos('(', Hostname)-1)
  else
    RemoveHostCaption:=Hostname;
end;

end.

⌨️ 快捷键说明

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