Hallo,
was soll denn dbskip(0) denn bewirken ??, wenn er auf der gleichen Position bleibt
Doppelte Nummervergabe.
Moderator: Moderatoren
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1931
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Rolf,
er refresht den Buffer, die Daten werden also wirklich erneut eingelesen.
Viele Grüße,
Martin
er refresht den Buffer, die Daten werden also wirklich erneut eingelesen.
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.
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 07. Aug 2006 10:18
- Wohnort: Leipzig
- Danksagung erhalten: 11 Mal
Hallo,
vorab: Ich verwende zu 95% in meinen Programmen DBFNTX, ohne irgendwelche Änderungen mittels DBInfo() oder in der Registry (OPLocking etc.) vorzunehmen.
Ich kann auch nicht behaupten, dass ich je Probleme mit dem Wegschreiben der Daten per COMMIT hatte (inwieweit dbSkip(0) dabei besser ist, weiß ich nicht).
Wobei ich aber in grauer Vorzeit durchaus Probleme hatte, ist Folgendes:
- Workstation 1 positioniert auf einen DS
- dieser DS wird auf WS 2 erfolgreich geändert (nach einem COMMIT und dem Neueinlesen des DS werden die neuen Daten korrekt angezeigt)
- WS 1 liest die Daten des auf WS 2 geänderten DS neu ein --> aber zurückgegeben werden die alten Daten (wie vor der Änderung)
Da half auch kein dbSkip(0)!
Erst als ich vor dem Neueinlesen der Daten ein dbGoto(Recno()) ausführte, wurden die Daten korrekt aktualisiert.
Das folgende kleine Test-Programm veranschaulicht das:
- das Programm im VIO-Mode kompilieren/linken
- Programm 2x starten
- im Fenster 1: C <Enter> eingeben --> Feldinhalt in DB wird geändert und angezeigt
- im Fenster 2: S <Enter> eingeben --> geänderter Feldinhalt wird korrekt angezeigt
- im Fenster 1: C <Enter> eingeben --> Feldinhalt wird wieder geändert und angezeigt
- im Fenster 2:
- S <Enter> eingeben --> alter Wert wird zurueckgeben (nicht aktuell)
- 1 <Enter> eingeben --> dbSkip(0) wird ausgeführt
- S <Enter> eingeben --> nach wie vor wird der alte Wert angezeigt
- 2 <Enter> eingeben --> dbGoto( Recno() ) wird ausgeführt
- S <Enter> eingeben --> erst jetzt wird der aktuelle Feldwert ausgegeben!
Nebenbei: Verwendet eigentlich jemand dbRefresh()? Bei Tests mit dieser Funktion konnte ich keinerlei Effekt feststellen!
Tschüs,
Sören
vorab: Ich verwende zu 95% in meinen Programmen DBFNTX, ohne irgendwelche Änderungen mittels DBInfo() oder in der Registry (OPLocking etc.) vorzunehmen.
Ich kann auch nicht behaupten, dass ich je Probleme mit dem Wegschreiben der Daten per COMMIT hatte (inwieweit dbSkip(0) dabei besser ist, weiß ich nicht).
Wobei ich aber in grauer Vorzeit durchaus Probleme hatte, ist Folgendes:
- Workstation 1 positioniert auf einen DS
- dieser DS wird auf WS 2 erfolgreich geändert (nach einem COMMIT und dem Neueinlesen des DS werden die neuen Daten korrekt angezeigt)
- WS 1 liest die Daten des auf WS 2 geänderten DS neu ein --> aber zurückgegeben werden die alten Daten (wie vor der Änderung)
Da half auch kein dbSkip(0)!
Erst als ich vor dem Neueinlesen der Daten ein dbGoto(Recno()) ausführte, wurden die Daten korrekt aktualisiert.
Das folgende kleine Test-Programm veranschaulicht das:
Code: Alles auswählen
proc main
LOCAL cWahl := ""
set dele on
if ! File( "RTEST.DBF" )
dbCreate( "RTEST", { { "ZEIT", "C", 8, 0 } }, "DBFNTX" )
dbUseArea( .F., , "RTEST", , .F. )
APPEND BLANK
CLOSE
endif
dbUseArea( .T., , "RTEST", , .T. )
dbGoto( 1 )
while !( cWahl $ "X" )
ACCEPT "(C)ange / (S)how / (1) dbSkip(0) / (2) dbGoto(recno()) / E(x)it : " TO cWahl
cWahl := Upper( AllTrim( cWahl ) )
DO CASE
CASE cWahl == "C"
RLock()
replace RTEST->zeit with Time()
COMMIT
UNLOCK
? "geaendert: " + RTEST->zeit
CASE cWahl == "S"
? "Wert: " + RTEST->zeit
CASE cWahl == "1"
dbSkip(0)
CASE cWahl == "2"
dbGoTo( RecNo() )
ENDCASE
enddo
CLOSE ALL
return
- Programm 2x starten
- im Fenster 1: C <Enter> eingeben --> Feldinhalt in DB wird geändert und angezeigt
- im Fenster 2: S <Enter> eingeben --> geänderter Feldinhalt wird korrekt angezeigt
- im Fenster 1: C <Enter> eingeben --> Feldinhalt wird wieder geändert und angezeigt
- im Fenster 2:
- S <Enter> eingeben --> alter Wert wird zurueckgeben (nicht aktuell)
- 1 <Enter> eingeben --> dbSkip(0) wird ausgeführt
- S <Enter> eingeben --> nach wie vor wird der alte Wert angezeigt
- 2 <Enter> eingeben --> dbGoto( Recno() ) wird ausgeführt
- S <Enter> eingeben --> erst jetzt wird der aktuelle Feldwert ausgegeben!
Nebenbei: Verwendet eigentlich jemand dbRefresh()? Bei Tests mit dieser Funktion konnte ich keinerlei Effekt feststellen!
Tschüs,
Sören
- Manfred
- Foren-Administrator
- Beiträge: 21248
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 211 Mal
- Danksagung erhalten: 71 Mal
Hi Sören,
Du sprichst mir aus der Seele. Dieses Problem kenne ich auch. Aber mit dem Dbgoto(Recno()) habe ich noch nicht probiert (denke ich mal). Laut Support, darf sowas aber überhaupt nicht vorkommen, was Du da beschreibst und was ich auch habe.
Ich werde Deinen Versuch einmal umsetzen und schauen, ob damit mein Problem auch behoben ist.
Du sprichst mir aus der Seele. Dieses Problem kenne ich auch. Aber mit dem Dbgoto(Recno()) habe ich noch nicht probiert (denke ich mal). Laut Support, darf sowas aber überhaupt nicht vorkommen, was Du da beschreibst und was ich auch habe.
Ich werde Deinen Versuch einmal umsetzen und schauen, ob damit mein Problem auch behoben ist.
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!!