📄 dbconnselect.pas
字号:
begin
if(DBConnTV.Selected.SubItems[0]='HOST')then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to the %s Host', 133, DBConnTV.Selected.SubItems[1]);
if(CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], DBConnTV.Selected.SubItems[1])<>0)then
continue;
end
else if(DBConnTV.Selected.SubItems[0]='DB')then
begin
if(DBConnTV.Selected.SubItems[1]='MySQL')then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to the %s MySQL Host', 134, DBConnTV.Selected.Parent.SubItems[1]);
if(CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], DBConnTV.Selected.Parent.SubItems[1])<>0)then
continue;
end
else if(DBConnTV.Selected.SubItems[1]='Oracle')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.SubItems[1]='ODBC')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.SubItems[1]='SQLite')then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to ODBC Databases', 239);
if(CompareText(TDBConn(DBConns[i]).DriverName, 'SQLite')<>0)then
continue;
end
else if(DBConnTV.Selected.SubItems[1]='MSSQL')then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to MSSQL Databases', 240);
if(CompareText(TDBConn(DBConns[i]).DriverName, 'MSSQL')<>0)then
continue;
end
else
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to %s', 135, DBConnTV.Selected.SubItems[1]);
if(CompareText(TDBConn(DBConns[i]).DriverName, DBConnTV.Selected.SubItems[1])<>0)then
continue;
end;
end
else
continue;
end
else
continue;
end
else
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Database Connections', 136);
theNode:=ConnectionsListView.Items.Add;
theNode.Caption:=TDBConn(DBConns[i]).Name;
theNode.ImageIndex:=5;
theNode.Data:=DBConns[i];
theNode.SubItems.Add(TDBConn(DBConns[i]).DriverName);
theNode.SubItems.Add(TDBConn(DBConns[i]).Params.Values['HostName']);
theNode.SubItems.Add(TDBConn(DBConns[i]).Params.Values['Database']);
theNode.SubItems.Add(TDBConn(DBConns[i]).Description);
theNode.SubItems.Add('');
theNode.SubItemImages[4]:=9;
end;
//Try to select prev. selected item
if(PrevSelName<>'')then
begin
for i:=0 to ConnectionsListView.Items.Count-1 do
if(ConnectionsListView.Items[i].Caption=PrevSelName)then
begin
ConnectionsListView.Selected:=ConnectionsListView.Items[i];
break;
end;
end;
end;
procedure TDBConnSelectForm.ConnectionsListViewDragOver(Sender,
Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept:=False;
if(Source<>nil)then
if(Source.ClassNameIs('TTreeView'))then
if(TTreeView(Source).Name='DBConnTV')then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='DB')then
Accept:=True;
end;
procedure TDBConnSelectForm.ConnectionsListViewDragDrop(Sender,
Source: TObject; X, Y: Integer);
var theDBConn: TDBConn;
i, j: integer;
s: string;
begin
if(Source.ClassNameIs('TTreeView'))then
if(TTreeView(Source).Name='DBConnTV')then
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='DB')then
begin
//Create a new DBConn of the given DatabaseType
s:=DBConnTV.Selected.Text;
//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
theDBConn:=DMDB.GetNewDBConn(s, True, DBConnTV.Selected.SubItems[1]);
if(CompareText(DBConnTV.Selected.SubItems[1], 'MySQL')=0)then
begin
theDBConn.Params.Values['HostCaption']:=DBConnTV.Selected.Parent.Text;
theDBConn.Params.Values['HostName']:=DBConnTV.Selected.Parent.SubItems[1];
theDBConn.Params.Values['User_Name']:=DBConnTV.Selected.Parent.SubItems[2];
theDBConn.Params.Values['Database']:=DBConnTV.Selected.Text;
end;
RefreshDBConnList;
//Select new created DBConn
for i:=0 to ConnectionsListView.Items.Count-1 do
if(ConnectionsListView.Items[i].Data=theDBConn)then
ConnectionsListView.Selected:=ConnectionsListView.Items[i];
ConnectionsListViewSelectItem(self,
ConnectionsListView.Selected, True);
end;
end;
procedure TDBConnSelectForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose:=True;
if(Not(ModalResultIsOK))then
ModalResult:=mrCancel;
end;
procedure TDBConnSelectForm.HSplitterMoved(Sender: TObject);
begin
DBConnLbl.Left:=LeftPnl.Width+DBConnTV.Width+HSplitter.Width;
end;
procedure TDBConnSelectForm.ConnectionsListViewClick(Sender: TObject);
var x1, x2, i: integer;
theData: Pointer;
theListItem: TListItem;
begin
x2:=0;
for i:=0 to 4 do
x2:=x2+ConnectionsListView.Columns[i].Width;
//paramaters
x1:=x2;
x2:=x2+ConnectionsListView.Columns[5].Width;
//BUG in DELPHI 7
theListItem:=ConnectionsListView.GetItemAt(10, my);
if(theListItem<>nil)then
ConnectionsListView.Selected:=theListItem;
if(mx>x1)and(mx<x2)and(ConnectionsListView.Selected<>nil)then
begin
DBConnEditorForm:=TDBConnEditorForm.Create(self);
try
theData:=ConnectionsListView.Selected.Data;
DBConnEditorForm.SetData(SelDBConn, DBHosts);
DBConnEditorForm.ShowModal;
RefreshDBConnList;
for i:=0 to ConnectionsListView.Items.Count-1 do
if(ConnectionsListView.Items[i].Data=theData)then
ConnectionsListView.Selected:=ConnectionsListView.Items[i];
finally
DBConnEditorForm.Free;
end;
end;
end;
procedure TDBConnSelectForm.NewConnBtnClick(Sender: TObject);
var db, dbtype, host, user: string;
i: integer;
begin
DBConnEditorForm:=TDBConnEditorForm.Create(self);
try
db:='';
dbtype:='MySQL';
host:='';
user:='';
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='DB')then
begin
db:=DBConnTV.Selected.Text;
dbtype:=DBConnTV.Selected.SubItems[1];
if(CompareText(DBConnTV.Selected.SubItems[1], 'MySQL')=0)then
begin
host:=DBConnTV.Selected.Parent.Text;
user:=DBConnTV.Selected.Parent.SubItems[2];
end;
end;
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='HOST')then
begin
host:=DBConnTV.Selected.Text;
user:=DBConnTV.Selected.SubItems[2];
end;
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected.SelectedIndex=1)then
if(DBConnTV.Selected.Text<>DMMain.GetTranslatedMessage('All Connections', 107))then
begin
dbtype:=DBConnTV.Selected.Text;
end;
DBConnEditorForm.SetData(nil, DBHosts, dbtype, host, db, user);
if(DBConnEditorForm.ShowModal=mrOK)then
begin
RefreshDBConnList;
for i:=0 to ConnectionsListView.Items.Count-1 do
if(CompareText(ConnectionsListView.Items[i].Caption, DBConnEditorForm.DBConn2Change.Name)=0)then
begin
ConnectionsListView.Selected:=ConnectionsListView.Items[i];
ConnectionsListViewSelectItem(self, ConnectionsListView.Items[i], True);
break;
end;
end;
finally
DBConnEditorForm.Free;
end;
end;
procedure TDBConnSelectForm.DropDatabaseMIShow(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]='DB')then
if(DBConnTV.Selected.SubItems[1]='MySQL')then
TMenuItem(Sender).Enabled:=True;
end;
procedure TDBConnSelectForm.DropDatabaseMIClick(Sender: TObject);
var InfoDBConn: TDBConn;
begin
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected<>Localhost)then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='DB')then
begin
if(CompareText(DBConnTV.Selected.Text, 'mysql')=0)then
begin
MessageDlg(DMMain.GetTranslatedMessage('You cannot delete the MySQL Database', 137),
mtError, [mbOK], 0);
Exit;
end;
if(MessageDlg(DMMain.GetTranslatedMessage('Do you want to drop the selected database %s'+
#13#10#13#10+
'All data will be lost!', 138, DBConnTV.Selected.Text), mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
begin
if(MessageDlg(DMMain.GetTranslatedMessage('Do you REALLY want to drop the selected database %s'+
#13#10#13#10+
'The Database cannot be restored!', 139, DBConnTV.Selected.Text), mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
begin
InfoDBConn:=DMDB.GetNewDBConn('InfoDBConn', False, 'MySQL');
try
InfoDBConn.Params.Values['HostName']:=DBConnTV.Selected.Parent.SubItems[1];
InfoDBConn.Params.Values['Database']:='mysql';
InfoDBConn.Params.Values['User_Name']:=DBConnTV.Selected.Parent.SubItems[2];
InfoDBConn.Params.Values['Password']:=DBConnTV.Selected.Parent.SubItems[3];
try
DMDB.ConnectToDB(InfoDBConn);
except
on x: Exception do
begin
MessageDlg(DMMain.GetTranslatedMessage('Connection to database failed.'+#13#10#13#10+'%s',
121, x.Message), mtError, [mbOK], 0);
Abort;
end;
end;
try
DMDB.SQLConn.ExecuteDirect('DROP DATABASE '+DBConnTV.Selected.Text);
except
on x: Exception do
begin
MessageDlg('Database could not be dropped.'+#13#10#13#10+
x.Message, mtError, [mbOK], 0);
Abort;
end;
end;
DMDB.DisconnectFromDB;
DBConnTV.Items.Delete(DBConnTV.Selected);
finally
InfoDBConn.Free;
end;
end;
end;
end;
end;
procedure TDBConnSelectForm.AddConnection1Click(Sender: TObject);
begin
NewConnBtnClick(self);
end;
procedure TDBConnSelectForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if(Key=Key_F1)then
DMMain.ShowHelp('db', 'dbconn');
end;
procedure TDBConnSelectForm.DelConSBtnClick(Sender: TObject);
begin
DelConnBtnClick(self);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -