Was kompiliert Delphi 10.3.3 da???
Ich habe eine procedure in einem Programm, die unter 10.2 völlig problemlos läuft (es wird beim Klick auf einen Button aus einem DBgrid ein DBKey ausgelesen und diesem Eintrag im Grid dann eine andere Farbe gegeben und das in der zugehörigen DB (Firebird mit IBDAC) gesichert):
if (DBPlanner1.Items.Selected.DBKey<>'') then begin laufendenr:=DBPlanner1.Items.Selected.DBKey; with DM1.DataModule1.IBPlanungSQL do begin Close; SQL.Clear; SQL.Add('UPDATE PLANUNG SET '); SQL.Add('ITEMCOLOR = :ITEMCOLOR, ERLEDIGT = :ERLEDIGT '); SQL.Add('WHERE ITEMKEY = :OLD_ITEMKEY'); Params[0].Value:=7; Params[1].Value:='T'; Params[2].Value:=laufendenr; ExecQuery; Close; end; DM1.DataModule1.IBTransaction1.CommitRetaining; DBPlanner1.Refresh; end else begin ShowMessage('Bitte einen Termin markieren!'); end; Wenn ich mein Programm nun unter 10.3.3 kompiliere (ohne Fehler), starte (völlig problemlos) und diesen Button betätige, wird das Programm geschlosssen! Die Datenänderung wird aber vorher noch in der DB gesichert! Ich habe auch schon das DBPlanner1.Refresh ausgeschaltet - es schliesst sich trotzdem. Die genutzten Komponenten sind die gleichen wie in 10.2 und aktuell (IBDAC und TMS DBAdvGrid). Es gibt keine Fehlermeldung...wie komme ich da an das Problem heran??? Hartmut |
AW: Was kompiliert Delphi 10.3.3 da???
Nimm doch bitte mal die With Anweisung weg und schreibe alle Objekte komplett aus.
Möglicherweise bezieht sich das
Delphi-Quellcode:
auf dein Formular und nicht auf deine DB Verbindung.
Close;
Und benutze auch bitte die Delphi Tags. Danke. |
AW: Was kompiliert Delphi 10.3.3 da???
Du kannst einen Breakpoint setzen und dann die paar Zeilen durchlaufen und so schauen, welche Zeile für das Programmende verantwortlich ist.
Und ja, das "Close" ist ein heißer Kandidat. |
AW: Was kompiliert Delphi 10.3.3 da???
And the winner is: CLOSE !!!
ABER: warum funktioniert das in 10.2 und warum schliesst sich das Programm nicht schon beim ersten Close? Noch was: wenn ich hinter DM1.DataModule1.IBPlanungSQL den Punkt setze, um die Möglichkeiten anzuzeigen, dann gibt es gar kein Close!!! Warum gibt das keinen Compilerfehler??? Sorry, aber nachdem 10.3.1 und 10.3.2 schon nicht zum produktiven Arbeiten geeignet waren, sehe ich aktuell auch bei 10.3.3 noch keine Veranlassung zum Jubeln! Ja, es hat sich vieles verbessert - aber irgendwie macht mir so ein (nicht angezeigter) Fehler doch Sorgen... Hartmut |
AW: Was kompiliert Delphi 10.3.3 da???
Fehler ist hier vielleicht der falsche Begriff. Bei einer der von Dir genutzten Klassen sich sich offenbar eine Methode ".Close" in der Sichtbarkeit verschoben. Bei Dir äußert sich das eben sehr drastisch - ist aber exakt das Paradebeispiel, mit dem vor der Verwendung von "with" gewarnt wird.
Wenn Du das Ganze ohne "with" voll ausprogrammierst, wird Dein Code tadellos laufen. |
AW: Was kompiliert Delphi 10.3.3 da???
Ja, da hast Du recht: durch das ausprogrammieren habe ich den "Fehler" ja auch gefunden bzw eure Anmerkung verifiziert. Im nachhinein ist es ja auch merkwürdig, dass der Compiler von 10.2 auch nicht meckert - das close aber anscheinend stillschweigend ignoriert, so dass der Code funktioniert.
Ich werde morgen mal ein grösseres Projekt mit der 10.3.3 testen... Hartmut |
AW: Was kompiliert Delphi 10.3.3 da???
Was ist denn DM1.DataModule1.IBPlanungSQL für ein Typ?
|
AW: Was kompiliert Delphi 10.3.3 da???
Sei froh, dass der Fehler so offen sichtbar aufgefallen ist. Mit with handelt man sich oft Fehler ein, die man nur schwer überhaupt eingrenzen und finden kann, wenn sie bei einem Nutzer auffallen.
Außerdem ist es einer der Hauptgründe für Probleme bei Updates auf eine neue Delphiversion. Und debuggen lässt sich solch ein Code ja auch kaum, weil der Debugger mit with nicht arbeiten kann. Dazu kommt noch die schlechte Lesbarkeit, weil du nie siehst was wozu gehört (in diesem Fall Close). Und weil du auch kicht siehst, ob deine gewünschte Zuordnung mit der des Compilers übereinstimmt... Wer bei uns Code mit with eincheckt, wird virtuell gesteinigt. Zitat:
Das ist ja genau das Tückische, wenn man mit with nicht explizit schreibt wozu etwas gehören soll. Dann muss der Compiler nach seinen Regeln dies ermitteln. |
AW: Was kompiliert Delphi 10.3.3 da???
Zitat:
Zitat:
|
AW: Was kompiliert Delphi 10.3.3 da???
Zitat:
Ich habe ein größeres Projekt immer wieder auf die aktuelle Version hochgezogen und konnte keine Probleme feststellen. Natürlich könnte alles viel besser sein, aber wer hat schon ein Projekt, was man nicht verbessern könnte?:lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 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