📄 dbconnselect.pas
字号:
DMDB.SchemaSQLQuery.ParamCheck:=False;
DMDB.SchemaSQLQuery.SetSchemaInfo(stNoSchema, '', '');
DMDB.SchemaSQLQuery.SQL.Text:='show databases';
DMDB.SchemaSQLQuery.Open;
while(Not(DMDB.SchemaSQLQuery.EOF))do
begin
theChildTreeNode:=DBConnTV.Items.AddChild(node, DMDB.SchemaSQLQuery.Fields[0].AsString);
theChildTreeNode.ImageIndex:=7;
theChildTreeNode.SelectedIndex:=7;
theChildTreeNode.SubItems.Add('DB');
theChildTreeNode.SubItems.Add('MySQL');
DMDB.SchemaSQLQuery.Next;
end;
DMDB.SchemaSQLQuery.Close;
theChildTreeNode:=DBConnTV.Items.AddChild(node, '...');
theChildTreeNode.ImageIndex:=7;
theChildTreeNode.SelectedIndex:=7;
DMDB.DisconnectFromDB;
AllowExpansion:=True;
DBConnTV.Selected:=node;
RefreshDBConnList;
break;
end;
finally
DBConnLoginForm.Free;
end;
DBConnTV.SetFocus;
finally
InfoDBConn.Free;
end;
end;
end
else {if(node.Level=0)then}
AllowExpansion:=True;
end;
procedure TDBConnSelectForm.DBConnTVItemClick(Sender: TObject;
Button: TMouseButton; Node: TTreeNode; const Pt: TPoint);
var hostcaption, dbname, ip: string;
theTreeNode, theChildTreeNode: TTreeNode;
InfoDBConn: TDBConn;
i: integer;
theDBHost: TDBHost;
begin
RefreshDBConnList;
if(Node.Level>0)then
begin
if(Node.Parent.Text='Network Hosts')and(Node.Text='...')then
begin
hostcaption:='';
if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Add new Host', 117),
DMMain.GetTranslatedMessage('Hostname/IP:', 118), hostcaption))then
begin
if(hostcaption<>'')then
begin
//When / in hostname, extract ip
if(Pos('/', hostcaption)>0)then
begin
ip:=Copy(hostcaption, Pos('/', hostcaption)+1, Length(hostcaption));
hostcaption:=Copy(hostcaption, 1, Pos('/', hostcaption)-1);
end
else
ip:=hostcaption;
//Add to Host List
theDBHost:=TDBHost.Create;
theDBHost.Caption:=hostcaption;
theDBHost.HostName:=ip;
theDBHost.User_Name:='root';
DBHosts.Add(theDBHost);
//Add Tree
theTreeNode:=DBConnTV.Items.Insert(Node, hostcaption);
theTreeNode.Data:=theDBHost;
theTreeNode.ImageIndex:=4;
theTreeNode.SelectedIndex:=4;
theTreeNode.SubItems.Add('HOST');
theTreeNode.SubItems.Add(ip);
theTreeNode.SubItems.Add('root');
theTreeNode.SubItems.Add('');
theChildTreeNode:=DBConnTV.Items.AddChild(theTreeNode, '...');
theChildTreeNode.ImageIndex:=7;
theChildTreeNode.SelectedIndex:=7;
end;
end;
end
else if(Node.Text='...')then
begin
if(Node.Parent.SubItems.Count>0)then
if(Node.Parent.SubItems[0]='HOST')then
begin
dbname:='';
if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Create new Database', 119),
DMMain.GetTranslatedMessage('Database Name:', 120), dbname))then
begin
if(dbname<>'')then
begin
InfoDBConn:=DMDB.GetNewDBConn('InfoDBConn', False, 'MySQL');
try
InfoDBConn.Params.Values['HostName']:=Node.Parent.SubItems[1];
InfoDBConn.Params.Values['Database']:='mysql';
InfoDBConn.Params.Values['User_Name']:=Node.Parent.SubItems[2];
InfoDBConn.Params.Values['Password']:=Node.Parent.SubItems[3];
try
DMDB.ConnectToDB(InfoDBConn);
except
on x: Exception do
begin
MessageDlg(DMMain.GetTranslatedMessage('Connection to database failed.', 212)+#13#10#13#10+
x.Message, mtError, [mbOK], 0);
Abort;
end;
end;
try
DMDB.SQLConn.ExecuteDirect('CREATE DATABASE '+dbname);
except
on x: Exception do
begin
MessageDlg(DMMain.GetTranslatedMessage('Database could not be created.', 122)+#13#10#13#10+
x.Message, mtError, [mbOK], 0);
Abort;
end;
end;
DMDB.DisconnectFromDB;
theTreeNode:=Node.Parent;
theTreeNode.Expanded:=False;
theTreeNode.Expanded:=True;
//Select new created db
for i:=0 to theTreeNode.Count-1 do
if(CompareText(theTreeNode.Item[i].Text, dbname)=0)then
begin
theTreeNode.Item[i].Selected:=True;
DBConnTVItemClick(self, mbLeft, theTreeNode.Item[i], Point(0, 0));
break;
end;
finally
InfoDBConn.Free;
end;
end;
end;
end;
end;
end;
end;
procedure TDBConnSelectForm.RenameHostMIClick(Sender: TObject);
var hostname: string;
begin
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='HOST')then
begin
hostname:=DBConnTV.Selected.Text;
if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Rename Host', 123),
DMMain.GetTranslatedMessage('Hostname:', 124), hostname))then
if(hostname<>'')then
DBConnTV.Selected.Text:=hostname;
end;
end;
procedure TDBConnSelectForm.RenameHostMIShow(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]='HOST')then
TMenuItem(Sender).Enabled:=True;
end;
procedure TDBConnSelectForm.ChangeHostsIPMIClick(Sender: TObject);
var ip: string;
begin
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='HOST')then
begin
ip:=DBConnTV.Selected.SubItems[1];
if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Change Host''s IP', 125),
DMMain.GetTranslatedMessage('IP:', 126), ip))then
if(ip<>'')then
DBConnTV.Selected.SubItems[1]:=ip;
end;
end;
procedure TDBConnSelectForm.DeleteHostMIClick(Sender: TObject);
var theDBHost: TDBHost;
begin
if(DBConnTV.Selected<>nil)then
if(DBConnTV.Selected.SubItems.Count>0)then
if(DBConnTV.Selected.SubItems[0]='HOST')then
begin
if(MessageDlg(DMMain.GetTranslatedMessage('Do you really want to delete this Host?', 127),
mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
begin
//Delete Host from List
theDBHost:=DBConnTV.Selected.Data;
DBConnTV.Selected.Delete;
if(theDBHost<>nil)then
begin
DBHosts.Delete(DBHosts.IndexOf(theDBHost));
end;
end;
end;
end;
procedure TDBConnSelectForm.DBConnTVMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if(Button=mbRight)then
begin
DBConnTV.Selected:=DBConnTV.GetNodeAt(X, Y);
DBConnTV.Repaint;
end;
if(Button=mbLeft)then
DBConnTV.BeginDrag(False, 5);
end;
procedure TDBConnSelectForm.DBConnTVCustomDrawItem(
Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas;
const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
var x: integer;
theRect: TRect;
begin
x:=Rect.Left+2;
theRect:=Rect;
with Canvas do
begin
Brush.Color:=clWhite;
FillRect(Rect);
if(TTreeNode(Item).ImageIndex>-1)then
begin
if(TTreeNode(Item).Selected)then
begin
DBConnImgList.Draw(Canvas, x, Rect.Top+1, TTreeNode(Item).SelectedIndex);
theRect.Left:=x+18;
Brush.Color:=clActiveHighlight;
FillRect(theRect);
end
else
//Draw Folder Open if it is expanded
if((TTreeNode(Item).ImageIndex=0)and(TTreeNode(Item).Expanded))then
DBConnImgList.Draw(Canvas, x, Rect.Top+1, 1)
else
DBConnImgList.Draw(Canvas, x, Rect.Top+1, TTreeNode(Item).ImageIndex);
x:=x+20;
end;
if(TTreeNode(Item).Selected)then
Font.Color:=clWhite
else
Font.Color:=clBlack;
TextOut(x, Rect.Top+2, TTreeNode(Item).Text);
end;
DefaultDraw:=False;
end;
procedure TDBConnSelectForm.RefreshDBConnList;
var theNode: TListItem;
i, j: integer;
ItemFound: Boolean;
PrevSelName: string;
begin
if(ConnectionsListView.Selected<>nil)then
PrevSelName:=ConnectionsListView.Selected.Caption
else
PrevSelName:='';
ConnectionsListView.Items.Clear;
for i:=0 to DBConns.Count-1 do
begin
if(DBConnTV.Selected<>DBConnTV.Items[0])then
begin
if(DBConnTV.Selected=MySQLNode)then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to MySQL Hosts', 128);
if(CompareText(TDBConn(DBConns[i]).DriverName, 'MySQL')<>0)then
continue;
end
else if(DBConnTV.Selected=OracleNode)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=ODBCNode)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=SQLiteNode)then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to SQLite Databases', 239);
if(CompareText(TDBConn(DBConns[i]).DriverName, 'SQLite')<>0)then
continue;
end
else if(DBConnTV.Selected=MSSQLNode)then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to MSSQL Databases', 240);
if(CompareText(TDBConn(DBConns[i]).DriverName, 'MSSQL')<>0)then
continue;
end
else if(DBConnTV.Selected=NetworkHosts)then
begin
//Only display Networkhosts
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to Network Hosts', 131);
ItemFound:=False;
for j:=0 to NetworkHosts.Count-1 do
if(NetworkHosts.Item[j].SubItems.Count>0)then
if(CompareText(NetworkHosts.Item[j].SubItems[1], TDBConn(DBConns[i]).Params.Values['HostName'])=0)then
ItemFound:=True;
if(Not(ItemFound))then
continue;
end
else if(DBConnTV.Selected=Localhost)then
begin
DBConnLbl.Caption:=DMMain.GetTranslatedMessage('All Connections to Localhost', 132);
if(CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], 'localhost')<>0)and
(CompareText(TDBConn(DBConns[i]).Params.Values['HostName'], '127.0.0.1')<>0)then
continue;
end
else if(DBConnTV.Selected.SubItems.Count>0)then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -