Ich arbeite an einem kleinen Modul für meine Applikation, die es dem User erlauben soll, kleine
SQL-Statements (nur SELECT) zu schreiben um sich eigene Auswertungen anzeigen zu lassen.
Nach dem TQuery.Open werden die Ergebnisse dann in einem TDBGrid angezeigt. Das Problem ist, das der User einfach Insert oder Update-Befehle eigeben kann, und so die Daten manipuliert.
Nachdem z.B. ein INSERT-Statement mit open ausgefüht wurde, wird wie zu erwarten eine
Exception ausgefüht (Keine Daten in der Datenbank).
Aber mit dem nächsten ExecSQL (welches ich im OnClose des Formulars aufrufe), wird das zuvor fehlerhaft ausgeführte
SQL-Statement ausgeführt. (und die Daten in die Datenbank eingetragen).
Bei meinen Direkt-Komponenten (DevArt) hat mir folgende Lösung geholfen:
Delphi-Quellcode:
try
query.Open;
except
on e :
Exception do
begin
query.Transaction.Rollback;
MessageDLG(e.
Message,mtError,[mbOK],0);
end;
end;
In der TQuery gibt es den Punkt Transaction aber nicht. Kennt Jemand von euch vielleicht das Problem?