Я получаю сообщение об ошибке:Почему при вводе записи возникает исключение «Дублирование записи»?
[FireDAC] [Phys] [MySQL] Дублировать запись '1111' для ключа 'PRIMARY'
при попытке вставить данные в базу данных. Единственными данными в базе данных является кортеж с первичным ключом «0000», поэтому я знаю, что первичный ключ не является дубликатом другого ключа. Данные вставляются в базу данных правильно, так есть ли способ остановить появление ошибки, если первичный ключ не является дубликатом?
Я использую Delphi XE7, MySQL 6.2, FDConnection
и FDQuery
. Мой код:
FDQuery1.SQL.Clear;
FDQuery1.SQL.Add(
'Insert into Customer (' +
'CustID,' +
'Forename,' +
'Surname,' +
'Address,' +
'PostCode' +
') ' +
'Values (' +
QuotedStr(CustID) + ',' +
QuotedStr(Forename) + ',' +
QuotedStr(Surname) + ',' +
QuotedStr(Address) + ',' +
QuotedStr(Postcode) +
')'
);
FDQuery1.ExecSQL;
FDQuery1.Open;
Я подозреваю, что вызов 'FDQuery1.Open;' снова выполняет запрос 'INSERT'. Почему у вас там есть? Почему вы не используете параметры? И почему вы используете «Очистить» и «Добавить», если вы можете просто назначить «Текст» или, еще лучше, подготовить инструкцию и сохранить ее, изменяя только параметры и вызывая «ExecSQL»? – TLama
Почему вы указываете идентификатор вместо того, чтобы полагаться на функцию автоинкремента MySQL? – GolezTrol
Избавление от 'FDQuery1.Open' работало благодаря – redemon101