Я использую RadStudio 10.3.2: В моем приложении VCL Windows Forms я использую компоненты базы данных Firedac для подключения к базе данных Firebird.
У меня есть 1 компонент основного запроса и 1 компонент запроса Detail, которые оба имеютстолбец идентификатора, который использует автоматически сгенерированные значения с помощью Firebird Generator. Оба компонента запроса имеют cashedUpdates для упрощения / улучшения обработки транзакций. Опция «Подробное каскадное обновление» включена для обоих компонентов запроса, а также для компонента соединения.
Когда я добавляю / редактирую подробные записи существующей основной записи, все работает правильно, потому что идентификатор основной записи неизменить больше. Но когда я создаю новую основную запись в сочетании с 1 или более подробными записями, DetailField не обновляется.
Попробовал следующие 2 примера:
Example1:
procedure TfrmMasterdetail.btnNewClick(Sender: TObject);
var
frmnewedit: Tfrmnewedit;
begin
dmMasterdetail.qryMaster.Insert;
frmnewedit := Tfrmnewedit.Create(nil);
try
if frmnewedit.ShowModal = mrOk then
begin
dmMasterdetail.FDConnection1.StartTransaction;
try
dmMasterdetail.qryMaster.ApplyUpdates;
dmMasterdetail.qryMaster.CommitUpdates;
dmMasterdetail.qryDetail.ApplyUpdates;
dmMasterdetail.qryDetail.CommitUpdates;
dmMasterdetail.FDConnection1.Commit;
except
on E: Exception do
begin
dmMasterdetail.FDConnection1.Rollback;
raise;
end;
end;
end else
begin
dmMasterdetail.qryDetail.CancelUpdates;
dmMasterdetail.qryMaster.CancelUpdates;
end;
finally
frmnewedit.Free;
end;
end;
Пример 2:
procedure TfrmMasterdetail.btnNewClick(Sender: TObject);
var
frmnewedit: Tfrmnewedit;
begin
dmMasterdetail.qryMaster.Insert;
frmnewedit := Tfrmnewedit.Create(nil);
try
if frmnewedit.ShowModal = mrOk then
begin
dmMasterdetail.FDConnection1.StartTransaction;
try
dmMasterdetail.qryMaster.ApplyUpdates;
dmMasterdetail.qryDetail.ApplyUpdates;
dmMasterdetail.qryMaster.CommitUpdates;
dmMasterdetail.qryDetail.CommitUpdates;
dmMasterdetail.FDConnection1.Commit;
except
on E: Exception do
begin
dmMasterdetail.FDConnection1.Rollback;
raise;
end;
end;
end else
begin
dmMasterdetail.qryDetail.CancelUpdates;
dmMasterdetail.qryMaster.CancelUpdates;
end;
finally
frmnewedit.Free;
end;
end;
Я заметил, что когда я фиксирую qryMaster, у qryDetail больше не будет счетчика записей. Есть ли решение этой проблемы? Единственное, о чем я могу думать, это не использовать автоматическую генерацию значения идентификатора, а вручную исправлять его при фиксации, а у меня все автоматически генерируется.
Между прочим, у формы frmnewedit есть средства управления данными, которые обрабатывают все данныеосновной записи и подробных записей.
ОБНОВЛЕНИЕ
Я также включил опцию "DetailServerCascade" и добавил TFDSchemaAdapter к компонентам запроса, но при этом я получаю ошибку«Невозможно обработать - нет родительской строки»