我想在查询中插入或追加,该查询在数据库中具有默认值的列,但是当Delphi中包含寄存器时,不会设置此列。
我想改变我的附加和插入的条款,而是删除具有默认值的字段并且为空,但我不知道这是否是简单的方法。
我的表是:
CREATE TABLE TABLETEST( ID INTEGER NOT NULL, FIELD INTEGER DEFAULT 10 );
我的Delphi代码是否正在插入正确的值:
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM TableTest order by ID');
Query1.Open;
Query1.Last;
ID := Query1.FieldByName('ID').AsInteger;
inc(ID);
Query1.Insert;
Query1.FieldByName('ID').AsInteger := ID;
Query1.Post;
inc(ID);
Query1.Append;
Query1.FieldByName('ID').AsInteger := ID;
Query1.Post;
Query1.ApplyUpdates;
Query1.CommitUpdates;
** TQuery中的Query1
答案 0 :(得分:0)
您尚未指定使用的SQL Server,但正如GabrielF所说
执行
时的Firebird
无论在数据库中默认设置为10,插入表(columnA,columnB)值(10,NULL)
columnB
值都为NULL
。
为确保默认设置字段值,您可以将TQuery OnNewRecord 事件用作:
procedure TDataModule1.Newrecord(DataSet: TDataSet);
begin
Query1.FieldByName('FIELD').AsInteger := 10; //SET DEFAULT
end;
或者,如果您想在Delphi中使用“纯”SQL(如在IbExpert脚本执行程序中),您可以使用:
Query1.Sql.Text := 'Insert into table (ID) values (<value>)';
Query1.ExecSql;
在这种情况下,字段'FIELD'中没有值,将使用默认值。