childwin.pas
来自「MysqlFront的源码」· PAS 代码 · 共 2,085 行 · 第 1/5 页
PAS
2,085 行
DBGrid1.Options := DBGrid1.Options - [dgAlwaysShowEditor];
PageControl1.ActivePage := SheetData;
ZConn.Database := ActualDatabase;
ZQuery2.Close;
ZQuery2.SQL.Clear;
ZQuery2.SQL.Add( 'SELECT * FROM ' + ActualTable );
if trim(self.SynMemo3.Text) <> '' then
ZQuery2.SQL.Add( 'WHERE ' + trim(self.SynMemo3.Text) );
if sorting <> '' then
ZQuery2.SQL.Add( sorting );
if mainform.CheckBoxLimit.Checked then
ZQuery2.SQL.Add('LIMIT ' + intToStr(mainform.UpDownLimitStart.Position) + ', ' + intToStr(mainform.UpDownLimitEnd.position) );
try
ZQuery2.Open;
except
on E:Exception do
begin
MessageDlg(E.Message , mtError, [mbOK], 0);
LogSQL(E.Message);
ZQuery2.Active := false;
viewingdata := false;
Screen.Cursor := crDefault;
exit;
end;
end;
for i:=0 to FeldListe.Items.Count-1 do begin
Columns.Add( FeldListe.Items[i].Caption );
// give all enum-fields a PickList with its Items
if StrCmpBegin('enum', FeldListe.Items[i].SubItems[0]) then begin
DropDown := explode(''',''', getklammervalues(FeldListe.Items[i].SubItems[0]));
for j:=0 to DropDown.count-1 do
begin
DropDown[j] := trimc(DropDown[j], '''');
end;
for j:=0 to DBGrid1.Columns.count-1 do
begin
if DBGrid1.Columns[j].FieldName = FeldListe.Items[i].Caption then
DBGrid1.Columns[j].PickList := DropDown;
end;
end;
// make PK-columns = fsBold
for j:=0 to DBGrid1.Columns.count-1 do
begin
if (DBGrid1.Columns[j].FieldName = FeldListe.Items[i].Caption) and
(FeldListe.Items[i].ImageIndex = 9) then
begin
PrimaryKeyColumns.Add( FeldListe.Items[i].Caption );
end;
end;
end;
for j:=0 to DBGrid1.Columns.count-1 do
begin
// set column-width
if (Mainform.DefaultColWidth <> 0) and (DBGrid1.Columns[j].Width > Mainform.DefaultColWidth) then
begin
DBGrid1.Columns[j].Width := Mainform.DefaultColWidth;
end;
// make PK-columns = fsBold
for i:=0 to PrimaryKeyColumns.Count-1 do
begin
if (PrimaryKeyColumns[i] = DBGrid1.Columns[j].Fieldname) then
begin
DBGrid1.Columns[j].Font.Style := DBGrid1.Columns[j].Font.Style + [fsBold];
DBGrid1.Columns[j].Color := $02EEEEEE;
end;
end;
end;
Panel5.Caption := ActualDatabase + ' / ' + ActualTable + ': ' +
IntToStr(rowcount) + ' Records (' +
IntToStr(ZQuery2.RecordCount) + ' retrieved)';
dataselected := true;
pcChange(self);
end;
viewingdata := false;
DBGridColenter(dbgrid1);
Screen.Cursor := crDefault;
end;
procedure TMDIChild.pcChange(Sender: TObject);
var DataOrQueryTab : Boolean;
begin
// PageControl changes
// showmessage('pcchange!!!');
Mainform.ExecuteQuery.Enabled := PageControl1.ActivePage = SheetQuery;
Mainform.ExecuteSelection.Enabled := PageControl1.ActivePage = SheetQuery;
Mainform.ExecuteLine.Enabled := PageControl1.ActivePage = SheetQuery;
if (PageControl1.ActivePage = SheetData) and (not dataselected) then
viewdata(self);
if PageControl1.ActivePage = SheetQuery then
if ActualDatabase <> '' then
Panel6.Caption := 'SQL-Query on Database ' + ActualDatabase + ':'
else
Panel6.Caption := 'SQL-Query on Host ' + ZConn.HostName + ':';
// copy and save csv-buttons
DataOrQueryTab := (PageControl1.ActivePage = SheetQuery) or (PageControl1.ActivePage = SheetData);
with mainform do begin
Copy2CSV.Enabled := DataOrQueryTab;
CopyHTMLtable.Enabled := DataOrQueryTab;
Copy2XML.Enabled := DataOrQueryTab;
ExportData.Enabled := DataOrQueryTab;
PrintList.Enabled := not DataOrQueryTab;
end;
mainform.ToolBarData.Visible:= (PageControl1.ActivePage = SheetData);
mainform.DBNavigator1.DataSource := DataSource1;
Tabsheet2.TabVisible := DataOrQueryTab;
Tabsheet8.TabVisible := (PageControl1.ActivePage = SheetData);
end;
procedure TMDIChild.ShowDBProperties(Sender: TObject);
var
n : TListItem;
i,t,u,bytes : Integer;
tndb : TTreenode;
begin
// DB-Properties
Screen.Cursor := crHourGlass;
Mainform.ButtonDropDatabase.Hint := 'Drop Database...|Drop Database ' + ActualDatabase + '...';
Tabellenliste.Items.BeginUpdate();
Tabellenliste.Items.Clear;
Screen.Cursor := crSQLWait;
ZConn.Database := ActualDatabase;
ExecQuery( 'USE ' + ActualDatabase );
Try
if mysql_version >= 32300 then begin
// get quick results with versions 3.23.xx and newer
ZQuery3.SQL.Clear;
ZQuery3.SQL.Add('SHOW TABLE STATUS');
ZQuery3.Open();
ZQuery3.First;
for i := 1 to ZQuery3.RecordCount do begin
n := Tabellenliste.Items.Add;
n.ImageIndex := 1;
// Table
n.Caption := ZQuery3.FieldByName('Name').AsString;
// Records
n.SubItems.Add( ZQuery3.FieldByName('Rows').AsString );
// Size: Data_length + Index_length
bytes := ZQuery3.FieldByName('Data_length').AsInteger + ZQuery3.FieldByName('Index_length').AsInteger;
n.SubItems.Add(format('%d KB', [bytes div 1024 + 1]));
// Created:
n.SubItems.Add( DateTimeToStr(ZQuery3.FieldByName('Create_time').AsDateTime) );
// Updated:
n.SubItems.Add( DateTimeToStr(ZQuery3.FieldByName('Update_time').AsDateTime) );
// Type
Try // Until 4.x
n.SubItems.Add( ZQuery3.FieldByName('Type').AsString );
Except // Since 5.x
n.SubItems.Add( ZQuery3.FieldByName('Engine').AsString );
End;
// Comment
n.SubItems.Add( ZQuery3.FieldByName('Comment').AsString );
ZQuery3.Next;
end;
end
else begin
// get slower results with versions 3.22.xx and older
ZQuery3.SQL.Clear;
ZQuery3.SQL.Add('SHOW TABLES');
ZQuery3.Open;
ZQuery3.First;
for i := 1 to ZQuery3.RecordCount do begin
n := Tabellenliste.Items.Add;
n.Caption := ZQuery3.Fields[0].AsString;
n.ImageIndex := 1;
n.SubItems.Add( GetVar( 'SELECT COUNT(*) FROM '+ZQuery3.Fields[0].AsString ) );
ZQuery3.Next;
end;
end;
Finally
Tabellenliste.Items.EndUpdate();
Screen.Cursor := crDefault;
End;
Screen.Cursor := crHourglass;
// update dbtree with new/deleted tables
if DBTree.Selected.Level = 1 then tndb := DBTree.Selected
else if DBTree.Selected.Level = 2 then tndb := DBTree.Selected.Parent
else exit;
// get all tables back into dbtree
for u:=tndb.Count-1 downto 0 do
tndb.Item[u].delete;
for t:=0 to TabellenListe.Items.Count-1 do
begin
with DBtree.Items.AddChild(tndb, TabellenListe.Items[t].Caption) do begin
ImageIndex := 1;
selectedIndex := 11;
end;
end;
Panel2.Caption := 'Database ' + ActualDatabase + ': ' + inttostr(TabellenListe.Items.Count) + ' table(s)';
Screen.Cursor := crDefault;
end;
procedure TMDIChild.ShowTableProperties(Sender: TObject);
var
i,j : Integer;
n : TListItem;
tn, tndb : TTreeNode;
begin
// Table-Properties
Screen.Cursor := crHourGlass;
if (PageControl1.ActivePage <> SheetData) and (not DBTree.Dragging) then
PageControl1.ActivePage := SheetTable;
Panel3.Caption := 'Table-Properties for ' + ActualDatabase + ': ' + ActualTable;
// Tabelle auch im TreeView selektieren:
with DBTree do begin
if Selected.Level = 1 then tndb := Selected
else if Selected.Level = 2 then tndb := Selected.Parent
else if Selected.Level = 3 then tndb := Selected.Parent.Parent
else exit;
end;
tn := tndb.getFirstChild;
for i:=0 to tndb.Count -1 do begin
if ActualTable = tn.Text then begin
DBTree.Selected := tn; // select table
break;
end;
tn := tndb.GetNextChild(tn);
end;
Feldliste.Items.BeginUpdate;
FeldListe.Items.Clear;
Try
GetResults( 'SHOW FIELDS FROM ' + ActualTable, ZQuery3 );
for i:=1 to ZQuery3.RecordCount do
begin
n := FeldListe.Items.Add;
if ZQuery3.FieldByName('Key').AsString = 'PRI' then
n.ImageIndex := 9
else if ZQuery3.FieldByName('Key').AsString = 'UNI' then
n.ImageIndex := 11
else if ZQuery3.FieldByName('Key').AsString = 'MUL' then
n.ImageIndex := 10
else
n.ImageIndex := 14;
n.Caption := ZQuery3.FieldByName('Field').AsString;
n.Subitems.Add( ZQuery3.FieldByName('Type').AsString );
if lowercase( ZQuery3.FieldByName('Null').AsString ) = 'yes' then
n.Subitems.Add('Yes')
else n.Subitems.Add('No');
n.Subitems.Add( ZQuery3.FieldByName('Default').AsString );
n.Subitems.Add( ZQuery3.FieldByName('Extra').AsString );
ZQuery3.Next;
end;
// add fields to dbtree for drag'n dropping purpose
if not DBTree.Selected.HasChildren then
begin
ZQuery3.First;
for i:=1 to ZQuery3.RecordCount do begin
tn := DBtree.Items.AddChild(Dbtree.Selected, ZQuery3.FieldByName('Field').AsString );
if ZQuery3.FieldByName('Key').AsString = 'PRI' then
tn.ImageIndex := 21
else
tn.ImageIndex := 17;
tn.SelectedIndex := tn.ImageIndex;
ZQuery3.Next;
end;
end;
finally
Feldliste.Items.EndUpdate;
end;
GetResults( 'SHOW KEYS FROM ' + ActualTable, ZQuery3 );
for i:=1 to ZQuery3.RecordCount do
begin
// primary key
if ZQuery3.FieldByName('Key_name').AsString = 'PRIMARY' then
begin
for j:=0 to FeldListe.Items.Count-1 do
begin
if ZQuery3.FieldByName('Column_name').AsString = FeldListe.Items[j].Caption then
begin
FeldListe.Items[j].ImageIndex := 9;
break;
end;
end;
end;
// index
if (ZQuery3.FieldByName('Key_name').AsString <> 'PRIMARY') and (ZQuery3.FieldByName('Non_unique').AsString = '1') then
begin
for j:=0 to FeldListe.Items.Count-1 do
begin
if ZQuery3.FieldByName('Column_name').AsString = FeldListe.Items[j].Caption then
begin
FeldListe.Items[j].ImageIndex := 10;
break;
end;
end;
end;
// unique
if (ZQuery3.FieldByName('Key_name').AsString <> 'PRIMARY') and (ZQuery3.FieldByName('Non_unique').AsString = '0') then
begin
for j:=0 to FeldListe.Items.Count-1 do
begin
if ZQuery3.FieldByName('Column_name').AsString = FeldListe.Items[j].Caption then
begin
FeldListe.Items[j].ImageIndex := 11;
break;
end;
end;
end;
// column is part of a fulltext key, available since 3.23.xx
if (ZQuery3.FieldByName('Key_name').AsString <> 'PRIMARY') and (ZQuery3.FieldByName('Index_type').AsString = 'FULLTEXT') then
begin
for j:=0 to FeldListe.Items.Count-1 do
begin
if ZQuery3.FieldByName('Column_name').AsString = FeldListe.Items[j].Caption then
begin
FeldListe.Items[j].ImageIndex := 25;
break;
end;
end;
end;
ZQuery3.Next;
end;
Screen.Cursor := crDefault;
end;
procedure TMDIChild.TabellenlisteChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
var someselected : Boolean;
begin
someselected := (Tabellenliste.Selected <> nil);
// Tabelle aus der DB ausgew鋒lt
with Toolbar1 do begin
Toolbutton2.Enabled := someselected; // eigenschaften
menuproperties.Enabled := someselected;
Toolbutton3.Enabled := someselected; //einf黦en
menuinsert.Enabled := someselected;
Toolbutton1.Enabled := someselected; //anzeigen
menuviewdata.Enabled := someselected;
Toolbutton13.Enabled := someselected; // leeren
menuemptytable.Enabled := someselected;
MenuAdvancedProperties.Enabled := someselected;
MenuRenameTable.Enabled := someselected;
MenuDropTable.Enabled := someselected;
MenuChangeType1.Enabled := someselected;
MenuChangeType2.Enabled := someselected;
MenuChangeType3.Enabled := someselected;
MenuChangeType4.Enabled := someselected;
MenuChangeType5.Enabled := someselected;
MenuChangeType6.Enabled := someselected;
MenuChangeTypeOther.Enabled := someselected;
Mainform.CopyTable.Enabled := someselected;
MenuTabelleLoeschen.Enabled := someselected;
if someselected then begin
ActualTable := Tabellenliste.Selected.Caption;
// dataselected := ActualTable = ZQuery2.TableName;
end
else begin
ActualTable := '';
// f黨rt zum Verhalten, dass immer die erste Tabelle ohne Daten angezeigt wird:
// dataselected := ActualTable = ZQuery2.TableName;
end;
// dataselected := someselected;
{$B-} // enable short-circuit evaluation
if someselected and (Tabellenliste.Selected.SubItems.Count > 1) then
MenuTableComment.Enabled := someselected
else
MenuTableComment.Enabled := false;
{$B+} // disable short-circuit evaluation
MenuOptimize.Enabled := someselected;
MenuCheck.Enabled := someselected;
MenuAnalyze.Enabled := someselected;
MenuRepair.Enabled := someselected;
end;
// f黨rt zu seltsamen Verhalten bei Auswahl einer Tabelle im DBTree:
// if not (csDestroying in ComponentState) then begin
// SheetTable.TabVisible := someselected;
// SheetData.TabVisible := someselected;
// end;
end;
procedure TMDIChild.TabelleAnzeigen(Sender: TObject);
var
i : Integer;
tn, tndb : TTreeNode;
begin
// vor viewdata...
if DBTree.Selected.Level = 1 then tndb := DBTree.Selected
else if DBTree.Selected.Level = 2 then tndb := DBTree.Selected.Parent
else exit;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?