Firedac VCL - Hinzufügen einer Master -Datensatz -Brennungsdetail -Tabelle Anzeige
Posted: 23 Apr 2025, 10:28
Kontext:
Ich habe auch versucht, Mastersource auf nullptr zurückzusetzen, und es führt häufig dazu, dass Daten verschwinden oder die Synchronisation vollständig abstürzen.) ohne das verknüpfte Detaildisplay zu brechen ()?
- Ich verwende c ++ Builder vcl mit FireDac .
- Ich habe zwei Tabellen: Recette (Recipe) und Ladung (last). Detailtabelle mit Recette durch das Feld ID_RECETTE verlinkt. DataSources und dbgrids, die zur Anzeige der Werte verwendet werden, befinden sich in derselben Form. Rufen Sie append () in der Tabelle Recette auf, um ein neues Rezept zu erstellen. Die verknüpfte Gebühren dataset löscht visuell oder synchronisiert . />"Dataset not in edit or insert mode"
I've tried:
Temporarily disabling MasterSource, - Using DisableControls() / EnableControls () ,
- Aufrufen von socalate () nach dem Posten,
- Erzwingen Sie eine Refresh () im Detail -Datensatz (detailliertes Datensatz (),
Code: Select all
Chargement
Code: Select all
///"new" button click
void __fastcall TFMenuChargement::btRecetteClick(TObject* Sender)
{
New(dsRecette, GroupBox4);
}
///function to create the record
void __fastcall TFMenuChargement::New(TDataSource *ds, TGroupBox *gb)
{
ds->DataSet->Open();
ds->DataSet->Append();
gb->Caption = "Nouveau";
gb->SetFocus();
}
///"validate" button click
void __fastcall TFMenuChargement::btRecValiderClick(TObject* Sender)
{
//TFDTable* tableChargement = static_cast(dsChargement->DataSet);
//TFDTable* tableRecette = static_cast(dsRecette->DataSet);
//int lastId = tableRecette->FieldByName("UID_RECETTE")->AsInteger;
//tableChargement->MasterSource = nullptr;
//tableChargement->DisableControls();
Validate(dsRecette);
//tableRecette->Locate("UID_RECETTE", lastId, TLocateOptions());
//tableChargement->MasterSource = dsRecette;
//tableChargement->EnableControls();
//tableChargement->Refresh();
}
///function to post changes
void __fastcall TFMenuChargement::Validate(TDataSource *ds)
{
ds->DataSet->Open();
try {
ds->DataSet->Post();
} catch (const EDatabaseError &e) {
return;
} catch (const Exception &E) {
ShowMessage("Erreur lors de l'insertion : " + E.Message);
return;
}
ShowMessage("Modifications enregistrées");
}
Code: Select all
Recette
Code: Select all
Chargement