Ich möchte noch einmal auf haentschmans berechtigten Einwand zurückkommen. Wenn die Dateinamen in einer Datei stehen, wieso wird dann nicht gleich beim Auslesen der neue Dateiname gebildet? Diese ganze Pos-Frickelei erscheint mir eher kontraproduktiv, die Verwendung von Shortstrings macht das Ganze dann noch schlimmer und ist auch unnötig, da eine Stringkonstante automatisch die richtige Länge aufweist, ohne dass man sie extra einschränkt. Ich habe gerade kein Delphi zur Hand, aber wenn man Pos unter Delphi >= 2009 mit einem Shortstring und einem String-Parameter anwendet, sollte es zumindest eine (vermeidbare) Compilerwarnung geben, da dort Shortstrings 1 Byte und Strings 2 Byte je Zeichen besitzen. Ich denke, man kann das auch einfacher gestalten (Pseudo-Code):
Delphi-Quelltext
1: 2: 3: 4: 5:
| var DateinameXLS, DateinameSQL: string; begin DateinameSQL := gelesener_Wert_aus_Datei; DateinameXLS := ChangeFileExt(DateinameSQL, '.xls'); |
Weiterhin kann ich nur dringend empfehlen, SQL-Parameter zu verwenden. Neben der automatisch korrekten SQL-Syntax werden damit auch SQL-Injections vermieden (und schneller sind Prepared Statements nebenher auch noch).
Delphi-Quelltext
1: 2: 3:
| Query.SQL.Text := 'SELECT Feldliste FROM Tabelle WHERE Feldwert = :wert'; ... Query.ParamByName('wert').Value := DateinameSQL; |