Habe Probleme mit TTabel.Post. Beim ausführen des "Post" Befehls auf eine
mySQL Tabelle (mit und ohne ZEOS 6.5.1 Komponente) wird die Felhlermeldung : "Tabelle weder im Einfüge- noch Editier- Modus!". Komme einfach nicht mehr weiter und brauche dringend Hilfe. (evtl krz. Beschreibung welche Befehle man zum editieren auf jeden Fall benutzen müsste (.edit, .commit, .update, .updateRecords?????)
Ich habe zwar gefunden wo genau dieses Problem verursacht wird, weiss aber immer noch nicht warum und wie ich es beheben könnte.
Das formular hat 3 tabellen die miteinander in der Tabellen-Eigenschaften über Master-Detail verknüpft sind. Tabelle1 ist Master Tabelle vom Tabelle2. Tabelle3 ist wiederum die Detail-Tabelle vom Tabelle2.
Nun zum besseren Fehlerbeschreibung : Tabelle1, Tabelle2, Tabelle3 sind alle active, also Status = Open. Wird es im Tabelle 3 eine Änderung vorgenommen so wird im "After.Post" eigenschaft diese änderung an Tabelle2 übergeben wo dann der Fahler passiert.
Delphi-Quellcode:
procedure TFrm_01.BTN_1Click(Sender: TObject);
begin
Tabelle_3.Edit;
Tabelle_3.FieldByName('Zahl_1').Value := 3;
Tabelle_3.FieldByName('Zahl_2').Value := 5;
Tabelle_3.FieldByName('Zahl_3').Value := 11;
if MessageBox(0, 'Möchten Sie die Änderungen wirklich übernehmen?', 'WARNUNG', MB_YESNO) = IDYES then
Tabelle_3.Post
else Tabelle_3.Cancel;
end;
procedure TFrm_01.Tabelle_3AfterPost(DataSet: TDataSet);
var Summe_1, Summe_2, Summe_3 : integer;
begin
Summe_1 := 0;
Summe_2 := 0;
Summe_3 := 0;
with Tabelle_3 do
begin
first;
while not EOF do
begin
Summe_1 := Summe_1 + FieldByName('Zahl_1').AsInteger;
Summe_2 := Summe_2 + FieldByName('Zahl_2').AsInteger;
Summe_3 := Summe_3 + FieldByName('Zahl_3').AsInteger;
next;
end;
end;
Tabelle_2.Edit;
// Tabelle 2 ist hier in Tabelle_2.State = dsEdit - soweit noch alles OK.
Tabelle_2.FieldByName('DetailSumme_1').asVariant := Summe_1;
// alles noch im grünen Bereich. 1.Wertzuweisung wird noch übernommen
// Hier (nach dem 1. Wertzuweisung) aber passiert der Fehler..
// Hier springt die Tabelle 2 unerwünscht und für mich unerklärlich auf Tabelle_2.State = dsBrowse
Tabelle_2.FieldByName('DetailSumme_2').asVariant := Summe_2;
Tabelle_2.FieldByName('DetailSumme_3').asVariant := Summe_3;
// diese beiden Wertzuweisungen werden nicht mehr übernommen da Tabelle_3 im dsBrowse Status ist.
Tabelle_2.Post;
// während der post ausführung kommt dann die Fehlermeldung "Tabelle_2 weder in EDIT- noch in INSERT- Modus !"
end;