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