Nach DBAPPEND() mit aktivem Filter wird nicht mehr auf den neuen Datensatz positioniert! [ERLEDIGT]
Moderator: Moderatoren
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Nach DBAPPEND() mit aktivem Filter wird nicht mehr auf den neuen Datensatz positioniert! [ERLEDIGT]
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.
Die Auswirkungen bei mir sind verheerend.
Zuletzt geändert von dtmackenzie am Fr, 28. Mai 2021 9:13, insgesamt 2-mal geändert.
Viele Grüße,
David
David
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
Hallo, David -
das wäre dann - wie Du es beschrieben hast - gegen das, was die Dokumentation aussagt:
das wäre dann - wie Du es beschrieben hast - gegen das, was die Dokumentation aussagt:
Wäre also eine Meldung an Alaska Software wert.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.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
und wenn es stimmt eine Katastrophe
Gruß
Hubert
Hubert
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
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
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
Viele Grüße,
David
David
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9387
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 103 Mal
- Danksagung erhalten: 362 Mal
- Kontaktdaten:
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
Ich bin noch nicht dazu gekommen, es zu testen, aber es gibt bei uns nicht viele Szenarien, in denen auf gefilterten Tabellen DbAppends stattfinden.
Herzlich,
Tom
Tom
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
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:
Der Debugger zeigt mir dann Folgendes (QED!):
p1 : "20-00814"
r1 : 6
p2 : "20-00814"
r2 : 6
Recno() : 6
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
p1 : "20-00814"
r1 : 6
p2 : "20-00814"
r2 : 6
Recno() : 6
Viele Grüße,
David
David
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2126
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
Es gibt mehrere offene PDRs in die Richtung, vor allem den 7160 solltest Dir ansehen.
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
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.
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.
Viele Grüße,
David
David
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Nach DBAPPEND() mit aktivem Filter wird anscheinend nicht mehr auf den neuen Datensatz positioniert!
Ich habe nun an Alaska Support geschrieben.
Viele Grüße,
David
David
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Nach DBAPPEND() mit aktivem Filter wird nicht mehr auf den neuen Datensatz positioniert!
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!
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!
Viele Grüße,
David
David