Entwickler-Ecke

Datenbanken - Löschproblem mit SQL


clon - Mi 05.02.03 15:18
Titel: Löschproblem mit SQL
Ich verwende eine Paradox7-Datenbank und will einen SQL-Befehl benutzen, um einen Eintrag zu löschen. Das wird auch gemacht, nur wird die Datenbank nach Schließen und Öffnen von Delphi (nicht nach Neustart des "Projektes") wieder in den ursprünglichen Zustand VOR der Löschung zurückgesetzt. Die Tabelle ist in eine ComboBox geschrieben worden. Folgende Befehle werden über ButtonOnClick benutzt:


Quelltext
1:
2:
3:
4:
Playlistdb_Query.Close;
Playlistdb_Query.SQL.Clear;
Playlistdb_Query.SQL.Add('DELETE FROM db WHERE spaltenname=' + eintrag_in_combobox);
Playlistdb_Query.ExecSQL;


Der Eintrag wird ebenfalls aus der ComboBox gelöscht UND ist nicht mehr in der Datenbank. Der Eintrag ist somit auch nicht mehr zu sehen. Leider aber nach einem Neustart wieder...

Dankbar für jede Form von Hilfe
Marc


hansa - Mi 05.02.03 15:35

Da würde ich aber doch noch ein COMMIT und auch noch ein close zum Schluß machen. Wegen des fehlenden Commits werden die Daten letztenendes gar nicht geändert. Wundert mich allerdings, daß da keine Fehlermeldung kommt. :shock:

Gruß
Hansa


UGrohne - Mi 05.02.03 15:58

Interbase-DB? Hast Du bei der transaction dann ein AutoRollback drin? Ansonsten musste mal schauen, obs sowas irgendwo bei den Einstellungen gibt. Da Du kein Commit ausführst, werden die Änderungen beim Schließen mit einem Rollback zurückgenommen.


clon - Mi 05.02.03 16:25

Bei der Paradox-Datenbank gibt es keine Methode Commit (oder ich find sie nicht). Nur CommitUpdates, das bringt aber eine Fehlermeldung. Mit TTable.Close wird die Änderung gespeichert, aber danach ist die Tabelle ja inaktiv (und der ComboBox-Eintrag wird irgendwie auch nicht mehr gelöscht); anstatt diese wieder zu aktivieren, gibt es keinen Befehl wie z.B. Post (das funktioniert nur falls DB im Edit-Modus)? Rollback gibt's bei Paradox nicht, oder?


smiegel - Mi 05.02.03 16:39

Hallo,

evtl. hilft Query1.Refresh oder Table1.Refresh.


UGrohne - Do 06.02.03 09:19

Was für einen Fehler bringt den CommitUpdates?


clon - Sa 08.02.03 11:14

Query.CommitUpdate oder Table.CommitUpdate meldet "xx_Query:" bzw. "xx_Table: Not in cached update mode.

Aber sowie es aussieht funktioniert es jetzt, ich lasse ein xx_Query.Close folgen. Ich denke das ist aber eher Zufall, ich hatte die identischen Löschkommandos auf zwei Tabellen, bei einer wurde gelöscht, bei der anderen nicht.

Die Property "AutoRefresh" ist "True", "ChachedUpdate" ist "False", dazu steht folgendes in der Hilfe:
Zitat:
The cached updates feature allows users to retrieve data from a database and make changes to that temporarily cached data without immediately writing to the actual underlying database. Users can make changes over a prolonged period with a minimum amount of resource locking at the actual database. After modifying the data, users call an update function to save their changes in the actual database. The update function sends to the database a batch of all inserts, deletes, and modifications made since the last update function call.

Aber da diese aus ist, müsste es ja ohnehin sofort geschrieben werden? Zeigt die Datenbankoberfläche eigentlich den aktuellen Zustand der Datenbanktabelle an?

Thx für bisherige Antworten

Moderiert von user profile iconTino: Quote-Tags hinzugefügt.