Also ich habe diverse Fehler in deinem Programmcode festgestellt:
Delphi-Quellcode:
begin
sTemp:= Nil; // unnötig -> weglassen
try // das try sollte nach dem Erzeugen der Objekte kommen
sLand_id:=TStringList.Create; // sollte man besser einmalig in OnCreate erzeugen
sTemp:=TStringlist.Create;
Standard_Lesen_Laenderkennung(sTemp, sLand_id, false);
cboLand.Items.Clear;
finally
sTemp.Free;
end;
procedure TfrmFenster.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
sLand_id.Free; // falsch: Objekte sollte man nur in OnDestroy freigeben
frmFenster:= Nil; // falsch: die Formularklasse darf nicht globale Variablen ihrer eigenen Klasse
// verändern
Action:= CaFree;
end;
Delphi-Quellcode:
function Standard_Lesen_Laenderkennung(Laenderkennung, Laenderkennung_id:TStrings;Leerzeile:boolean):integer;
begin
Result:= 0;
Try
If Laenderkennung <>
NIL then begin
Laenderkennung.Clear;
If Leerzeile
then Laenderkennung.Add('
');
end;
If Laenderkennung_id<>
NIL then begin
Laenderkennung_id.Clear;
If Leerzeile
then Laenderkennung_id.Add('
0');
end;
try
// hier fehlt ein Assert
Assert(Assigned(frmDatamodul));
// <---
With frmDatamodul.fsel_Land
do begin
Close;
Open;
While not Eof
do begin
If Laenderkennung<>
NIL then Laenderkennung.Add(FieldByName('
Laenderkennung').AsString);
If Laenderkennung_id<>
NIL then Laenderkennung_id.Add(FieldByName('
Land_id').AsString);
next;
end;
Close;
end;
finally
// Falsch: die Connection geht diese Funktion gar nichts an!
// man provoziert so nur unerwünschte Seiteneffekte
// also Finger weg von dbConnection
frmDatamodul.dbConnection.Connected:= false;
end;
except
// Falsch: die Exception wird abgefangen und in einen Fehlercode -1 übersetzt
// die orginale Fehlermeldung geht verloren
// Richtig: den Abschnitt nach Except komplett löschen
// und die Funktion in eine Prozedure umwandeln
Result:=-1;
exit;
end;
end;