Entwickler-Ecke
Datenbanken - Manchmal kommt beim Löschen eine Fehlermeldung
LingNeu - Sa 21.05.11 09:50
Titel: Manchmal kommt beim Löschen eine Fehlermeldung
hallo delphifreunde,
bei einer einfachen Tabelle, welche in einem DBGrid angezeigt wird, kann man durch Mehrfachmarkierungen über einen Button anschließend diese markierten Datensätze z.B. löschen.
Hin und wieder tritt eine Fehlermeldung auf:
"Going to bookmark: The record does not exist ..."
Hier der Quelltextausschnitt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| TDBTemp.First; if DBG.SelectedRows.Count > 0 then begin with DBG.DataSource.DataSet do begin for i:= 0 to DBG.SelectedRows.Count - 1 do begin GotoBookmark(Pointer(DBG.SelectedRows.Items[i])); TDBTemp.Edit; TDBTemp.Delete; end; end; end; DBG.SelectedRows.Clear; |
Die Fehlermeldung kann vermutlich nur damit zusammenhängen, dass der Index nicht mehr stimmt, nachdem gelöscht wurde
Hat jemand eine Idee. Ich kann die Sache leider nicht in SQL lösen.
Danke für jeden Hinweis.
ciao
LingNeu
Gerd Kayser - Sa 21.05.11 12:29
LingNeu hat folgendes geschrieben : |
| "Going to bookmark: The record does not exist ..." |
Versuchs mal mit einer downto-Schleife.
Delphi-Quelltext
1:
| for i := DBG.SelectedRows.Count - 1 downto 0 do |
haentschman - Sa 21.05.11 12:29
Hallo...
das mit dem Index stimmt schon. Laß deine Schleife doch einfach von hinten nach vorn durchlaufen. (umdrehen)
| Zitat: |
| Ich kann die Sache leider nicht in SQL lösen. |
...kannst du das begründen ?
PS: um den DS zu löschen brauchst du die Datenmenge nicht zuvor in den Edit Modus versetzen.
:wave:
LingNeu - Sa 21.05.11 13:02
Hallo Gerd,
danke für den Hinweis, welchen ich gleich probieren werde.
Hallo haentschman,
die Begründung warum nicht in Sql, da ich dort nicht fit bin. Danke für den Hinweis auf den Editmodus.
ciao
LingNeu
Magic2001 - Fr 27.01.12 08:38
Ich habe das selbe Problem wie der Threadstarter. Ich verwende eine Downtoschleife aber der Fehler kommt trotzdem. Der Fehler kommt recht selten und nur sehr sporadisch, daher kann ich mir das nicht erklären. Hat jemand eine Idee??
Ich lösche per SQL
Delphi-Quelltext
1: 2: 3:
| datamodule1.TdbQuery1.DatabaseName := datamodule1.TourTable1.DatabaseName; datamodule1.TdbQuery1.SQL.Text := 'delete From tour where GCCode='+QuotedStr(datamodule1.TourTable1gccode.AsString); datamodule1.TdbQuery1.ExecSQL; |
Denke aber der Fehler kommt vom Bookmark und liegt nicht an der löschmethode.
zuma - Fr 27.01.12 12:15
Man sollte einfach prüfen, ob Bookmark auch gültig ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| for i := 0 to dbg.SelectedRows.count -1 do begin if dbg.datasource.Dataset.BookmarkValid(Pointer(dbg.SelectedRows.Items[i])) then begin dbg.datasource.Dataset.GotoBookmark(Pointer(dbg.SelectedRows.Items[i])); dbg.datasource.DataSet.Delete; end; end; |
Zuma
Magic2001 - Fr 27.01.12 15:46
Ich werde das mal testen. Jedoch frage ich mich, wieso das Bookmark invalid sein sollte? Ich markiere ein paar Zeilen im DbGrid und da sollte das Bookmark doch klar definiert sein.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!