我想在查询中插入或追加,该查询在数据库中具有默认值的列,但是当从Delphi中包含寄存器时,该列未设置。
我想在改变我的附加和插入的子句,而不是我删除字段的默认值和null,但我不知道如果它是简单的方法。
我的表是:
创建表Id整数不为空,字段整数默认值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;
您没有指定使用的SQL Server,但正如GabrielF所说的
执行
时的insert into table (columnna, columnB) values (10, NULL)
无论数据库默认设置为10,columnB
的值都将为NULL
。
要确保字段值将默认设置,您可以使用TQuery OnNewRecord事件作为:
procedure TDataModule1.Newrecord(DataSet: TDataSet);
begin
Query1.FieldByName('FIELD').AsInteger := 10; //SET DEFAULT
end;
或者如果你想在Delphi中使用"纯"SQL(如IbExpert Script executive),你可以使用:
Query1.Sql.Text := 'Insert into table (ID) values (<value>)';
Query1.ExecSql;
在这种情况下,字段' field '中没有值,将使用默认值。