如何在设计时Firedac中设置表字段的主要字段?

时间:2019-02-15 09:59:14

标签: sqlite delphi firedac delphi-10.2-tokyo

我想将非空的非auto-inc整数用作主键,但是我无法在设计时使用Firedac做到这一点。 TIntegerfield没有任何参数可以让我将其设为主要参数。 TFDTable也没有参数,我可以从所有可用字段中选择主要字段。

我知道可能可以通过代码完成并将其与设计时间表结合起来,但这超出了在设计时全部完成设计的全部目的。

以前,我的表中确实有一个自动增量ID,并且该ID自动设置为主键。我现在删除了此字段,因为我需要另一个整数作为主字段。 另外,我在Embacadero官方网站上也找不到有关主键和TFDTable的信息。

1 个答案:

答案 0 :(得分:2)

最好使用数据库中的新表和最少的新Delphi项目进行试验。

更新:有关数据库DDL和Form的DFM,请参见下文。

您需要在数据库中将ID字段标记为主键。

在将FDConnection和FDTable添加到项目后,从下拉列表中选择FDTable的TableName。然后,单击FDTable的IndexName字段,您应该在表的主键上找到一个自动命名的索引。只需选择它,以便IndexName取其值。这就是全部。

对于使用下面的DDL创建的表,FDTable的IndexName属性显示为sqlite_autoindex_test_1

如果您然后双击FDTable,并使用弹出的字段编辑器在FDTable上设置持久字段,然后选择ID字段,则应该发现,如果您检查其ProviderFlags,它们应包括{{1 }},它告诉FireDAC在生成SQL更新字段,进行插入等操作时,将字段用作表的主键。

您应该发现ID字段的Required字段已自动设为True,顺便说一句。

如果要在添加新记录时自行提供ID字段的值,请使用表的pfInKey生成ID值并将其分配给该字段。

OnNewRecord Sqlite数据库的DDL

test

项目DFM提取

create table test(
id int not null primary key,
AName nchar(12)
)