Doppelte Nummervergabe.

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1931
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo,

was soll denn dbskip(0) denn bewirken ??, wenn er auf der gleichen Position bleibt
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16552
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 114 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
er refresht den Buffer, die Daten werden also wirklich erneut eingelesen.

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15703
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 70 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

wie Martin schon schrieb werden die Daten auf dem Clientrechner neu eingelesen. Das bewirkt gleichzeitig (oder besser zuvor), dass die Daten auf dem Server vorher weggeschrieben werden.
Gruß
Hubert
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Beitrag von Sören »

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:

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
- 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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21219
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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.
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!!
Antworten