Moin Anna,
ich fange mal von oben an
OpenDialog1.Execute;
Du fragst den Rückgabewert nicht ab. Wird der Dialog abgebrochen, wird so anschliessend trotzdem versucht die, nicht ausgewählte, Datei zu laden, was dann in einem Fehler mündet.
So
if not OpenDialog1.Execute then exit;
wird die Prozedur verlassen, wenn keine der Dialog abgebrochen wird.
Zu dem Erzeugen der Stringliste fehlt die zugehörige Freigabe. So wie es jetzt ist, wird ein Speicherleck produziert.
So kannst Du das verhindern, selbst wenn innerhalb der Prozedur eine Execption auftritt
Delphi-Quellcode:
F := TStringList.Create;
try
// Der Rest der Prozedur
finally
FreeAndNil(F); // Oder F.free;
end;
Die Kapselung des Hauptteils in try/except unterdrückt zwar eventuell auftretende Exceptions, aber die sollten da, wenn das Programm dort ansonsten fehlerfrei ist, eh' nicht auftreten. Am Besten lässt Du try/except dort weg.
Hier
Rows[i].CommaText := StrtoInt F[i+2];
musst Du mal schlicht das StrToInt weglassen, denn CommaText und F[i+2] sind beides Strings. Da muss nichts umgewandelt werden.
Damit wäre dann auch die Fehlermeldung des Compilers behoben.