Il est préférable d'expérimenter en utilisant une nouvelle table dans votre base de données et un nouveau projet Delphi minimal.
Mise à jour : Voir ci-dessous le DDL de la base de données et le DFM du formulaire.
Votre champ ID doit être considéré comme une clé primaire dans votre base de données.
Après avoir ajouté une FDConnection et une FDTable à votre projet, sélectionnez le Nom de la Table de la FDTable dans la liste déroulante. Cliquez ensuite dans le champ IndexName de la table FDTable et vous devriez trouver un index nommé automatiquement sur la clé primaire de la table. Il suffit de le sélectionner pour que l'IndexName prenne sa valeur. C'est tout ce qu'il y a à faire.
Pour la table créée à l'aide de la DDL ci-dessous, la propriété IndexName de la table FDTable se présente comme suit sqlite_autoindex_test_1
Si vous double-cliquez ensuite sur la FDTable et utilisez l'éditeur de champs pour configurer des champs persistants dans la FDTable, puis sélectionnez votre champ ID, vous devriez constater que si vous examinez ses ProviderFlags, ils devraient inclure les éléments suivants pfInKey
qui indique à FireDAC d'utiliser le champ comme clé primaire de la table lorsqu'il génère le code SQL pour la mettre à jour, l'insérer, etc.
Vous devriez constater que le champ Requis du champ ID est automatiquement défini sur True, btw.
Si vous souhaitez fournir vous-même la valeur du champ ID lors de l'ajout d'un nouvel enregistrement, utilisez le champ OnNewRecord
pour générer la valeur de l'ID et l'attribuer au champ.
DDL pour test
Base de données Sqlite
create table test(
id int not null primary key,
AName nchar(12)
)
Extrait du projet 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