Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: UPDATE funktioniert nicht mit Variabel als Spaltenname

  Alt 17. Jan 2008, 09:27
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
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat