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

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

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

Beitragvon Soner » 15. Okt 2017, 14:33 Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

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?
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon af0815 » 15. Okt 2017, 19:17 Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

Ohne Code bleibt die Glaskugel dunkel
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3479
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Soner » 16. Okt 2017, 00:19 Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon af0815 » 16. Okt 2017, 06:05 Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

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).
af0815
 
Beiträge: 3479
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon mse » 16. Okt 2017, 07:03 Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

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.
mse
 
Beiträge: 1986
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Soner » 16. Okt 2017, 10:21 Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

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: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon Soner » 16. Okt 2017, 10:41 Re: Nur fkInternalCalc-Feld wird gändert, trotzdem ... bug?

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
Soner
 
Beiträge: 411
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste

porpoises-institution
accuracy-worried