dbskip(0)-Problem / abweichend von Doku seit 1.9
Moderator: Moderatoren
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
dbskip(0)-Problem / abweichend von Doku seit 1.9
Hallo,
bin gerade wegen eines Problems daraufgestossen: dbskip(0) refreshed den Satzzeiger nicht (oder nicht richtig)!
Meine Situation:
Arbeitsplatz 1 steht auf einem Datensatz (quasi im Anzeigen). An Arbeitsplatz 2 wird dieser Datensatz gelöscht. Arbeitsplatz 1 drückt nun Enter zum Bearbeiten. Bisher ging das, da ich vor dem Editieren ein dbskip(0) verwendet habe. Das liest ja den Datensatz neu ein und aktualisiert auch Filter/Scope- und Deleted-Bedingung (zumindet steht es so in der Hilfe - im SL1). Das ist aber nicht so. In obigen Fall steht der Satzzeiger noch immer auf dem Datensatz. Ich verwende FOXCDX, SET DELETED ON und der Index ist mit !deleted() gebaut.
Es gibt dazu auch einen PDR: 5715 (offen seit build 1.90.334), allerdings funktioniert der dort angegebene Workaround bei mir auch nicht, d. h. zumindest nicht richtig: deleted() liefert dann zwar .t., aber der Satzzeiger ist immer noch auf dem gelöschten Datensatz positioniert und den kann ich auch noch munter auslesen...
Das wenigstens deleted() mit dem Workaround geht, hilft mir in meiner konkreten Situation schon mal weiter. Aber ich halte das Ganze für kritisch...
bin gerade wegen eines Problems daraufgestossen: dbskip(0) refreshed den Satzzeiger nicht (oder nicht richtig)!
Meine Situation:
Arbeitsplatz 1 steht auf einem Datensatz (quasi im Anzeigen). An Arbeitsplatz 2 wird dieser Datensatz gelöscht. Arbeitsplatz 1 drückt nun Enter zum Bearbeiten. Bisher ging das, da ich vor dem Editieren ein dbskip(0) verwendet habe. Das liest ja den Datensatz neu ein und aktualisiert auch Filter/Scope- und Deleted-Bedingung (zumindet steht es so in der Hilfe - im SL1). Das ist aber nicht so. In obigen Fall steht der Satzzeiger noch immer auf dem Datensatz. Ich verwende FOXCDX, SET DELETED ON und der Index ist mit !deleted() gebaut.
Es gibt dazu auch einen PDR: 5715 (offen seit build 1.90.334), allerdings funktioniert der dort angegebene Workaround bei mir auch nicht, d. h. zumindest nicht richtig: deleted() liefert dann zwar .t., aber der Satzzeiger ist immer noch auf dem gelöschten Datensatz positioniert und den kann ich auch noch munter auslesen...
Das wenigstens deleted() mit dem Workaround geht, hilft mir in meiner konkreten Situation schon mal weiter. Aber ich halte das Ganze für kritisch...
Zuletzt geändert von Markus Walter am Do, 24. Sep 2009 13:04, insgesamt 1-mal geändert.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: dbskip(0)-Problem im SL1?!?!
Hi Markus,
wie sieht bei Dir DBFDBE_LIFETIME aus? Ich hatte das auch mal, bzw. denke dass ich das immer noch habe. Ein Hinweis von Till aus dem Jahre 2006 war, diesen Wert auf 0 zu setzen.
Es war bei mir so, dass ich etwas geändert hatte an PC 1 und PC2 konnte den Wert nicht erkennen. Jedenfalls nicht sofort. Mit DbSkip(0) war da wohl damals auch nichts zu reissen.
wie sieht bei Dir DBFDBE_LIFETIME aus? Ich hatte das auch mal, bzw. denke dass ich das immer noch habe. Ein Hinweis von Till aus dem Jahre 2006 war, diesen Wert auf 0 zu setzen.
Es war bei mir so, dass ich etwas geändert hatte an PC 1 und PC2 konnte den Wert nicht erkennen. Jedenfalls nicht sofort. Mit DbSkip(0) war da wohl damals auch nichts zu reissen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: dbskip(0)-Problem im SL1?!?!
Hi,
hast du das dbskip(0) sowohl auf dem PC1 als auch auf dem PC2 ausgeführt ?
Das muss ich doch gleich mal bei meinem Programm das noch solche Sperren einsetzt prüfen.
Allerdings habe ich immer noch nur 331 in Produktion ...
hast du das dbskip(0) sowohl auf dem PC1 als auch auf dem PC2 ausgeführt ?
Das muss ich doch gleich mal bei meinem Programm das noch solche Sperren einsetzt prüfen.
Allerdings habe ich immer noch nur 331 in Produktion ...
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: dbskip(0)-Problem im SL1?!?!
Hi Hubert,
beides habe ich gemacht. Andreas und Till wollten es damals nicht glauben. Ich müßte jetzt aber auch nochmals genau nachsehen, ob und wenn ja, wie ich das Problem behoben habe.
Habe ich gerade mal gemacht. Im Moment nutze ich in der Methode kein DbSkip(0) mehr, ich habe ein DbCommit() drin. Probleme habe ich aber jetzt nicht explizit erkennen können damit.
Ah, Moment mal eben. Da fällt mir etwas ein. Bei DbSkip(0) gibt es Probleme, wenn man Sätze gelöscht hat. Wenn Set Deleted ON gesetzt ist, dann springt der Zeiger woanders hin. Deshalb habe ich das entfernt bei mir. Aber ob das jetzt für eine andere WS eine Auswirkung hat? Hm, eigentlich dürfte das ja nicht sein. Aber nur mal so zum Nachdenken.
http://www.xbaseforum.de/viewtopic.php?f=16&t=2311
beides habe ich gemacht. Andreas und Till wollten es damals nicht glauben. Ich müßte jetzt aber auch nochmals genau nachsehen, ob und wenn ja, wie ich das Problem behoben habe.
Habe ich gerade mal gemacht. Im Moment nutze ich in der Methode kein DbSkip(0) mehr, ich habe ein DbCommit() drin. Probleme habe ich aber jetzt nicht explizit erkennen können damit.
Ah, Moment mal eben. Da fällt mir etwas ein. Bei DbSkip(0) gibt es Probleme, wenn man Sätze gelöscht hat. Wenn Set Deleted ON gesetzt ist, dann springt der Zeiger woanders hin. Deshalb habe ich das entfernt bei mir. Aber ob das jetzt für eine andere WS eine Auswirkung hat? Hm, eigentlich dürfte das ja nicht sein. Aber nur mal so zum Nachdenken.
http://www.xbaseforum.de/viewtopic.php?f=16&t=2311
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: dbskip(0)-Problem im SL1?!?!
Hallo Manfred,
was Du als Problem schilderst, ist ja gewünscht (und kein Problem)!
Viele Grüße,
Martin
was Du als Problem schilderst, ist ja gewünscht (und kein Problem)!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: dbskip(0)-Problem im SL1?!?!
Hach Martin,
Seiteneffekt, blöde wenn man nicht daran denkt.... So war das gemeint
Seiteneffekt, blöde wenn man nicht daran denkt.... So war das gemeint
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: dbskip(0)-Problem im SL1?!?!
Hallo Manfred,
ob es bei deinem Programm stört, weiß ich natürlich nicht
aber auf jeden Fall MUSS der Datensatz auf den nächsten NICHT GELÖSCHTEN oder EOF springen,
wenn SET DELETED ON gesetzt ist und du etwas löschst.
Möglich dass dies unter Clipper noch anders war, aber clipper brauchte auch nicht mit anderen Tasks / Threads klar kommen
Ich habe bei meinem Programm gerade getestet und das Programm erkennt sofort und richtig, dass der andere Datensatz
gesperrt wird (einer ändert, die anderen dürfen dann nicht rein) oder gar zur Löschung markiert wird.
Ich verwende allerdings auch nicht SET DELETED ON, denn ich will ja gerade auch gelöschte Sätze wieder retten können.
Meine Übersichtsseite ruft jede Sekunde die aktuellsten Daten mit SKIP(0) wieder ab und zeigt den Zustand ... wie gesagt ein altes Programm mit Clipper Optik - aber es funktioniert.
ob es bei deinem Programm stört, weiß ich natürlich nicht
aber auf jeden Fall MUSS der Datensatz auf den nächsten NICHT GELÖSCHTEN oder EOF springen,
wenn SET DELETED ON gesetzt ist und du etwas löschst.
Möglich dass dies unter Clipper noch anders war, aber clipper brauchte auch nicht mit anderen Tasks / Threads klar kommen
Ich habe bei meinem Programm gerade getestet und das Programm erkennt sofort und richtig, dass der andere Datensatz
gesperrt wird (einer ändert, die anderen dürfen dann nicht rein) oder gar zur Löschung markiert wird.
Ich verwende allerdings auch nicht SET DELETED ON, denn ich will ja gerade auch gelöschte Sätze wieder retten können.
Meine Übersichtsseite ruft jede Sekunde die aktuellsten Daten mit SKIP(0) wieder ab und zeigt den Zustand ... wie gesagt ein altes Programm mit Clipper Optik - aber es funktioniert.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: dbskip(0)-Problem im SL1?!?!
Hi Hubert,
um eine gelöschten Satz wieder zu retten, dafür gibt es dann Set DELETED OFF
Um das Sperren geht es doch gar nicht Das klappt ja auch so. Das wäre ja auch eine Dingen, wenn das zeitverzögert über irgend eine Puffer laufen würde.
um eine gelöschten Satz wieder zu retten, dafür gibt es dann Set DELETED OFF
Um das Sperren geht es doch gar nicht Das klappt ja auch so. Das wäre ja auch eine Dingen, wenn das zeitverzögert über irgend eine Puffer laufen würde.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: dbskip(0)-Problem im SL1?!?!
Hallo,
@Manfred: DBFDBE_LIFETIME hat mit meinem Problem nichts zu tun (ich habe es aber trotzdem probiert). DBFDBE_LIFETIME wird nur benötigt, wenn mit mehreren Threads innerhalb eines Programmes auf die gleichen Daten zugegriffen wird.
@Hubert: Ob es richtig ist, dass in so einer Situation auf den nächsten Datensatz gesprungen wird, darüber kann man trefflich diskutieren. Aber das passiert bei mir ja auch nicht. Bei mir ist es so, dass der Satzzeiger auf dem (von der anderen Station gelöschten) stehen bleibt und ich den Datensatz "normal" auslesen kann. Durch den workaround von Alaska liefert aber immerhin deleted() .t. zurück.
Ich habe ein kleines sample gemacht (mit Daten). Wer es mal probieren möchte, kann es gerne haben...
Faktum ist:
- der Datensatzzeiger wird durch dbskip(0) nicht auf den nächsten Satz positioniert (wie in der Hilfe beschrieben), wenn der aktuelle Datensatz mittlerweile gelöscht wurde
- der Workaround wirkt nur auf deleted(), positioniert aber nicht um (wie im PDR geschrieben)
- gleiches Verhalten mit Build 331, 337 und 355
EDIT: rlock() auf den gelöschten Datensatz ist möglich!
@Manfred: DBFDBE_LIFETIME hat mit meinem Problem nichts zu tun (ich habe es aber trotzdem probiert). DBFDBE_LIFETIME wird nur benötigt, wenn mit mehreren Threads innerhalb eines Programmes auf die gleichen Daten zugegriffen wird.
@Hubert: Ob es richtig ist, dass in so einer Situation auf den nächsten Datensatz gesprungen wird, darüber kann man trefflich diskutieren. Aber das passiert bei mir ja auch nicht. Bei mir ist es so, dass der Satzzeiger auf dem (von der anderen Station gelöschten) stehen bleibt und ich den Datensatz "normal" auslesen kann. Durch den workaround von Alaska liefert aber immerhin deleted() .t. zurück.
Ich habe ein kleines sample gemacht (mit Daten). Wer es mal probieren möchte, kann es gerne haben...
Faktum ist:
- der Datensatzzeiger wird durch dbskip(0) nicht auf den nächsten Satz positioniert (wie in der Hilfe beschrieben), wenn der aktuelle Datensatz mittlerweile gelöscht wurde
- der Workaround wirkt nur auf deleted(), positioniert aber nicht um (wie im PDR geschrieben)
- gleiches Verhalten mit Build 331, 337 und 355
EDIT: rlock() auf den gelöschten Datensatz ist möglich!
Zuletzt geändert von Markus Walter am Di, 06. Okt 2009 9:13, insgesamt 1-mal geändert.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: dbskip(0)-Problem im SL1?!?!
Hi,
das mit dem Springen könnte auch mit dem Index zu tun haben ( for ! deleted() ) ...
Ich nutze in meinen Anwendungen nie den SET DELETED ON Schalter.
das mit dem Springen könnte auch mit dem Index zu tun haben ( for ! deleted() ) ...
Ich nutze in meinen Anwendungen nie den SET DELETED ON Schalter.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: dbskip(0)-Problem im SL1?!?!
wobei das ja dann auch nichts mit dem SL1 zu tun hat, sondern schon (immer) so warMarkus Walter hat geschrieben: - gleiches Verhalten mit Build 331, 337 und 355
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: dbskip(0)-Problem im SL1?!?!
Hi Markus,
da muß ich Dich aber enttäuschen. Ich hatte das Problem nicht mit Threads, sondern mit 2 WS. Und daraufhin hat man mir von Alaska die Sache mit DBFDBE_LIFETIME genannt. Also wenn erzählen die was schräges.
da muß ich Dich aber enttäuschen. Ich hatte das Problem nicht mit Threads, sondern mit 2 WS. Und daraufhin hat man mir von Alaska die Sache mit DBFDBE_LIFETIME genannt. Also wenn erzählen die was schräges.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: dbskip(0)-Problem im SL1?!?!
Hallo Hubert,brandelh hat geschrieben:wobei das ja dann auch nichts mit dem SL1 zu tun hat, sondern schon (immer) so warMarkus Walter hat geschrieben: - gleiches Verhalten mit Build 331, 337 und 355
ja, aber seit 331 ist das Verhalten für dbslip(0) explizit in der Hilfe beschrieben. Aber es geht nicht. Der PDR hat den OpenBuild 334, woraus man schließen könnte, das es mit 331 wie beschrieben arbeiten würde. Das ist aber nicht so.
Edit: nicht nur SL1, ich ändere mal die Überschrift...
Zuletzt geändert von Markus Walter am Do, 24. Sep 2009 13:04, insgesamt 1-mal geändert.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: dbskip(0)-Problem im SL1?!?!
Hi Manfred, wie auch immer, ich verstehe die Online-Hilfe in diesem Punkt anders. Aber es hat in meinem Problem keine Auswirkungen:Manfred hat geschrieben:Hi Markus,
da muß ich Dich aber enttäuschen. Ich hatte das Problem nicht mit Threads, sondern mit 2 WS. Und daraufhin hat man mir von Alaska die Sache mit DBFDBE_LIFETIME genannt. Also wenn erzählen die was schräges.
1. kann man warten solange man will
2. habe ich die LIFETIME in meinem Sample auf 0 gesetzt
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Manfred
- Foren-Administrator
- Beiträge: 21200
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: dbskip(0)-Problem / abweichend von Doku seit 1.9
Hi Markus,
stimmt, die Anleitung beschreibt es so, wie Du es erwähnst. Und ich bin doof. Es war genau andersherum. An der gleichen WS war die Änderung nicht zu sehen, aber an einem anderen Platz war sie schon zu sehen.
Wie gut dass ich den Mailverkehr mit Alaska aufhebe.
stimmt, die Anleitung beschreibt es so, wie Du es erwähnst. Und ich bin doof. Es war genau andersherum. An der gleichen WS war die Änderung nicht zu sehen, aber an einem anderen Platz war sie schon zu sehen.
Wie gut dass ich den Mailverkehr mit Alaska aufhebe.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: dbskip(0)-Problem / abweichend von Doku seit 1.9
Hallo Manfred,
gut das wir drüber geredet haben...
gut das wir drüber geredet haben...
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Re: dbskip(0)-Problem / abweichend von Doku seit 1.9
Hallo,
ich wollte meine abschließenden Erkenntnisse mitteilen:
* dbskip(0) führt nicht, wie in der Online-Hilfe beschrieben dazu, dass zum nächsten logischen Satz navigiert wird, falls der aktuelle Satz nicht mehr "gültig" ist (z. B. gelöscht wurde), PDF 5715
* Die im PDR angegebene Solution funktioniert nicht (zumindest nicht be gelöschten Datensätzen)
* Die im PDR angegebene Solution hilft, um den Status von deleted() zu aktualisieren
Insgesamt ergibt sich für mich eine Verhaltensweise, mit der ich so nicht gerechnet habe. Ich habe deshalb grundlegend meine Satz-Sperrung überarbeitet. Ich bin bisher davon ausgegangen, dass ein gelöschter Satz nicht gesperrt werden kann, wenn SET DELETED ON gesetzt ist. Dem ist nicht so. Eine Satzsperre (und damit das Ändern des Datensatzes) funktioniert genau wie bei einem nicht gesperrten Satz.
Damit ergab sich in meine Applikation, dass Anwender an einem Arbeitsplatz Datensätze bearbeitet haben, die von einer anderen Arbeitsstation bereits gelöscht waren und keiner hat es gemerkt!
Wenn man sich also darauf verlassen möchte, dass ein rlock()/dbrlock() nur bei "noch gültigen" Datensätzen .t. liefert, muss man folgende Konstruktion verwenden:
Ich halte das Ganze in "Mehrbenutzer-Systemen" für unabdingbar, wenn man mit SET DELETED ON arbeitet und mit gelöschten Datensätzen "nichts zu tun haben möchte".
ich wollte meine abschließenden Erkenntnisse mitteilen:
* dbskip(0) führt nicht, wie in der Online-Hilfe beschrieben dazu, dass zum nächsten logischen Satz navigiert wird, falls der aktuelle Satz nicht mehr "gültig" ist (z. B. gelöscht wurde), PDF 5715
* Die im PDR angegebene Solution funktioniert nicht (zumindest nicht be gelöschten Datensätzen)
* Die im PDR angegebene Solution hilft, um den Status von deleted() zu aktualisieren
Insgesamt ergibt sich für mich eine Verhaltensweise, mit der ich so nicht gerechnet habe. Ich habe deshalb grundlegend meine Satz-Sperrung überarbeitet. Ich bin bisher davon ausgegangen, dass ein gelöschter Satz nicht gesperrt werden kann, wenn SET DELETED ON gesetzt ist. Dem ist nicht so. Eine Satzsperre (und damit das Ändern des Datensatzes) funktioniert genau wie bei einem nicht gesperrten Satz.
Damit ergab sich in meine Applikation, dass Anwender an einem Arbeitsplatz Datensätze bearbeitet haben, die von einer anderen Arbeitsstation bereits gelöscht waren und keiner hat es gemerkt!
Wenn man sich also darauf verlassen möchte, dass ein rlock()/dbrlock() nur bei "noch gültigen" Datensätzen .t. liefert, muss man folgende Konstruktion verwenden:
Code: Alles auswählen
FUNCTION MyRlock()
local lRet := .t.
IF .NOT. DbRLock()
lRet := .F.
ELSE
// durch das dbrlock() wurde der Satz neu eingelesen und somit auch das deleted()-Flag aktualisiert
IF Deleted()
DbRUnlock()
lRet := .F.
ENDIF
ENDIF
RETURN .T.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz