gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:38:11 28 4
gpt4 key购买 nike

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

我知道可能可以在代码中完成它并将其与我的设计时间表结合起来,但这超出了在设计时完成这一切的整个目的。

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

最佳答案

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

更新:数据库DDL和Form的DFM见下文。

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

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

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

如果您双击 FDTable 并使用弹出的字段编辑器在 FDTable 上设置持久字段,然后选择您的 ID 字段,您应该会发现,如果您检查其 ProviderFlags,它们应该包含 pfInKey,它告诉 FireDAC 在生成 SQL 来更新表、执行插入等时使用该字段作为表的主键。

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

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

用于测试 Sqlite 数据库的 DDL

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

项目 DFM 摘录

object Form2: TForm2
object DBGrid1: TDBGrid
DataSource = DataSource1
end
object DBNavigator1: TDBNavigator
DataSource = DataSource1
end
object FDConnection1: TFDConnection
Params.Strings = (
'Database=D:\aaad7\sqlite\MADB1.sqlite'
'DriverID=SQLite')
Connected = True
LoginPrompt = False
end
object DataSource1: TDataSource
DataSet = FDTable1
end
object FDTable1: TFDTable
IndexName = 'sqlite_autoindex_test_1'
Connection = FDConnection1
UpdateOptions.UpdateTableName = 'test'
TableName = 'test'
object FDTable1id: TIntegerField
FieldName = 'id'
Origin = 'id'
ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
Required = True
end
object FDTable1AName: TWideStringField
FieldName = 'AName'
Origin = 'AName'
FixedChar = True
Size = 12
end
end
end

关于sqlite - 如何在设计时 Firedac 中设置表字段主要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54706777/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com