📄 dbconnselect.pas
字号:
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 + -