我想将非空的非auto-inc整数用作主键,但是我无法在设计时使用Firedac做到这一点。 TIntegerfield
没有任何参数可以让我将其设为主要参数。 TFDTable
也没有参数,我可以从所有可用字段中选择主要字段。
我知道可能可以通过代码完成并将其与设计时间表结合起来,但这超出了在设计时全部完成设计的全部目的。
以前,我的表中确实有一个自动增量ID,并且该ID自动设置为主键。我现在删除了此字段,因为我需要另一个整数作为主字段。
另外,我在Embacadero官方网站上也找不到有关主键和TFDTable
的信息。
答案 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)
)