Лучше всего поэкспериментировать с этим, используя новую таблицу в вашей базе данных и минимальный новый проект Delphi.
Обновление: см. Ниже о базе данных DDL и DFM формы.
Вам необходимо пометить поле идентификатора как первичный ключ в вашей базе данных.
После того, как вы добавилиFDConnection и FDTable для вашего проекта, выберите TableName FDTable из выпадающего списка.Затем щелкните в поле IndexName таблицы FDTable, и вы найдете автоматически названный индекс в первичном ключе таблицы.Просто выберите его так, чтобы IndexName принял его значение.Вот и все, что нужно сделать.
Для таблицы, созданной с использованием приведенного ниже DDL, свойство IndexName таблицы FDTable выглядит как sqlite_autoindex_test_1
Если вы затем щелкнете по FDTable при нажатии dbl и используетевсплывающий редактор полей для настройки постоянных полей в FDTable, а затем выбора поля идентификатора, вы должны обнаружить, что если вы изучите его ProviderFlags, они должны включать pfInKey
, что говорит FireDAC об использовании поля в качестве основного поля таблицыключ при генерации SQL для его обновления, вставки и т. д.
Вы должны обнаружить, что для поля обязательного поля идентификатора автоматически установлено значение True, кстати.
Если вы хотите указать идентификаторЗначение поля самостоятельно при добавлении новой записи, используйте таблицу OnNewRecord
, чтобы сгенерировать значение идентификатора и присвоить его полю.
DDL для test
База данных Sqlite
create table test(
id int not null primary key,
AName nchar(12)
)
ProjectЭкстракт 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