【发布时间】:2026-02-05 02:00:02
【问题描述】:
我想在查询中插入或追加,该查询在数据库中有具有默认值的列,但是当 Delphi 包含寄存器时未设置此列。
我想改变我的附加和插入子句,而是删除具有默认值且为空的字段,但我不知道这是否是简单的方法。
我的桌子是:
创建表 TABLETEST ( 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;
** TQuery 中的 Query1
【问题讨论】:
-
当我在查询中进行插入或追加,并进行发布时。
-
register,我猜你的意思是auto-incremented value。在这种情况下,您不会在代码中分配一个;INSERT完成后,数据库将为您分配它。根据您使用的 RDBMS,您通常可以在完成后从数据库中检索值,但我无法提供有关如何执行此操作的建议,因为您没有包含您正在使用的 DBMS 的标签使用。 -
@KenWhite 从他的评论中我相信他说“注册”是指填写插入或附加后跟一个帖子,在这种情况下,他填写“ID”字段,而不是“FIELD”字段,但收到 NULLS 而不是默认值 10
-
@JasperSchellingerhout:如果这就是他的意思,那么这就是问题应该问的。但是,我不确定,而且我不会花时间回答一个问题,只是为了被告知这不是本意。 (无论哪种方式,我都可以很容易地回答这个问题,但要等到发帖人明确提出要问的问题。)
-
也许这取决于数据库,但是如果插入查询,Firebird 会将
NULL分配给具有默认值的字段(请注意insert和append在SQL中是相同的,AFAIK ) 明确表示,例如insert into table (columnA, columnB) values (10, NULL)。我不知道TQuery的行为如何,但这可能就是为什么您没有在FIELD中获得预期的默认值。
标签: sql delphi insert append insert-update