Seite 1 von 1

Nach DBAPPEND() mit aktivem Filter wird nicht mehr auf den neuen Datensatz positioniert! [ERLEDIGT]

Verfasst: Mi, 19. Mai 2021 11:50
von dtmackenzie
Das war doch früher immer so, selbst wenn der neue (leere) Datensatz nicht den Filterkriterien entspricht, oder bin ich total verwirrt?

Die Auswirkungen bei mir sind verheerend.

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 13:57
von georg
Hallo, David -


das wäre dann - wie Du es beschrieben hast - gegen das, was die Dokumentation aussagt:
The database function DbAppend() creates a new, empty record at the end of a database file. The record pointer is positioned on the new (last) data record, regardless of active filter or index conditions.
Wäre also eine Meldung an Alaska Software wert.

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 14:10
von brandelh
und wenn es stimmt eine Katastrophe :oops:

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 14:12
von dtmackenzie
Danke Georg!

Dann bin ich vielleicht doch nicht so irre geworden, wie ich zu vermuten angefangen habe... ;-)

Da anscheinend keine andere Leute das Problem gehabt haben, habe ich ein bisschen die Befürchtung, dass es irgendwie spezifisch zu meiner Umgebung sein könnte. Dann muss ich wohl versuchen, Alaska ein klares Beispiel zu geben. Meine Benutzer machen mir aber (natürlich) derzeit Stress...

Ich habe übrigens Xbase++ 2.00 Professional Edition Build: 1425

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 14:25
von Tom
Ich bin noch nicht dazu gekommen, es zu testen, aber es gibt bei uns nicht viele Szenarien, in denen auf gefilterten Tabellen DbAppends stattfinden.

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 14:55
von dtmackenzie
Das Problem ist echt, habe ich gerade mit Alaskas MDIDEMO App nachvollzogen.
Ich werde Frank darum bitten, hier reinzuschauen.

In MDIPART.PRG habe ich folgende Funktion zum Test ersetzt und ein Breakpoint auf der Zeile lDone := .T. gesetzt:

Code: Alles auswählen

FUNCTION OpenParts( nRecno )
   LOCAL nOldArea := Select(), lDone := .F.
   LOCAL r1, r2, p1, p2

 * Die VIA-KLausel musste entfernt werden, damit das USE-Kommando
 * die akutelle DatabaseEngine (pgdbe) verwendet und nicht die
 * FOXCDX.
 */
#ifdef USE_POSTGRES
   USE Parts NEW
#else
   USE Parts NEW VIA FOXCDX
#endif
   IF ! NetErr()
      SET INDEX TO Parts
      IF nRecno <> NIL
         DbGoto( nRecno )
      ENDIF
      SET FILTER TO LEFT(partno, 2) == "20"
      DBGOTOP()
      r1 := RECNO()
      p1 := partno
      DBAPPEND()
      r2 := RECNO()
      p2 := partno
      lDone := .T.
   ELSE
      DbSelectArea( nOldArea )
      MsgBox( "Tabelle kann nicht geöffnet werden" )
   ENDIF

RETURN lDone
Der Debugger zeigt mir dann Folgendes (QED!):

p1 : "20-00814"
r1 : 6
p2 : "20-00814"
r2 : 6
Recno() : 6

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 15:01
von Werner_Bayern
Es gibt mehrere offene PDRs in die Richtung, vor allem den 7160 solltest Dir ansehen.

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 15:17
von dtmackenzie
Danke Werner!

Die Beschreibung in 7160 klingt relative harmlos und unterschätzt das Problem sehr stark.

Das Hauptproblem ist nicht nur, dass Werte aus dem alten Datensatz sichtbar sind, sondern dass der alte Datensatz noch der aktuelle ist!
Man schreibt Werte laut Definition in Felder des neuen Datensatzes ein, aber tatsächlich überschreibt man den alten Datensatz.
Das führt natürlich zu schwerwiegenden Datenkorruptionen.

Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Mi, 19. Mai 2021 15:37
von dtmackenzie
Ich habe nun an Alaska Support geschrieben.

Re: Nach DBAPPEND() mit aktivem Filter wird nicht mehr auf den neuen Datensatz positioniert!

Verfasst: Fr, 28. Mai 2021 9:12
von dtmackenzie
Alaska haben das Problem verstanden und es wird in einer zukünftigen Build gelöst.

Inzwischen gibt es aber ein Workaround, was praktisch transparent wirkt wenn DBAPPEND() mit #command umdefiniert wird - siehe PDR 7160:
https://www.alaska-software.com/scripts ... PDRID=7160

Vielen Dank an Alaska Support und insbesondere an Till Warweg!