[TurboDB unter Delphi 7] Manchmal kommt beim Löschen eine Fehlermeldung
spacer
Autor Nachricht
LingNeu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Sa 21.05.11 10:50 
Betrifft: TurboDB unter Delphi 7
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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 342
Erhaltene Danke: 38

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 21.05.11 13: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 markieren
1:
for i := DBG.SelectedRows.Count - 1 downto 0 do
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 156
Erhaltene Danke: 13


Delphi 2007, Delphi XE
BeitragVerfasst: Sa 21.05.11 13: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:
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
LingNeu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21

XP Pro
Delphi 7 Enterprise
BeitragVerfasst: Sa 21.05.11 14: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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Magic2001
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16


Delphi 2009 prof
BeitragVerfasst: Fr 27.01.12 09: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 markieren
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


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

ausblenden Delphi-Quelltext markieren
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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Magic2001
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16


Delphi 2009 prof
BeitragVerfasst: Fr 27.01.12 16: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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home