by Anonymous » 23 Apr 2025, 10:28
Kontext:
- 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 (),
… aber entweder der Beitrag () funktioniert nicht, die Anzeige kehrt nicht zurück oder nichts passiert.
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");
}
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 (
)?
Kontext:
[list]
[*] Ich verwende [b] c ++ Builder vcl [/b] mit [b] FireDac [/b].
[*] Ich habe zwei Tabellen: Recette (Recipe) und Ladung (last). [b] Detailtabelle [/b] 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 [b] löscht visuell [/b] oder [b] synchronisiert [/b]. />"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]Chargement[/code]),
[/list]
… aber entweder der Beitrag () funktioniert nicht, die Anzeige kehrt nicht zurück oder nichts passiert.[code]///"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]
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.[code]Recette[/code]) [b] ohne das verknüpfte Detaildisplay [/b] zu brechen ([code]Chargement[/code])?