⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createtable.pas

📁 MysqlFront的源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit createtable;


// -------------------------------------
// HeidiSQL
// Create table
// -------------------------------------


interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Buttons, ComCtrls, SortListView, ImgList, ToolWin,
  Menus;

type
  TCreateTableForm = class(TForm)
    ButtonCancel: TButton;
    ButtonCreate: TButton;
    GroupBox1: TGroupBox;
    ComboBoxType: TComboBox;
    EditLengthSet: TEdit;
    EditDefault: TEdit;
    CheckBoxPrimary: TCheckBox;
    CheckBoxBinary: TCheckBox;
    CheckBoxIndex: TCheckBox;
    CheckBoxUnique: TCheckBox;
    CheckBoxUnsigned: TCheckBox;
    CheckBoxZerofill: TCheckBox;
    CheckBoxNotNull: TCheckBox;
    CheckBoxAutoincrement: TCheckBox;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    EditTablename: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    EditDescription: TEdit;
    Label3: TLabel;
    feldListe: TListBox;
    ButtonMoveUp: TBitBtn;
    ButtonMoveDown: TBitBtn;
    ButtonAdd: TButton;
    ButtonDelete: TButton;
    ButtonChange: TButton;
    EditFieldname: TEdit;
    Bevel1: TBevel;
    Label4: TLabel;
    DBComboBox: TComboBox;
    ComboBoxTableType: TComboBox;
    Label5: TLabel;
    Bevel2: TBevel;
    procedure ButtonCancelClick(Sender: TObject);
    procedure ButtonCreateClick(Sender: TObject);
    procedure ButtonDeleteClick(Sender: TObject);
    procedure CheckBoxPrimaryClick(Sender: TObject);
    procedure CheckBoxIndexClick(Sender: TObject);
    procedure CheckBoxUniqueClick(Sender: TObject);
    procedure CheckBoxBinaryClick(Sender: TObject);
    procedure CheckBoxUnsignedClick(Sender: TObject);
    procedure CheckBoxZerofillClick(Sender: TObject);
    procedure CheckBoxNotNullClick(Sender: TObject);
    procedure CheckBoxAutoincrementClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure EditFieldnameChange(Sender: TObject);
    procedure feldListeClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure refreshfields(Sender: TObject);
    procedure ButtonChangeClick(Sender: TObject);
    procedure ButtonsChange(Sender: TObject);
    procedure ComboBoxTypeChange(Sender: TObject);
    procedure EditLengthSetChange(Sender: TObject);
    procedure EditDefaultChange(Sender: TObject);
    procedure disableControls(Sender: TObject);
    procedure enableControls(Sender: TObject);
    procedure fillControls(Sender: TObject);
    procedure checktypes(Sender: TObject);
    procedure ButtonMoveUpClick(Sender: TObject);
    procedure ButtonMoveDownClick(Sender: TObject);
  private
    index : Integer;
    { Private declarations }
  public
    { Public declarations }
  end;

type TMysqlField = record
    Name : String[64];
    Typ : Byte;
    LengthSet : String;
    Default : String;
    Primary : Boolean;
    Index : Boolean;
    Unique : Boolean;
    Binary : Boolean;
    Unsigned : Boolean;
    Zerofill : Boolean;
    NotNull : Boolean;
    AutoIncrement : Boolean;
  end;
var
  CreateTableForm: TCreateTableForm;
  fields : array of TMysqlField;


implementation

uses Main, Childwin, helpers;

{$R *.DFM}


procedure TCreateTableForm.ButtonCancelClick(Sender: TObject);
begin
  close;
end;


procedure TCreateTableForm.ButtonCreateClick(Sender: TObject);
var
  ctquery, pkstr, unstr, instr : String;
  i       : Integer;
begin
  with MainForm.ActiveMDIChild do
  begin
    // Query vorbereiten:
    ctquery := 'CREATE TABLE ' + mainform.mask(EditTablename.Text) + ' (';

    // Fields
    for i := 0 to length(fields) - 1 do
    begin
      ctquery := ctquery + mainform.mask(fields[i].Name) + ' ' +
        comboboxtype.items[fields[i].Typ];                              // Typ
      if fields[i].LengthSet <> '' then
        ctquery := ctquery  + ' (' + fields[i].LengthSet + ')';         // Length/Set
      if fields[i].Binary then
        ctquery := ctquery  + ' BINARY';                                // Binary
      if fields[i].Unsigned then
        ctquery := ctquery  + ' UNSIGNED';                              // Unsigned
      if fields[i].Zerofill then
        ctquery := ctquery  + ' ZEROFILL';                              // Zerofill
      if fields[i].Default <> '' then
        ctquery := ctquery  + ' DEFAULT ''' + fields[i].Default + '''';   // Default
      if fields[i].NotNull then
        ctquery := ctquery  + ' NOT NULL';                              // Not null
      if fields[i].AutoIncrement then
        ctquery := ctquery  + ' AUTO_INCREMENT';                         // AutoIncrement

      if i < length(fields)-1 then
        ctquery := ctquery + ', '
    end;

    // Indexes:
    pkstr := '';
    unstr := '';
    instr := '';
    for i := 0 to length(fields) - 1 do
    begin
      if fields[i].Primary then
      begin
        if pkstr <> '' then pkstr := pkstr + ',';
        pkstr := pkstr + mainform.mask(fields[i].Name);
      end;
      if fields[i].Unique then
      begin
        if unstr <> '' then unstr := unstr + ',';
        unstr := unstr + mainform.mask(fields[i].Name);
      end;
      if fields[i].Index then
      begin
        if instr <> '' then instr := instr + ',';
        instr := instr + mainform.mask(fields[i].Name);
      end;
    end;
    if pkstr <> '' then
      ctquery := ctquery + ', PRIMARY KEY(' + pkstr + ')';
    if unstr <> '' then
      ctquery := ctquery + ', UNIQUE(' + unstr + ')';
    if instr <> '' then
      ctquery := ctquery + ', INDEX(' + instr + ')';

    // Abschluss-Klammer:
    ctquery := ctquery + ') ';

    // Comment:
    if EditDescription.Text <> '' then
      ctquery := ctquery + ' COMMENT = "' + EditDescription.Text + '"';

    if (ComboBoxTableType.Text <> '') and (ComboBoxTableType.Text <> '<Automatic>') then
      ctquery := ctquery + ' TYPE = ' + ComboBoxTableType.Text;

    with TMDIChild(Application.Mainform.ActiveMDIChild) do
    begin
      ExecQuery( 'USE ' + DBComboBox.Text );
      ExecQuery( ctquery );
      ShowDBProperties(self);
      ActualTable := EditTablename.Text;
//      DBTree.Selected := ti;
//      ShowTableProperties(self);
    end;
  end;
  close;
end;



procedure TCreateTableForm.refreshfields(Sender: TObject);
var i : word;
begin
  // refresh field-list
  with feldliste do
  begin
    Items.Clear;
    if length(fields) > 0 then
      for i := 0 to length(fields)-1 do
        Items.Add(fields[i].Name);
    ItemIndex := index;
  end;
  if index = -1 then
  begin
    buttonDelete.Enabled := false;
    buttonChange.Enabled := false;
    disableControls(self);
  end else
  begin
    enableControls(self);
    fillControls(self);
  end;
  if index = FeldListe.Items.Count - 1 then
    ButtonMoveDown.Enabled := false
  else
    ButtonMoveDown.Enabled := true;
  if index = 0 then
    ButtonMoveUp.Enabled := false
  else
    ButtonMoveUp.Enabled := true;
end;

procedure TCreateTableForm.ButtonDeleteClick(Sender: TObject);
var i : Word;
begin
  // delete field
  if length(fields) > 1 then
    for i := index to length(fields)-2 do
    begin
      fields[i] := fields[i+1];
    end;
  setlength(fields, length(fields)-1);
  dec(index);
  refreshfields(self);
  EditFieldNameChange(self);
  feldListeClick(self);
  if length(fields) = 0 then
  begin
    ButtonMoveUp.Enabled := false;
    ButtonMoveDown.Enabled := false;
    ButtonCreate.Enabled := false;
  end;
end;


procedure TCreateTableForm.checktypes(Sender: TObject);
begin
  // Binary geht nur bei char und varchar
  if ComboBoxType.ItemIndex in [13,14] then
    CheckBoxBinary.Enabled := true
  else begin
    CheckBoxBinary.Checked := false;
    CheckBoxBinary.Enabled := false;
  end;

  // Unsigned geht nur bei numerischen Feldern, (nicht bei float-feldern!)
  if ComboBoxType.ItemIndex in [0,1,2,3,4] then
    CheckBoxUnsigned.Enabled := true
  else begin
    CheckBoxUnsigned.Checked := false;
    CheckBoxUnsigned.Enabled := false;
  end;

  // Zerofill geht bei numerischen und float-feldern
  if ComboBoxType.ItemIndex in [0,1,2,3,4,5,6,7] then
    CheckBoxZerofill.Enabled := true
  else begin
    CheckBoxZerofill.Checked := false;
    CheckBoxZerofill.Enabled := false;
  end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -