Angenommen du hast eine QueryXX mit "SELECT * FROM Tabelle1" und zeigst die Daten in einem DBGrid an.
Dann machst du einen
SQL-Update: 'UPDATE Tabelle1 SET Spalte1 = ''Wert'' WHERE Spalte2 = ''Test'''
Und nun möchtest in der QueryXX irgendwelche Daten ändern.
Dann erzeugt die
VCL im Hintergrund eine UPDATE-Anweisung nach diesem Schema:
SQL-Code:
UPDATE Tabelle1 SET Spalte1 = @neuerWert1 WHERE Spalte2 = @neuerWert2
WHERE Spalte1=@alterWert1 AND Spalte2=@alterWert2
Da es aber die alten Werte nicht mehr in der Tabelle gibt, liefert die UPDATE-Anweisung
als Ergebnis, dass nichts geändert wurde. (RecordsAffected=0 sollte aber 1 sein)
Somit kommt die
VCL zu dem Schluss, dass ein anderer User die Daten geändert hat.
In Wirklichkeit war es dein Programm selber, dass an der QueryXX vorbei geändert hat.
Abhilfe:
Nach deinem
SQL-Update entweder QueryXX.Close gefolgt von QueryXX.Open oder nur QueryXX.Refresh (schneller; funkt aber nicht immer) ausführen.