7 Stimmen

Delphi: "Das Parameterobjekt ist nicht korrekt definiert. Es wurden inkonsistente oder unvollständige Informationen bereitgestellt."

Ich versuche, einen Datensatz in eine Tabelle in einem 3-Tier-Datenbank-Setup einzufügen, und der Middle-Tier-Server generiert die Fehlermeldung oben als eine OLE-Ausnahme, wenn es versucht, den ersten Parameter der Abfrage hinzufügen.

Ich habe nach diesem Fehler gegoogelt und immer das gleiche Ergebnis gefunden: Er kommt daher, dass Sie irgendwo in Ihrer Abfrage einen Doppelpunkt in einer Zeichenfolge haben, was den SQL-Parser von ADO stört. Dies ist hier nicht der Fall. Es gibt nirgendwo falsche Doppelpunkte. Ich habe die Objektdefinition mit dem Schema der Tabelle, in die ich etwas einfügen möchte, abgeglichen und überprüft. Alles ist in Ordnung, und meine Kollegen sind ratlos. Weiß jemand, was sonst noch die Ursache sein könnte? Ich bin hier mit meinem Latein am Ende.

Ich verwende Delphi 2007 und SQL Server 2005.

0 Stimmen

@Mason - Verwenden Sie Parameter? Wenn nicht, hilft es, ParamCheck := False zu setzen?

0voto

eKek0 Punkte 22479

Wenn ich mich richtig erinnere, müssen Sie dem Parameter explizit den Wert NULL zuweisen. Wenn Sie eine TAdoStoredProc-Komponente verwenden, sollten Sie dies in der Entwurfszeit tun.

0voto

Gerry Coll Punkte 5827

Verwenden Sie ein Gewinde? Ich glaube mich zu erinnern, dass ich diesen Fehler bekam, als ein Timer-Ereignis eine Abfrage startete, während die ADO-Verbindung für eine andere synchrone Abfrage verwendet wurde. (Der Timer überprüfte jede Minute ein "System verfügbar"-Flag).

0voto

Haben Sie den DataType des Parameters festgelegt oder haben Sie ihn als ftUnknown belassen?

0voto

BennyBechDk Punkte 934

Ich hatte auch das gleiche Problem, allerdings mit einem dynamischen Befehl (z. B. einer Update-Anweisung).
Einige der Parameter könnten NULL sein.
Der einzige Weg, wie ich es zum Laufen bringen konnte, war die Einstellung von parameter.DataType := ftString und parameter.Size := 1 und Nicht-Einstellung des Wertes .

cmdUpdate := TADOCommand.Create(Self);
try
  cmdUpdate.Connection := '**Conections String**';
  cmdUpdate.CommandText := 'UPDATE xx SET yy = :Param1 WHERE zz = :Param2';
  cmdUpdate.Parameters.ParamByName('Param2').Value := WhereClause;
  if VarIsNull(SetValue) then
  begin
    cmdUpdate.Parameters.ParamByName('Param1').DataType := ftString;
    cmdUpdate.Parameters.ParamByName('Param1').Size := 1;
  end else cmdUpdate.Parameters.ParamByName('Param1').Value := SetValue;
  cmdUpdate.Execute;
finally
  cmdUpdate.Free;
end;

0voto

jasonpenny Punkte 2979

Ich habe gerade in diesen Fehler heute auf eine TADOQuery, die hat ParamCheck := False und hat keine Doppelpunkte in der SQL.

Irgendwie wird die OLECMDEXECOPT_DODEFAULT Parameter für TWebBrowser.ExecWB() verursacht dies für mich:

Dies zeigt das Problem:

pvaIn := EmptyParam;
pvaOut := EmptyParam;
TWebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, pvaIn, pvaOut);

Dies zeigt das Problem nicht:

pvaIn := EmptyParam;
pvaOut := EmptyParam;
TWebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER, pvaIn, pvaOut);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X