使用 Delphi 在 Firebird 中创建 table 和自动递增列
Create table and auto increment column in Firebird with Delphi
我想在 Firebird embedded 中创建 table 并设置一个自动递增的列,但我做不到。我可以创建 table,但无法设置自动递增的列。
我正在使用:
火鸟嵌入式 2.5
Delphixe3
UniDAC 组件
我的 SQL 命令:
with UniSQL1 do
begin
SQL.Text := 'Create TABLE tab1(EMP_NO EMPNO NOT NULL, '+
'FIRST_NAME "FIRSTNAME" NOT NULL, '+
'LAST_NAME "LASTNAME" NOT NULL, '+
'PHONE_EXT VARCHAR( 4) COLLATE NONE, '+
'PRIMARY KEY (EMP_NO) '+
'); '+
'CREATE GENERATOR gen_tab1_EMP_NO; '+
'SET GENERATOR gen_tab1_EMP_NO TO 0; '+
'SET TERM !! ; '+
'CREATE TRIGGER SET_EMP_NO FOR tab1 ACTIVE BEFORE INSERT POSITION 0 AS '+
'BEGIN '+
'if (new.emp_no is null) then '+
'new.emp_no = gen_id(gen_tab1_EMP_NO, 1); '+
'END !!'+
'SET TERM ; !!';
try
Execute;
ShowMessage('Table Created');
except
ShowMessage('Table Not Created');
end;
end;
试试这个,看看哪里发生错误。您也可以尝试保存您的脚本并在 IBExpert 或其他工具上执行并查看 运行 是否正确。
with UniSQL1 do
begin
SQL.Clear;
SQL.Add('Create TABLE tab1(');
SQL.Add( EMP_NO EMPNO NOT NULL,');
SQL.Add(' FIRST_NAME "FIRSTNAME" NOT NULL,');
SQL.Add(' LAST_NAME "LASTNAME" NOT NULL,');
SQL.Add(' PHONE_EXT VARCHAR(4) COLLATE NONE,');
SQL.Add(' PRIMARY KEY (EMP_NO)');
SQL.Add(')');
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 1:' + sLineBreak + E.Message);
end;
SQL.Clear;
SQL.Add('CREATE GENERATOR gen_tab1_EMP_NO;');
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 2:' + sLineBreak + E.Message);
end;
SQL.Clear;
SQL.Add('SET GENERATOR gen_tab1_EMP_NO TO 0;');
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 3:' + sLineBreak + E.Message);
end;
SQL.Clear;
SQL.Add('CREATE TRIGGER SET_EMP_NO FOR tab1 ACTIVE BEFORE INSERT POSITION 0 AS');
SQL.Add('BEGIN');
SQL.Add(' if (new.emp_no is null) then');
SQL.Add(' new.emp_no = gen_id(gen_tab1_EMP_NO, 1);');
SQL.Add('END'
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 4:' + sLineBreak + E.Message);
end;
end;
我想在 Firebird embedded 中创建 table 并设置一个自动递增的列,但我做不到。我可以创建 table,但无法设置自动递增的列。
我正在使用:
火鸟嵌入式 2.5
Delphixe3
UniDAC 组件
我的 SQL 命令:
with UniSQL1 do
begin
SQL.Text := 'Create TABLE tab1(EMP_NO EMPNO NOT NULL, '+
'FIRST_NAME "FIRSTNAME" NOT NULL, '+
'LAST_NAME "LASTNAME" NOT NULL, '+
'PHONE_EXT VARCHAR( 4) COLLATE NONE, '+
'PRIMARY KEY (EMP_NO) '+
'); '+
'CREATE GENERATOR gen_tab1_EMP_NO; '+
'SET GENERATOR gen_tab1_EMP_NO TO 0; '+
'SET TERM !! ; '+
'CREATE TRIGGER SET_EMP_NO FOR tab1 ACTIVE BEFORE INSERT POSITION 0 AS '+
'BEGIN '+
'if (new.emp_no is null) then '+
'new.emp_no = gen_id(gen_tab1_EMP_NO, 1); '+
'END !!'+
'SET TERM ; !!';
try
Execute;
ShowMessage('Table Created');
except
ShowMessage('Table Not Created');
end;
end;
试试这个,看看哪里发生错误。您也可以尝试保存您的脚本并在 IBExpert 或其他工具上执行并查看 运行 是否正确。
with UniSQL1 do
begin
SQL.Clear;
SQL.Add('Create TABLE tab1(');
SQL.Add( EMP_NO EMPNO NOT NULL,');
SQL.Add(' FIRST_NAME "FIRSTNAME" NOT NULL,');
SQL.Add(' LAST_NAME "LASTNAME" NOT NULL,');
SQL.Add(' PHONE_EXT VARCHAR(4) COLLATE NONE,');
SQL.Add(' PRIMARY KEY (EMP_NO)');
SQL.Add(')');
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 1:' + sLineBreak + E.Message);
end;
SQL.Clear;
SQL.Add('CREATE GENERATOR gen_tab1_EMP_NO;');
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 2:' + sLineBreak + E.Message);
end;
SQL.Clear;
SQL.Add('SET GENERATOR gen_tab1_EMP_NO TO 0;');
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 3:' + sLineBreak + E.Message);
end;
SQL.Clear;
SQL.Add('CREATE TRIGGER SET_EMP_NO FOR tab1 ACTIVE BEFORE INSERT POSITION 0 AS');
SQL.Add('BEGIN');
SQL.Add(' if (new.emp_no is null) then');
SQL.Add(' new.emp_no = gen_id(gen_tab1_EMP_NO, 1);');
SQL.Add('END'
try
Execute;
except
on E:Exception do
raise Exception.Create('ERROR 4:' + sLineBreak + E.Message);
end;
end;