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

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Antworten
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
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]

Beitrag 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.
Zuletzt geändert von dtmackenzie am Fr, 28. Mai 2021 9:13, insgesamt 2-mal geändert.
Viele Grüße,
David
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

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

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag von brandelh »

und wenn es stimmt eine Katastrophe :oops:
Gruß
Hubert
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
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!

Beitrag 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
Viele Grüße,
David
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

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

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
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!

Beitrag 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
Viele Grüße,
David
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

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

Beitrag von Werner_Bayern »

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!>
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
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!

Beitrag 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.
Viele Grüße,
David
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
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!

Beitrag von dtmackenzie »

Ich habe nun an Alaska Support geschrieben.
Viele Grüße,
David
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
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!

Beitrag 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!
Viele Grüße,
David
Antworten