📄 createtable.pas
字号:
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 + -