AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FireDAC, cxGrid, Refresh schägt fehl
Thema durchsuchen
Ansicht
Themen-Optionen

FireDAC, cxGrid, Refresh schägt fehl

Ein Thema von haentschman · begonnen am 7. Feb 2019 · letzter Beitrag vom 8. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

FireDAC, cxGrid, Refresh schägt fehl

  Alt 7. Feb 2019, 09:35
Datenbank: MSSQL • Version: 2017 • Zugriff über: FireDAC
Hallöle...

Ich komme wieder mal mit ausergewöhnlichen Sachen... Ich hoffe auf Ansatzpunkte.

Gegeben:
EINE Exe die auf den Server liegt und von den Clienten gestartet wird.


Native Client unterschiedlich auf den Workstations installiert:

2012
2008
2008 + 2012

SOLL:

Wenn ich einer Workstation einen Datensatz anlege, dann soll er auf der anderen Workstation, nach Refresh, angezeigt werden.

Problem:

Wenn ich einer Workstation einen Datensatz anlege, steht er nach dem Post in der DB.
Auf verschieden Workstations wird das Refresh einfach ignoriert... wie immer auf dem Entwicklungsrechner nicht!
Bei anderen Grids kommt es manchmal vor, das beim Eintragen eines Wertes und dem anschießenden OnChange, das der Lookup Wert aus einer anderen Tabelle nicht korrekt geholt wird. Die Datenmenge wird über Dataset.Locate durchsucht. Es scheint das die Locate Datenmenge immer auf dem selben Datensatz steht.
...Wenn die Anwendung wieder neu gestartet wird, sind alle Werte korrekt in den Grids vorhanden.

Refresh:
cxGrid.DataController.RefreshExternalData; ...wird zwar fehlerfrei ausgeführt, aber das Grid interessiert das nicht. Über den Refresh Button im Grid Navigator funktioniert es. (was ich gesehen habe)

...Ideen?

Geändert von haentschman ( 8. Feb 2019 um 09:25 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#2

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 7. Feb 2019, 10:08
Hmm..

Hat den der MS SQL-Server überhaupt (nutzbare) Events?

Nicht jedes Datenbankssystem kann so etwas.

Es sollte dann auch egal sein, welche DB-Komponenten verwendet werden, denn wenn die Datenbank so was nicht hat, kann auch in der Komponente kein Event zum Refreshen ausgelöst werden.

Somit bliebe nur ein Timer, welcher den Query immer wieder schließt und öffnet.
Ich glaube, das ein Query.Refresh nur die bereits vorhandenen Datensätze aktualisiert (wenn sich dort was geändert hat), jedoch nicht neue holt.

So ist es zu mindestens bei ADO.. (wenn ich mich richtig erinnere..)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 7. Feb 2019, 10:25
Danke...
Die Software ist die gleiche...und das hat immer funktioniert! Wir sind mit der DB nur auf einen anderen Server umgezogen. Neue Installation (Standard Instanz 2017). Kann das damit zusammenhängen?

Geändert von haentschman ( 8. Feb 2019 um 09:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#4

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 7. Feb 2019, 10:58
Wir sind mit der DB nur auf einen anderen Server umgezogen. Neue Installation (Standard Instanz 2017). Kann das damit zusammenhängen?
Wenn das nur wirklich stimmt, würde ich da auch bei der Fehlersuche ansetzen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 7. Feb 2019, 11:58
Zuvor hat was heute Probleme macht immer funktioniert?

Du verwendest die selben Nativeclients wie zuvor? Auch dort lauert allgemein, losgelöst von diesem Fall, ein wenig ein Potential das Ungemach reproduzierbar im Einzelfall kann bereiten. Dann aber konsistent über alle Anwendungen.

Der Datensatz ist tatsächlich committed?
Und trotzdem ist der neu eingefügte Satz mit DataSet Close und Open nicht sichtbar?


a) Schauen ob der Datensatz mit Dataset Close und Open tatsächlich sichtbar ist und
b) Muss man sich die Settings der Grids und Views anschauen.




Danke...
Die Software ist die gleiche...und das immer funktioniert! Wir sind mit der DB nur auf einen anderen Server umgezogen. Neue Installation (Standard Instanz 2017). Kann das damit zusammenhängen?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 7. Feb 2019, 12:55
Neuigkeiten:
Wir sind mit der DB wieder auf den alten Server 2012 umgezogen. (noch nicht live aber mit der gleichen Konstellation).
...das Refresh Problem, mit 2 getrennten Workstations, ist nicht mehr an dieser Stelle aufgetaucht. Die Daten werden richtig neu eingelesen.

Das Dataset.Locate macht immer noch Probleme...

Zitat:
a) Schauen ob der Datensatz mit Dataset Close und Open tatsächlich sichtbar ist und
b) Muss man sich die Settings der Grids und Views anschauen.
..so war es. Die Daten lagen nach dem Post in der DB...aber mit Refresh wurden sie nicht abgeholt.

Ich tippe auch inzwischen auf eine Einstellung des SQL Servers. Welche kämen da in Frage?

Zitat:
Wenn das nur wirklich stimmt
...

Geändert von haentschman ( 8. Feb 2019 um 08:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#7

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 8. Feb 2019, 08:57
Was zum grübeln...

[Locate]
Ich konnte das im Screenshot festhalten.
1. Das Locate kommt TRUE zurück (in diesem Falle ist der Suchbegriff "R422D")
2. Der Wert aus der Tabelle wird mit 0 ausgegeben (sollte 2729 sein)
-> kein Wert in der Tabelle hat den Wert 0 (Original NULL)
-> Wert auf -1 geändert, weil ich denke, das der den letzten Datensatz zurückgibt. (Locate sollte aber dann eigentlich False sein)

...ich habe die Anwendung neu gestartet, alles arbeitet wie erwartet.

...jetzt kommt ihr.
Miniaturansicht angehängter Grafiken
fehler-1.jpg   fehler-3.png  

Geändert von haentschman ( 8. Feb 2019 um 09:22 Uhr)
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 8. Feb 2019, 12:34
Dann wurde der Datenstand mit dem Ende der Transaktion vermutlich committed, wenn du den Wert nach dem Neustart der Applikation richtig siehst.

Handelt es sich möglw. um ein Ungemach aus dem Eck Transaktion und früher Autocommit?

Ich vermute du arbeitest mit einer Query.

Wenn du mit Post den Satz schreibst dann sieht deine Transaktion zwar den neuen Satz aber alle anderen prinzipiell mal nicht. Das brauche ich dir so mal nicht erzählen.


---

Ich bin ReadCommitted (Oracle).

Beim SQL Server gibt es seit 2005 eine Schraube für eine art Archivelog Mode. Die Sperren beim SQL Server waren mir schon immer suspekt. Das kann man alles zentral konfigurieren. Mit SQL Server habe ich schon lange nichts mehr gemacht. Deswegen traue ich mir auf die Entfernung nicht gut zu raten.

---

NULL und 0 ist ein denke ich ein anderes Thema. Hast du in einer Field Definition eine DefaultExpression definiert?

Was zum grübeln...

[Locate]
Ich konnte das im Screenshot festhalten.
1. Das Locate kommt TRUE zurück (in diesem Falle ist der Suchbegriff "R422D")
2. Der Wert aus der Tabelle wird mit 0 ausgegeben (sollte 2729 sein)
-> kein Wert in der Tabelle hat den Wert 0 (Original NULL)
-> Wert auf -1 geändert, weil ich denke, das der den letzten Datensatz zurückgibt. (Locate sollte aber dann eigentlich False sein)

...ich habe die Anwendung neu gestartet, alles arbeitet wie erwartet.

...jetzt kommt ihr.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#9

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 8. Feb 2019, 12:50
Du denkst schon wieder zu weit...
Die Tabelle wo das Locate drauf ausgeführt wird ist eine (sinngemäß) READONLY Table. Das stehen nur Vorgaben drin. Da gibt es kein Commit. Der Datensatzzeiger steht nicht da wo er hin soll...sondern immer auf dem Datensatz 15. Nach einem Neustart der Anwendung wird das Locate anstandslos ausgeführt...nur wie lange.

PS: Ich tausche das Locate durch ein "Gib mir mal den Datensatz" SQL aus.

Das hat nix mit dem Refresh Problem zu tun. (Ich hätte das lieber in seperate Threads gemacht )

Zitat:
NULL und 0 ist ein denke ich ein anderes Thema
...imho ergibt .FieldByName('Blubb').AsInteger bei NULL eine 0
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
555 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: FireDAC, cxGrid, Refresh schägt fehl

  Alt 8. Feb 2019, 13:14
So in die Richtung?

Der Beitrag wäre spezifisch zu FireDAC.

Bei Devexpress gibt es Myriaden von Anfragen die in diese Richtung gehen.

Beispiel

--

Ich dachte jetzt an ein Delphi TField mit Bezug auf die DefaultExpression.

Du denkst schon wieder zu weit...
Die Tabelle wo das Locate drauf ausgeführt wird ist eine (sinngemäß) READONLY Table. Das stehen nur Vorgaben drin. Da gibt es kein Commit. Der Datensatzzeiger steht nicht da wo er hin soll...sondern immer auf dem Datensatz 15. Nach einem Neustart der Anwendung wird das Locate anstandslos ausgeführt...nur wie lange.

PS: Ich tausche das Locate durch ein "Gib mir mal den Datensatz" SQL aus.

Das hat nix mit dem Refresh Problem zu tun. (Ich hätte das lieber in seperate Threads gemacht )

Zitat:
NULL und 0 ist ein denke ich ein anderes Thema
...imho ergibt .FieldByName('Blubb').AsInteger bei NULL eine 0
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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