当字段在TQuery中具有默认值时插入或追加寄存器

时间:2015-09-02 20:22:32

标签: sql delphi insert append insert-update

我想在查询中插入或追加,该查询在数据库中具有默认值的列,但是当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

1 个答案:

答案 0 :(得分:0)

您尚未指定使用的SQL Server,但正如GabrielF所说

执行

时的Firebird

  

插入表(columnA,columnB)值(10,NULL)

无论在数据库中默认设置为10,

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'中没有值,将使用默认值。