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