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 + -
显示快捷键?