Ich habe eine Applikation mit Datenbank und ZeosDBO Komponente TZQuery.
Bei jedem Float-Datenbankfeld, das im Grid dargestellt wird, das NULL enthält, kommt eine Exception.
Das ist halt so in der TZQuery / Wandlung Float-Wert als darzustellende Zahl.
Weil das für mich lästig ist habe ich im Lazarus Menü:
Einstellungen >> Lazarus Optionen ... >> Sprach-Exceptions >> "Diese Exception Ignorieren"
die Exception "EConvertError"
mit aufgenommen.
Nun zappelt jedesmal bei dieser Exception Lazarus kurz in den Vordergrund, nacher kommt wieder beim Debuggen die Applikation.
So weit so gut.
Nun habe ich in der Datenbank viele Datensätze (ca. 500 Zeilen mit NULL Wert im Float Feld), dann zappelt das ganze etwas länger, zum Schluss wird meine Applikation nicht mehr dargestellt und nichts mehr (Lazarus / Applikation) lässt sich bedienen.
Lösche ich Datensätze, dann geht das Debuggen wieder.
Die Kompillierte Version (Strg+F9) funktioniert ohne Probleme.
Lazarus V0.9.26 / WinXP
Wo finde ich die Float-Text Konvertierung, damit ich die Exception abstellen kann? Dann könnte ich auch Debuggen und Lazarus würde sich nicht "Aufhängen".
Absturz bei zu vielen Exceptions
-
- Beiträge: 1466
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Absturz bei zu vielen Exceptions
EleLa - Elektronik Lagerverwaltung - www.elela.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- 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: Absturz bei zu vielen Exceptions
MmVisual hat geschrieben:Bei jedem Float-Datenbankfeld, das im Grid dargestellt wird, das NULL enthält, kommt eine Exception.
Das ist halt so in der TZQuery / Wandlung Float-Wert als darzustellende Zahl.
Brauchst du unbedingt das NULL, in der DB ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 1466
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Absturz bei zu vielen Exceptions
Würde ich ja machen, aber geht nicht, da es den Datensatz, der angezeigt wird gar nicht gibt.
Also hier der SQL-Befehl:
qParam.SQL.Add('SELECT P.*,');
qParam.SQL.Add('T.ID AS TID, T.NR AS TNR,');
qParam.SQL.Add('T.CANID, T.Gruppe_ID, T.Bezeichnung AS TBez,');
qParam.SQL.Add('D.ID AS DID, D.NR AS DNR, D.Ebene_ID,');
qParam.SQL.Add('D.Bezeichnung AS DBez, D.Datentyp,');
qParam.SQL.Add('D.MaxVal, D.MinVal, D.DefVal, D.Einheit,');
qParam.SQL.Add('D.DezStellen, D.ReadOnly');
qParam.SQL.Add('FROM paramdef D');
qParam.SQL.Add('JOIN tracker T');
qParam.SQL.Add('LEFT JOIN param P ON ( T.ID = P.TRACKER_ID');
qParam.SQL.Add('AND D.ID = P.PARAMDEF_ID )');
Beschreibung:
- Es gibt eine Tabelle mit der Parameter Vorlage (paramdef)
- Es gibt eine Tabelle mit den Geräten (tracker)
- der eigentliche Parameter stecht in Param
Somit hat die Anlage paramdef * tracker Parameter (= 100 * 300 = 30000 !!!)
Das ist ja Wahnsinn, also so viele Parameter kann niemand ordentlich verwalten.
Also steht in der param Tabelle kein einziger Datensatz erst mal drin. Dafür aber in der paramdef die Defaultwerte für die 100 Parameter, der jeweils erstmal für die 300 Geräte gleich ist.
Somit werden 30000 Parameter zwar angezeigt, aber alle mit Wert NULL (im OnGetText-Event des Datenbankfeldes wird hier anstatt NULL der Defaultwert ausgegeben).
Erst wenn jemand auf die Idee kommen sollte ein Parameter zu ändern, wird dieser in der param Tabelle angelegt.
Somit ist automatisch bei allen Parametereinträgen das Ergebnis der Datenbankabfrage = NULL, solange der Parameter nicht von Hand geändert wurde. Natürlich kann die Parameter-Eintragung auch gelöscht werden, dann ist automatisch wieder der Default-Wert aktiv.
Im Grunde eine geniale Sache, wenn da nur nicht das Problem mit den Exceptions wäre...
Vielen Dank für eure Unterstützung.
Also hier der SQL-Befehl:
qParam.SQL.Add('SELECT P.*,');
qParam.SQL.Add('T.ID AS TID, T.NR AS TNR,');
qParam.SQL.Add('T.CANID, T.Gruppe_ID, T.Bezeichnung AS TBez,');
qParam.SQL.Add('D.ID AS DID, D.NR AS DNR, D.Ebene_ID,');
qParam.SQL.Add('D.Bezeichnung AS DBez, D.Datentyp,');
qParam.SQL.Add('D.MaxVal, D.MinVal, D.DefVal, D.Einheit,');
qParam.SQL.Add('D.DezStellen, D.ReadOnly');
qParam.SQL.Add('FROM paramdef D');
qParam.SQL.Add('JOIN tracker T');
qParam.SQL.Add('LEFT JOIN param P ON ( T.ID = P.TRACKER_ID');
qParam.SQL.Add('AND D.ID = P.PARAMDEF_ID )');
Beschreibung:
- Es gibt eine Tabelle mit der Parameter Vorlage (paramdef)
- Es gibt eine Tabelle mit den Geräten (tracker)
- der eigentliche Parameter stecht in Param
Somit hat die Anlage paramdef * tracker Parameter (= 100 * 300 = 30000 !!!)
Das ist ja Wahnsinn, also so viele Parameter kann niemand ordentlich verwalten.
Also steht in der param Tabelle kein einziger Datensatz erst mal drin. Dafür aber in der paramdef die Defaultwerte für die 100 Parameter, der jeweils erstmal für die 300 Geräte gleich ist.
Somit werden 30000 Parameter zwar angezeigt, aber alle mit Wert NULL (im OnGetText-Event des Datenbankfeldes wird hier anstatt NULL der Defaultwert ausgegeben).
Erst wenn jemand auf die Idee kommen sollte ein Parameter zu ändern, wird dieser in der param Tabelle angelegt.
Somit ist automatisch bei allen Parametereinträgen das Ergebnis der Datenbankabfrage = NULL, solange der Parameter nicht von Hand geändert wurde. Natürlich kann die Parameter-Eintragung auch gelöscht werden, dann ist automatisch wieder der Default-Wert aktiv.
Im Grunde eine geniale Sache, wenn da nur nicht das Problem mit den Exceptions wäre...
Vielen Dank für eure Unterstützung.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 1466
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
- CPU-Target: 32/64Bit
Re: Absturz bei zu vielen Exceptions
Mit Lazarus V0.9.27 (Stand 13.01.09) Stürzt zwar Lazarus nicht komplett ab, also verschwindet nicht mehr aus dem Speichert, aber dafür Hängt die gesammte Applikation für mehrere Minuten.
Danach scheint es zu funktioneren. Ist es möglich das GDB Handling für deaktivierte Fehlermeldungen zu beschleunigen?
Vielen Dank, Lazarus wird immer besser
Danach scheint es zu funktioneren. Ist es möglich das GDB Handling für deaktivierte Fehlermeldungen zu beschleunigen?
Vielen Dank, Lazarus wird immer besser
EleLa - Elektronik Lagerverwaltung - www.elela.de