Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fremdschlüssel löschen. (https://www.delphipraxis.net/195445-fremdschluessel-loeschen.html)

Delphi.Narium 1. Mär 2018 10:41

AW: Fremdschlüssel löschen.
 
Heißt das, dass Du sowas nicht machen kannst?
Delphi-Quellcode:
qry.SQL.Text := 'drop table irgendeinetabelle';
qry.ExecSQL;
Was wird denn dann aus
Delphi-Quellcode:
qry.SQL.Text := 'delete from tabelle where id = 1';
qry.ExecSQL;
oder
Delphi-Quellcode:
qry.SQL.Text := 'update tabelle set wert = 1234 where id = 1';
qry.ExecSQL;
Bei Open frag' ich in der Regel per Rec(ord)Count ab, wieviele Ergebniszeilen es so gibt.

Bei ExecSQL bekommt man ggfls. über RowsAffected die Anzahl der geänderten / gelöschten / eingefügten Sätze mit.

Bei manchen Komponenten ist ExecSQL 'ne Funktion, die bei Erfolg true und bei Misserfolg false ist oder bei Misserfolg fliegt 'ne Ausnahme.

Allerdings: Einheitlich ist da nun wirklich nicht geregelt, was den Wechsel der Komponenten zuweilen schon recht aufwändig machen kann.
Und einheitliche Lösungsvorschläge fast unmöglich.

jobo 1. Mär 2018 10:42

AW: Fremdschlüssel löschen.
 
Zitat:

Zitat von himitsu (Beitrag 1394917)
Innerhalb von StoredProcs (Postgres) kann man
Delphi-Quellcode:
PERFORM FunktionDieEtwasMachtAberKeinResultHat();
machen,
aber in Query/Script-Kompnenten geht nur
Delphi-Quellcode:
SELECT FunktionDieEtwasMachtAberKeinResultHat();
und schon bringt der Code von Delphi.Narium leider nichts, bzw. funktioniert zur Hälfte nicht. :zwinker:

Ich verstehe nicht, wo du meinst, dass etwas doppelt/mehrfach ausgeführt wird.
Ist es so gemeint, wie mkinzler schrieb, also eine falsche Interpretation aus Delphi mit erneutem Ausführen? Oder anders?

himitsu 1. Mär 2018 11:59

AW: Fremdschlüssel löschen.
 
Wie gesagt, das bezieht sich jetzt auf Postgres mit PgDAC.
k.A. ob es solche Probleme auch bei anderen DBMS und Zugriffskomponenten gibt.#
War als Beispiel erwähnt, dass Fehlermeldungen nicht immer "ganz" richtig sein müssen.

Also, irgendwo inderhalb einiger Query-Komponenten (z.B. TPgQuery) wird scheinbar bei fehlendem Result die Abfrage nochmal ausgelöst, beim Open/OpenTable. (nicht beim Execute/ExecSQL)
Ganz tief in den Klassen.
Der PgSQLMonitor bekommt die wiederholte Anfrage nicht mit, drum hatte es auch etwas länger gedauert das Problem zu identifizieren, vorallem da es im Programm nicht immer knallt. (das untere Beispiel ist bei uns aber reproduzierbar)

Zum Test: Das Erstellungsscript und 3 Test-Scripte/Queries
SQL-Code:
CREATE OR REPLACE FUNCTION SetSetting(Name VARCHAR, Value INTEGER) RETURNS VOID AS $$
BEGIN
  -- hier INSERT or UPDATE
  RETURN;
END$$ LANGUAGE plpgsql;

SELECT SetSetting('Test', 0); -- hier fällt es "nicht" auf, wenn es doppelt gesetzt wird

SELECT SetSetting('Test', GetSetting('Test') + 1); -- hier dagegen ist es +2
--SELECT GetSetting('Test'); -- beide SQL gemeinsam ausgeführt zählen direkt in Zweierschritten hoch und zeigen es sofort an

SELECT GetSetting('Test');
Das tritt auch manchmal auf, wenn ein SELECT ein Result liefert, aber in einem der Felder der "Fehler" liegt.
SQL-Code:
SELECT 'abc', SetSetting('Test', +1); -- machmal, aber nicht immer doppelt ... Muster noch nicht gefunden

jobo 1. Mär 2018 12:31

AW: Fremdschlüssel löschen.
 
Ok, ich arbeite nicht mit den Komponentenm, aber das ist ja etwas gruselig.
Ich gehe mal davon aus, dass Ihr einen zuverlässigen Workaround habt, sonst könnte man das Konstrukt ja nicht gebrauchen mit den Komponenten.

himitsu 1. Mär 2018 14:39

AW: Fremdschlüssel löschen.
 
Meistens fällt es nicht auf, bis auf paar "Sonderfälle".

SELECT wird doppelt ausgeführt, also braucht auch doppelt so lange, die beiden Abfragen ... wenn die Abfrage nun länger dauert, dann fällt das schon auf (oder man denkt erstmal das dauert wirklich so lange)

Oder wo eben mit Rückgaben gearbeitet wird, bzw. wo etwas erstellt/gelöscht wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.
Seite 2 von 2     12   

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