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 = Tabelle; DBG = DataGrid; 
TDBTemp.First; // gehe an den Tabellenanfang
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

user profile iconLingNeu hat folgendes geschrieben Zum zitierten Posting springen:
"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.