Hallo,
das Problem ist, dass Du dort, wo der Parameter auf Null gesetzt wird, dann eben nichts steht. Im Insert-Statement stehen dann zwei ,, .
Hatte das Problem vor Jahren auch mal und bin dann hergegangen und habe den Parameter im
SQL durch das Wort NULL ersetzt.
Zugegeben, ist keine schöne Lösung, aber anders habe ich es seinerzeit nicht wegbekommen.
Und mit noch einem Problem musst Du rechnen: Wenn Du einen Leerstring in die Datenbank schreiben musst, hier bin ich hergegangen und habe immer ein Leerzeichen an den String gehangen, der wurde beim Speichern in der Datenbank automatisch wieder weggenommen (keine Ahnung von wem, war auch eine
Access-Datenbank), alternativ musst Du bei leeren Strings auch den Parameter durch die Zeichenfolge NULL ersetzen.
Delphi-Quellcode:
var
sSQL :
String;
begin
...
If Assigned(
Query)
Then With Query.Parameters
Do Begin
sSQL :=
Query.SQL.Text;
If FindParam('
ID') <>
Nil Then Begin
ParamByName('
ID').Value := FID;
End;
If FindParam('
Aktenzeichen') <>
Nil Then Begin
ParamByName('
Aktenzeichen').Value := FAktenzeichen + '
';
End;
If FindParam('
ServicenummerPraefix') <>
Nil Then Begin
ParamByName('
ServicenummerPraefix').Value := FServicenummerPraefix;
End;
If FindParam('
ServicenummerRufnummer') <>
Nil Then Begin
ParamByName('
ServicenummerRufnummer').Value := FServicenummerRufnummer + '
';
End;
If FindParam('
Datum') <>
Nil Then Begin
If FDatum = 0
Then Begin
sSQL := AnsiReplaceText(sSQL, '
:Datum', '
NULL');
End Else Begin
ParamByName('
Datum').Value := FDatum;
End;
End;
...
Query.SQL.Text := sSQL;
Query.ExecSQL;
...
end;
Stephan