procedure TForm1.Button_Verbindungen_trennenClick(Sender: TObject);
begin
// Online-Verbindung trennen
If MySQL57Connection1.Connected then
begin
MySQL57Connection1.close;
MySQL57Connection1.free;
end;
//
// XAMPP-Verbindung trennen
If MySQL80Connection1.Connected then
begin
MySQL80Connection1.close;
MySQL80Connection1.free;
end;
end;
Nur beim Trennen der Verbindung gibt es diese Fehlermeldung:
Hast du du die Verbindung mit create erzeugt ? Wenn nein, keine free verwenden. Wenn du mit free arbeitest, dann zuerst die mit der Connection verbundenen Komponenten die Verbindung auf nil setzen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Hmm, für mich liest sich das doch deutlich eher so, wie einige hier schon vermutet haben: dass du versuchst, Objekte, die du aus der Palette auf ein Form oder Datenmodul gezogen hast - wofür ua auch ihre Standard-Benamsung spricht - mit Free freizugeben. Dementsprechend enthält dein Verbindungsaufbau auch kein Create dieser Objekte - sie sind 'schon da' und das Form bzw Datenmodul ist für die Freigabe zuständig. Kommentier doch einfach mal die beiden Zeilen mit .Free in deiner Trennungsroutine aus.
Brauche in diesem Fall beides nicht.
Da kann man sich natürlich fragen, warum weiß Lazarus und/oder der Compiler nicht, das er bei Linux aus einem Free ein FreeAndNil() machen muss?
Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.3.1 , Lazarus 2.3.0
+ Delphi XE7SP1
Wenn man von Hand irgend eine Komponente mit Create erzeugt und diese mit .Free frei gibt, dann wird unter Windows auch der Speicher wieder frei gegeben, unter Linux nicht und beim beenden der Exe unter Linux zeigt die Console diverse Speicherlecks. Wenn man FreeAndNil() unter Linux nutzt dann sind diese Speicherlecks weg.
Wenn man von Hand irgend eine Komponente mit Create erzeugt und diese mit .Free frei gibt, dann wird unter Windows auch der Speicher wieder frei gegeben, unter Linux nicht und beim beenden der Exe unter Linux zeigt die Console diverse Speicherlecks. Wenn man FreeAndNil() unter Linux nutzt dann sind diese Speicherlecks weg.
Wo hast du den diese Weisheit her?
Da müsste ich ja tausende Lecks haben?
Wegen einem einzigen Button passiert in der Tat noch nichts.
Meine EXE hat über 100000 Codezeilen und jede Menge Create von irgend welchen Sachen drin.
Da kam es dann zu diesen Problemen. Erst mit FreeAndNil war es dann weg.
Definitiv ist Linux da nicht so sauber wie Windows. Man merkt das erst wenn man zufällig die EXE von der Konsole aus öffnet, wenn man die per Link vom Desktop aus startet sieht man nichts.
Habe ich noch nie gehört und das ist mir auch noch nie begegnet.
Hast du irgendwelche Quellen und Hintergründe dazu oder ist das einfach dein persönlicher Eindruck?
Ich kann mir nicht recht vorstellen, dass man davon nichts weiss, falls es denn zutrifft.
@MmVisual
Ich finde deine These auch recht Steil. Ich entwickle und "Lebe" unter Linux. Meine Programme sind auch gern mal etwas Länger. CCM zum Beispiel hat auch knapp 50000 Zeilen Code, jede Menge Datenbanken, Open GL und was nicht noch alles. Ich nutze das FreeAndNil so gut wie nie (schande über mich), immer nur ein .free und hab auch keine Speicherlöcher..