Zitat von
daniel71:
Es funtioniert, nur wird die ganze spalte mit leerzeichen gefüllt.
Das ist eine Macke in
ADO.
Abhilfe:
Du erzeugst Dir eine Stringliste
mit allen Feldnamen, die als NVARCHAR deklariert sind (hier z.B. als privates Feld fWideCharParams: TStringlist). Die werden nämlich von
ADO (oder dem
ADO-Wrapper von Delphi?) fälschlicherweise als NCHAR ausgegeben.
Im OnWillExecute-Ereignis der ADOConnection ersetzt Du den falschen Typen durch
adVarWChar, und zwar so:
Delphi-Quellcode:
Procedure TDM.MyADOConnectionWillExecute(Connection: TADOConnection;
Var CommandText: WideString; Var CursorType: TCursorType;
Var LockType: TADOLockType; Var CommandType: TCommandType;
Var ExecuteOptions: TExecuteOptions; Var EventStatus: TEventStatus;
Const Command: _Command; Const Recordset: _Recordset);
Var
i: Integer;
Begin
With Command.Parameters Do
For i := 0 To Count - 1 Do
If fWideCharParams.IndexOf(AnsiUpperCase(Item[i].Name)) <> -1 Then
Item[i].Type_ := adVarWChar;
End;
Es gibt bestimmt eine bessere Lösung, aber ich hab damals keine gefunden und mir damit geholfen. Seitdem klappts wieder mit der Nachbarin