Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Was kompiliert Delphi 10.3.3 da??? (https://www.delphipraxis.net/202637-kompiliert-delphi-10-3-3-da.html)

harfes 24. Nov 2019 12:23

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

zeras 24. Nov 2019 12:32

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:
Close;
auf dein Formular und nicht auf deine DB Verbindung.

Und benutze auch bitte die Delphi Tags. Danke.

Daniel 24. Nov 2019 12:44

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.

harfes 24. Nov 2019 13:37

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

Daniel 24. Nov 2019 13:40

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.

harfes 24. Nov 2019 13:55

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

Uwe Raabe 24. Nov 2019 13:57

AW: Was kompiliert Delphi 10.3.3 da???
 
Was ist denn DM1.DataModule1.IBPlanungSQL für ein Typ?

jaenicke 24. Nov 2019 13:59

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:

Zitat von harfes (Beitrag 1451934)
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.

In 10.2 gab es in dem Objekt im with offenbar eine entsprechende Methode, die vermutlich die Verbindung geschlossen hat.
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.

Uwe Raabe 24. Nov 2019 14:00

AW: Was kompiliert Delphi 10.3.3 da???
 
Zitat:

Zitat von harfes (Beitrag 1451934)
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.

Hast du eventuell bei 10.3.3 eine neue Version der Komponente installiert? Vielleicht war vorher ein Close vorhanden.

Zitat:

Zitat von harfes (Beitrag 1451931)
ABER: warum funktioniert das in 10.2 und warum schliesst sich das Programm nicht schon beim ersten Close?

Weil das Close nur eine CM_RELEASE Message in die Queue stellt.

zeras 24. Nov 2019 14:15

AW: Was kompiliert Delphi 10.3.3 da???
 
Zitat:

Zitat von harfes (Beitrag 1451931)

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

Ist denn 10.3.1 und 10.3.2 so schlecht?
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.
Seite 1 von 6  1 23     Letzte »    

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