Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wurde? (https://www.delphipraxis.net/26794-wie-feststellen-ob-sql-befehl-erfolgreich-ausgefuehrt-wurde.html)

daywalker-dj-k 29. Jul 2004 14:21


Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wurde?
 
hallo,
wie kann ich herausbekommen, ob ein sql-befehl erfolgreich ausgeführt wurde? also die befehle sehen etwa so aus:

Query1.SQL.Add('INSERT INTO artikel ...);
Query1.ExecSQL;

Ich könnte natürlich nun mit SELECT abfragen ob der jeweilige artikel hinzugefügt worden ist (anhand des primärschlüssels), aber das wäre nun ziemlich umständlich.

danke
gruß
thorsten

Mario 29. Jul 2004 14:35

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Wenn ein SQL nicht ausgeführt wurde, kommt doch eine Exception, oder? Reicht das nicht oder was meinst Du mit "nicht ausgeführt".

daywalker-dj-k 29. Jul 2004 14:41

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Mhh .. ne Exception kam bei mir noch nie. Einige Probleme hatte ich aber schon. Kommt die wirklich?

Dann muss es wohl an meinem Quelltest liegen. :-)

Mario 29. Jul 2004 14:47

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Die Exception kommen, wenn Dein SQL Syntax-Fehler hat, oder Du zum Beispiel Primärschlüssel verletzt.

daywalker-dj-k 29. Jul 2004 15:03

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
hallo,
also die synthax bei mir ist richtig. ich möchte nur gerne wissen, ob beim ausführen ein fehler auftrat, z.b. wenn die netzwerkverbindung während des ausführens des befehls abbricht o.Ä..

gruß
thorsten

fluxury 29. Jul 2004 15:26

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Hallo @daywalker-dj-k


würde dies nicht auch einen Fehler erzeugen, den man abprüfen kann ...

Mario 29. Jul 2004 15:30

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Normalerweise schon, die Frage ist hier nur wieder, wie man jetzt reagieren soll? Da die Verbindung weg ist, kann man auch nix mehr rückgängig machen.

Tyrael Y. 29. Jul 2004 15:56

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Zitat:

ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.
Du weisst ja wieviele Datesätze du mit der Anweisung ändern möchtest.


Für Netzwerksverbindungsfehler oder andere Exceptions empfehle Transaktionen:

Delphi-Quellcode:
  LQuery.Connection.BeginTrans;
  try
    LQuery.SQL.Text := 'IRGENDEIN STATEMENT';
    LQuery.ExecSQL;

    LQuery.CommitTrans;
  except
    LQuery.Connection.RollbackTrans;
  end;
Das sollte helfen, denk ich.


mfg

Jelly 30. Jul 2004 08:48

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Zitat:

Zitat von Mario
Da die Verbindung weg ist, kann man auch nix mehr rückgängig machen.

Doch, wenn du mit Transactions schaffst, kannst du bei einer Exception ein Rollback senden.

Gruß,
Tom

Tyrael Y. 30. Jul 2004 12:26

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Und hat es geholfen?

mirko2000 30. Jul 2004 12:39

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Zitat:

Zitat von Jelly
Zitat:

Zitat von Mario
Da die Verbindung weg ist, kann man auch nix mehr rückgängig machen.

Doch, wenn du mit Transactions schaffst, kannst du bei einer Exception ein Rollback senden.

Gruß,
Tom

Ich würd eher mal sagen, wenn die Verbindung unterbrochen wurde kann man auch kein Rollback-Befehl mehr senden. Aber wenn man mit Transaktionen arbeitet werden die Änderungen ja erst endgültig übernommen wenn man sie mit COMMIT abschließt. Wenn man das nicht macht wird an der Datenbank auch nichts geändert!

Tyrael Y. 30. Jul 2004 12:50

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Das RollbackTrans wäre je auch für andere Exceptions.

Wenn die Verbindung abbricht bevor ein CommitTrans erfolgt ist, wird auch keine
Änderung an der Datenbank durchgeführt.

Die Datenbank erzeugt temporäre Tabellen beim Befehl BeginTrans und führt die folgenden Anweisungen nur in diesen temporären Tabellen aus.

Erst ein CommitTrans führt dazu das der Inhalt der temporären Tabellen in die eigentlichen Tabellen übertragen wird.

Kommt kein CommitTrans wird die Datenbank nicht verändert.

HaJo 30. Jul 2004 14:01

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Hallo zusammen,

innerhalb von Delphi gibt es seit jeher den SQL-Monitor. Damit geht so etwas :-)

Gruß
Jochen

DataCool 31. Jul 2004 00:19

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Hi,

zurück zur Hauptfrage, wenn Du ein SQL-Statement ausführst, dann kannst Du über die Eigenschaft RowsAffected herausfinden ob Dein Statement erfolgreich war.

Terminator 31. Jul 2004 09:53

Re: Wie feststellen ob SQL-Befehl erfolgreich ausgeführt wur
 
Zitat:

Zitat von Tyrael Y.
Erst ein CommitTrans führt dazu das der Inhalt der temporären Tabellen in die eigentlichen Tabellen übertragen wird.
Kommt kein CommitTrans wird die Datenbank nicht verändert.

Hät zu dem Thema noch ne Frage/Anmerkung:

Angenommen die Verbindung bricht vor dem Commit ab.
Die DB wird zwar net verändert, aber die Temp-Tabelle bleibt solange bis die DB Sie mal löscht.

Was passiert dann eigentlich bei nem Select.
Die DBs haben doch so komische Isolation-Levels.
Werden IMMER nur die Datensätze geliefert, die auch erfolgreich in die Tabelle geschrieben wurden?

Bin mir da nicht sicher - auch nicht was für Standard-Einstellungen die DBs besitzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz