📄 di_createnewtable.pas
字号:
DataTypes.Add('numeric');
DataTypes.Add('nvarchar');
DataTypes.Add('real');
DataTypes.Add('smalldatetime');
DataTypes.Add('smallint');
DataTypes.Add('smallmoney');
DataTypes.Add('text');
DataTypes.Add('timestamp');
DataTypes.Add('tinyint');
DataTypes.Add('uniqueidentifier');
DataTypes.Add('varbinary');
DataTypes.Add('varchar');
if DataTypes.IndexOf(Trim(FieldByName('FieldType').AsString)) <> -1 then
CreateTableStringFieldType := Trim(FieldByName('FieldType').AsString)
else
begin
ShowMessage('字段类型不合法!');
DataTypes.Free;
Exit;
end;
DataTypes.Free;
//字段长度=======================================
DataTypes := TStringList.Create;
DataTypes.Add('binary');
DataTypes.Add('char');
DataTypes.Add('decimal');
DataTypes.Add('nchar');
DataTypes.Add('numeric');
DataTypes.Add('nvarchar');
DataTypes.Add('varbinary');
DataTypes.Add('varchar');
if Trim(FieldByName('FieldWidth').AsString) = '' then
CreateTableStringFieldWidth := ''
else if DataTypes.IndexOf(Trim(FieldByName('FieldType').AsString)) <> -1
then
CreateTableStringFieldWidth := '(' +
IntToStr(FieldByName('FieldWidth').AsInteger) + ')'
else
begin
ShowMessage('只有binary,char,decimal,nchar,numeric,nvarchar,varbinary,varchar类型字段可以定义长度!');
DataTypes.Free;
Exit;
end;
DataTypes.Free;
//是否为空=======================================
if Trim(FieldByName('AllowNulls').AsString) = 'n' then
CreateTableStringAllowNulls := 'Not Null'
else if (Trim(FieldByName('AllowNulls').AsString) = 'y') or
(Trim(FieldByName('AllowNulls').AsString) = '') then
begin
if Trim(FieldByName('FieldType').AsString) = 'bit' then
begin
ShowMessage('bit字段不能为空!');
Exit
end
else
CreateTableStringAllowNulls := 'Null'
end
else
begin
ShowMessage('标志是否为空的字符违法!');
Exit
end;
//默认值=========================================
DataTypes := TStringList.Create;
DataTypes.Add('char');
DataTypes.Add('datetime');
DataTypes.Add('decimal');
DataTypes.Add('float');
DataTypes.Add('int');
DataTypes.Add('money');
DataTypes.Add('nchar');
DataTypes.Add('numeric');
DataTypes.Add('nvarchar');
DataTypes.Add('real');
DataTypes.Add('smalldatetime');
DataTypes.Add('smallint');
DataTypes.Add('smallmoney');
DataTypes.Add('tinyint');
DataTypes.Add('varchar');
if Trim(FieldByName('DefauValue').AsString) = '' then
CreateTableStringDefauValue := ''
else if DataTypes.IndexOf(Trim(FieldByName('FieldType').AsString)) = -1
then
begin
ShowMessage('只有char,datetime,decimal,float,int,money,nchar,numeric,nvarchar,real,smalldatetime,smallint,smallmoney,tinyint,varchar类型字段可以有默认值!');
DataTypes.Free;
Exit;
end
else if Trim(FieldByName('AllowNulls').AsString) = 'y' then
begin
ShowMessage('允许为空的字段不能有默认值!');
DataTypes.Free;
Exit;
end
else
CreateTableStringDefauValue := 'Default ' + '(' +
Trim(FieldByName('DefauValue').AsString) + ')';
DataTypes.Free;
//自动增长=======================================
DataTypes := TStringList.Create;
DataTypes.Add('decimal');
DataTypes.Add('int');
DataTypes.Add('numeric');
DataTypes.Add('smallint');
DataTypes.Add('tinyint');
if (Trim(FieldByName('IfIdentity').AsString) = 'n') or
(Trim(FieldByName('IfIdentity').AsString) = '') then
CreateTableStringIfIdentity := ''
else if Trim(FieldByName('IfIdentity').AsString) = 'y' then
begin
if Trim(FieldByName('AllowNulls').AsString) = 'y' then
begin
ShowMessage('允许为空的字段不能设置自动增长值!');
DataTypes.Free;
Exit;
end;
if DataTypes.IndexOf(Trim(FieldByName('FieldType').AsString)) <> -1 then
CreateTableStringIfIdentity := 'Identity (1,1)'
else
begin
ShowMessage('只有decimal,int,numeric,smallint,tinyint类型字段能设置自动增长值,请修改!');
DataTypes.Free;
Exit;
end;
end
else
begin
ShowMessage('标志是否自动增长的字符违法!');
DataTypes.Free;
Exit;
end;
DataTypes.Free;
//是否主键=======================================
if (Trim(FieldByName('PrimaryKey').AsString) = 'n') or
(Trim(FieldByName('PrimaryKey').AsString) = '') then
CreateTablePrimaryKey := ''
else if Trim(FieldByName('PrimaryKey').AsString) = 'y' then
begin
if Trim(FieldByName('AllowNulls').AsString) = 'n' then
begin
CreateTablePrimaryKey := 'Primary Key';
PrimaryKeyNumber := PrimaryKeyNumber + 1;
if PrimaryKeyNumber > 1 then
begin
ShowMessage('只能设置一个主键');
PrimaryKeyNumber := 0;
Exit;
end;
end
else
begin
ShowMessage('允许为空的字段不能设置主键!');
Exit;
end;
end
else
begin
ShowMessage('标志是否主键的字符违法!');
Exit;
end;
//合成SQL语句====================================
if DI_DfmDataModule1.CreateDTableADOQuery.RecNo = 1 then
CreateTableString := CreateTableStringFieldNameE + ' ' +
CreateTableStringFieldType + ' ' + CreateTableStringFieldWidth + ' ' +
CreateTableStringDefauValue + ' ' + CreateTableStringAllowNulls + ' '
+
CreateTableStringIfIdentity + ' ' + CreateTablePrimaryKey
else
CreateTableString := CreateTableString + ',' +
CreateTableStringFieldNameE + ' ' + CreateTableStringFieldType + ' ' +
CreateTableStringFieldWidth + ' ' + CreateTableStringDefauValue + ' '
+
CreateTableStringAllowNulls + ' ' + CreateTableStringIfIdentity + ' '
+
CreateTablePrimaryKey;
Next;
end;
end;
//创建T表===================================
with DI_DfmDataModule1.CreateTTableADOQuery do
begin
Close;
Sql.Clear;
Sql.Add('Create Table ' + 'T' + NewTableName + ' ' + '(' + CreateTableString
+ ')');
//ShowMessage(Sql.Text);
try
ExecSQL;
except
ShowMessage('不能创建该表,请检查输入的结构信息是否错误!');
Exit;
end;
end;
DI_DfmDataModule1.CreateTTableADOQuery.Close;
CreateTableSuceed := True;
Close;
end;
//回车换行======================================================================
procedure TDI_DfmCreateNewTable.DBGrid1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key = VK_RETURN then
begin
if dbgrid1.SelectedIndex = dbgrid1.Columns.Count - 1 then
begin
dbgrid1.SelectedIndex := 0;
if dbgrid1.DataSource.DataSet <> nil then
with dbgrid1.DataSource.DataSet do
begin
Next;
if EOF and CanModify then
Append;
end;
end
else
dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -