Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FIBPlus Dataset Refresh (https://www.delphipraxis.net/160709-fibplus-dataset-refresh.html)

Der Jan 27. Mai 2011 08:33

Datenbank: Firebird • Version: 2.0 • Zugriff über: FIBPlus6.8

FIBPlus Dataset Refresh
 
Hallo miteinander,

wie kann man in einem TpFIBDataSet den aktuellen Record nach dem Post refreshen lassen? Mein Gedanke war, mittels der Methode "Refresh" oder der Option "poRefreshAfterPost". Doch beides bringt keine Resultate, der Record wird nicht refreshed. Das RefreshSQL sollte richtig sein.

Hintergrund oder auch die ausführliche Variante: In ein Dataset wird ein Record eingefügt oder bearbeitet (Insert/Edit), mit einigen Werten befüllt und gesendet (Post). Dargestellt wird es in einem DevExpress cxGrid, dieses hatte ich zuerst in Verdacht, da man hier aufgrund der vielen Möglichkeiten schnell mal etwas "verbockt" hat, aber der Effekt tritt bei einem normalen TDBGrid auch auf. Nach dem Post steht der Eintrag in der Datenbank. Dort wurden mittels Trigger (BeforeInsert/BeforeUpdate) einige Felder berechnet / korrigiert. Diese Felder sollen im Grid aber auch angezeigt werden. Also muß das Dataset refreshed werden. Hier tritt das o.g. Problem auf. Der Record wird nicht refreshed.
Ich möchte nicht mit FullRefresh arbeiten und auch nicht unbedingt das Dataset neu öffnen müssen.

Gernot Huber 28. Mai 2011 08:18

AW: FIBPlus Dataset Refresh
 
Hallo Jan,

um Dir bei diesen Problem helfen zu können, müsste man auf jeden Falll die SQL-Anweisungen sehen, die im Dataset stehen.

Ich habe mal ein kleines Testprogramm geschrieben, mit dem funktioniert der Refresh auf die berechneten Spalten.

Chemiker 29. Mai 2011 15:05

AW: FIBPlus Dataset Refresh
 
Hallo Der Jan,

darüber hinaus müssten man wissen ob die Transaktion mit Commit abgeschlossen ist. Wenn nicht welche Einstellungen in der Transaktionen eingestellt worden sind.

Bis bald Chemiker

Der Jan 30. Mai 2011 10:46

AW: FIBPlus Dataset Refresh
 
Zitat:

Zitat von Gernot Huber (Beitrag 1103413)
mit dem funktioniert der Refresh auf die berechneten Spalten.

Das stimmt mich doch schon mal optimistisch :)

Hier die SQLs

Code:
-- Select SQL

select
  V.VIRTUALARTIKELID,
  V.FIR,
  V.FIL,
  V.ARTNR,
  V.ARTNAME,
  V.DELETED,
  V.MARK,
  V.CREATEUSERID,
  U1.REALNAME as CREATEUSER,
  V.CREATEDATE,
  V.MODIFYUSERID,
  U2.REALNAME as MODIFYUSER,
  V.MODIFYDATE
from
  T_VIRTUALARTIKEL V
  left outer join USERLIST U1 on U1.USERID = V.CREATEUSERID
  left outer join USERLIST U2 on U2.USERID = V.MODIFYUSERID
order by
  V.ARTNR asc

--Der FIBPlus-Property Editor macht dieses RefreshSQL draus,
--was imho gut aussieht :)

select
  V.VIRTUALARTIKELID,
  V.FIR,
  V.FIL,
  V.ARTNR,
  V.ARTNAME,
  V.DELETED,
  V.MARK,
  V.CREATEUSERID,
  U1.REALNAME as CREATEUSER,
  V.CREATEDATE,
  V.MODIFYUSERID,
  U2.REALNAME as MODIFYUSER,
  V.MODIFYDATE
from
  T_VIRTUALARTIKEL V
  left outer join USERLIST U1 on U1.USERID = V.CREATEUSERID
  left outer join USERLIST U2 on U2.USERID = V.MODIFYUSERID
 WHERE
        V.VIRTUALARTIKELID = :OLD_VIRTUALARTIKELID
Zitat:

Zitat von Chemiker (Beitrag 1103545)
ob die Transaktion mit Commit abgeschlossen ist.

Ist sie. AutoCommit = true

Gernot Huber 30. Mai 2011 11:16

AW: FIBPlus Dataset Refresh
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jan,

auf den ersten Blick kann ich hier keinen Fehler finden.

Ich habe Dir mal mein Testprogramm angehängt, evtl. kannst Du damit Deinen Fehler finden.

Gruß
Gernot

Der Jan 30. Mai 2011 14:40

AW: FIBPlus Dataset Refresh
 
Hello Gernot,

schon mal danke für deine Bemühungen. Ich kann es erst morgen testen, auf den ersten Blick sehe ich nicht wirklich einen Unterschied zu dem, was ich mache. Kannst du evtl. die Metadaten der Testdatenbank anhängen bitte ?

Gernot Huber 30. Mai 2011 16:17

AW: FIBPlus Dataset Refresh
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jan,

hier sind die Metadaten.

Gruß, Gernot

Der Jan 31. Mai 2011 10:46

AW: FIBPlus Dataset Refresh
 
Hallo Gernot,

in der Tat hat mich dein Beispiel auf den richtigen Weg gebracht. So wie es aussieht, muss man die AutoUpdateOptions nutzen, obwohl diese, lt. Doku, zur automatischen Erzeugung der ModifySQLs bzw. clientseitigen ID-Erzeugung angedacht sind. Wenn man die beinhalteten Properties setzt (wichtig: WhenGetGenId nicht auf wgNever :) ) dann funktioniert es und der Record wird refreshed.
Vielen Dank für deine Hilfe!

Ich muss allerdings gestehen, ich halte es für zumindest fragwürdig, den User für die Erringung eines eigentlich rudimentären Features zur clientseitigen ID-Erzeugung zu geiseln, aber letzen Endes bin ich froh, dass es überhaupt geht. Falls ich noch einen anderen Weg finde, werde ich in sicher hier irgendwo posten :)

Gernot Huber 31. Mai 2011 11:05

AW: FIBPlus Dataset Refresh
 
Hallo Jan,

bei mir funktioniert der Refresh auch, wenn WhenGetGenId auf wgNever gesetzt ist.

Du kannst dann aber keinen neuen Datensätze in die Tabelle einfügen.

Ich arbeite allerdings noch mit FIBPlus 6.4.1 hier könnte es evtl. Unterschiede geben.

Gruß
Gernot


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz