Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Beitrag von Soner »

Nur fkInternalCalc-Feld wird gändert, trotzdem wird Daten an den Server gesendet. Ist es Bug?

Ich habe eine TSQLQuery mit fkInternalCalc.
Ich habe die Update- und Insert-Kommandos von SqlQuery richtig erstellt, ohne fkInternalCalc-Feld.
Wenn ich jetzt fkInternalCalc-Feld ändere aber die anderen richtigen Spalten nicht ändere wird der Datensatz trotzdem gespeichert.
Das macht dann jedesmal 20-100 Zeilen die unnötig gespeichert werden, obwohl nichts geändert wurde außer fkInternalCalc-Feld.
Ich habe auch die "Update"-Eigenschaften von fkInternalCalc-Feld gelöscht, d.h. TField.Providerflags ist leer und Required ist false.
Ist das ein Fehler von Freepascal soll ich es als Bug melden oder mache ich Fehler und fkInternalCalc-Felder falsch verstanden?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Beitrag von af0815 »

Ohne Code bleibt die Glaskugel dunkel
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Beitrag von Soner »

Naja Quellcode ist nicht viel, es ist fcl und lcl-Kompenten ich habe es zusammengelickt.
Da es Firebird erforderte habe ich gedacht, das der Quellcode wahrscheinlich niemanden interessiert und habe mir arbeit erspart.
Ich glaube mit große Wahrscheinlichkeit haben die fcl-Db-Kompenenten fehler. Ich habe einiges in TDataSet und TBufferedDataset geändert und es hat nicht geholfen. Ich habe sogar einiges aus INternet abgeguckt, und es hat nicht funktioniert.
fkInternalCalc-Feld geht mit msegui-Db-KOmponenten auf Anhieb aber bei fcl-Db-Komponenten nicht.
Ich lade mal das Beispiel falls dich interessiert.
Im Beispielformular gibt es halb englische Erklärung, ich wollte es eigentlich im englischen Forum posten bzw. bug report machen, aber hatte keine Lust Stundenlang englisch zu schreiben.
Dateianhänge
SQLDB-fkinternaclcalc-pub.zip
(126.67 KiB) 90-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Beitrag von af0815 »

Interessantes Problem :-)

Vorweg Delphi-DB Komponenten und Lazarus SQLDB Komponenten sind nicht vergleichbar. Der interne Aufbau unterscheidet sich komplett. Nur bei ZEOS gibt es eine Kompatibilität zwischen Delphi und Lazarus.

Du Fragst das Feld MYFIELD schon in der Datenmenge ab (SQLQuery1.SQL: SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, 0 AS MYFIELD FROM customer ORDER BY CUSTOMER ) Meinem Verständnis nach hat der Server mit einem internen Feld nichts zu tun. Nach dem das ja berechnet werden soll.

Nur was willst du mit dem berechneten Feld MYFIELD ? Ich habe jetzt im Source keinen Hinweis gefunden. Es geht auch darum ob du fkCalculated oder fkInternalCalc verwenden musst. Wenn mir das klarer wird, so kann man das Bsp. auch auf MYSQL umstellen und das einfacher testen.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Beitrag von mse »

Soner hat geschrieben:fkInternalCalc-Feld geht mit msegui-Db-KOmponenten auf Anhieb aber bei fcl-Db-Komponenten nicht.

Dazu gibt es einen Bug-Report von 2006:
https://bugs.freepascal.org/view.php?id=7157
Ich benutze fkInternalCalc-Felder häufig und finde sie sehr praktisch, darum wurden sie in MSEgui von Anfang an implementiert.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Beitrag von Soner »

af0815 hat geschrieben:Interessantes Problem :-)

Vorweg Delphi-DB Komponenten und Lazarus SQLDB Komponenten sind nicht vergleichbar. Der interne Aufbau unterscheidet sich komplett. Nur bei ZEOS gibt es eine Kompatibilität zwischen Delphi und Lazarus.

Du Fragst das Feld MYFIELD schon in der Datenmenge ab (SQLQuery1.SQL: SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, 0 AS MYFIELD FROM customer ORDER BY CUSTOMER ) Meinem Verständnis nach hat der Server mit einem internen Feld nichts zu tun. Nach dem das ja berechnet werden soll.

Nur was willst du mit dem berechneten Feld MYFIELD ? Ich habe jetzt im Source keinen Hinweis gefunden. Es geht auch darum ob du fkCalculated oder fkInternalCalc verwenden musst. Wenn mir das klarer wird, so kann man das Bsp. auch auf MYSQL umstellen und das einfacher testen.

Andreas

Es hat nichts mit Delphi zu tun. Ich habe es unter Delphi nie verwendet. Der Vorteil ist wenn man zusätzlich zu Daten eine Variable braucht, dann kann man andere Listen verzichten. Damit wäre z.B. das ganze Programm schneller weil man "locate" in sekundären Tabellen/Listen verzichten könnte.
Ich brauche es für dynamische Saldo-Berechnung gebraucht und wenn ich es verwenden könnte, würde ich in vielen Stellen einsetzen, dann könnte ich viele Codeteile löschen.
Eigentlich sind die Calculated-Felder nicht zu sehr gut, es wird sehr oft neu berechnet und mann kann bei der Berechnung von Calculated-Felder nicht scrollen, weil das wieder OnCalculate-Ereignis auslöst (stack überlauf).

Ich frage nicht das Feld MYFIELD in der Datenmenge ab, ich lasse von der Datenbank ein Integerfeld erstellen, damit ich überhaupt ein fkInternelcalc-Feld erstellen, ohne das geht es nicht, wie Martin schon in sein Bugreport gemeldet hat. Durch erstellen von Persistente Datenfelder markiere ich dieses Feld als fkInternalcalc-Field.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Beitrag von Soner »

Was ist auch nicht verstehe ist, obwohl ich angebe, dass dieses Feld nicht "updated" werden soll, löst es ein update aus. (sieheTField.Providerflags)
Warum erstellt man eine Eigenschaft, wenn man es doch nicht benutzt.
https://www.freepascal.org/docs-html/fcl/db/tproviderflags.html

Antworten