Я пытаюсь сохранить две таблицы с отношениями master-detail в MySQL 5.6, используя Delphi XE3 и Zeos 7.0.4. Когда я делаю ApplyUpdates на главном, поле auto increment остается равным 0. Мне нужно значение auto increment, поэтому я могу связать таблицу подробностей с полем ID главной таблицы, поступающим из ApplyUpdates. Я использую ZConnection с AutoCommit = FALSE и TransactionIsolationLevel = tiReadCommitted, ZQuery с CachedUpdates = TRUE. Что мне не хватает?Как сохранить таблицы с отношениями между деталями и деталями в рамках одной транзакции?
ZQPerson.Append;
ZQEmployee.Append;
try
ZQPersonName.Value := Edit1.Text;
ZQPerson.ApplyUpdates; //Here I expected to have the auto increment value on the Id field of ZQPerson, but it returns always 0
ZQEmployeePersonID.Value := ZQPersonId.Value; //Here I'd link Employee to it's Person record
ZQEmployeeRegNo.Value := StrToInt(Edit2.Text);
ZQEmployee.ApplyUpdates;
ZConnection1.Commit; //Here I would persist both tables in a single transaction to avoid master table without details
except
ZQPerson.CancelUpdates;
ZQEmployee.CancelUpdates;
ZConnection1.Rollback; //In case of exceptions rollback everything
raise;
end;
ZQPerson.CommitUpdates;
ZQEmployee.CommitUpdates;
Мой ZSQLMonitor след это:
2013-08-29 00:01:23 cat: Execute, proto: mysql-5, msg: INSERT INTO person (Id, name) VALUES (NULL, 'Edit1') --> This is just after ZQPerson.ApplyUpdates
2013-08-29 00:01:50 cat: Execute, proto: mysql-5, msg: INSERT INTO employee (Id, RegNo, ProductId) VALUES (NULL, 1000, 0), errcode: 1452, error: Cannot add or update a child row: a foreign key constraint fails (`test`.`employee`, CONSTRAINT `FK_A6085E0491BDF8EE` FOREIGN KEY (`PersonId`) REFERENCES `person` (`Id`) --> This is just after ZQEmployee.ApplyUpdates
2013-08-29 00:02:05 cat: Execute, proto: mysql-5, msg: Native Rollback call --> Rollback after Exception on the ZQEmployee.ApplyUpdates
Проблема заключается в том, что Refresh укажет на первую запись в наборе данных и не вернет следующее значение автоматического увеличения. –
Как выбрать текущее значение автоматического увеличения, чтобы выполнить шаг 1? –
Я использую Select * из продукта для ZQProduct и Select * из категории продукта, где category.ProductId = product.Id для ZQCategory это просто, чтобы проверить мастер-деталь отношений, а не делать взаимосвязи правильный путь , –