Autor Beitrag
LingNeu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Sa 21.05.11 09:50 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
for i := DBG.SelectedRows.Count - 1 downto 0 do					
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

XP Pro
Delphi 7 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32


Delphi XE2
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 27.01.12 12:15 
Man sollte einfach prüfen, ob Bookmark auch gültig ist:

ausblenden 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

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Magic2001
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32


Delphi XE2
BeitragVerfasst: 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.