Delphes: “Paramètre de l'objet n'est pas définie correctement. Les informations incomplètes ou incohérentes ont été fournis.”
J'essaie d'insérer un enregistrement dans une table dans un niveau 3 configuration de base de données et le serveur de niveau intermédiaire génère le message d'erreur ci-dessus comme une exception OLE lorsqu'il tente d'ajouter que le premier paramètre de la requête.
J'ai Googlé cette erreur, et je trouve le même résultat de façon constante: elle vient d'avoir un côlon en une chaîne de caractères quelque part dans votre requête, qui b0rks ADO analyseur SQL. Ce n'est pas le cas ici. Il n'y a aucune fausse colons n'importe où. J'ai vérifié et revérifié la définition de l'objet par rapport au schéma de la table, je suis en train de les insérer dans. Tout vérifie, et cela a mes collègues de travail perplexe. Personne ne sait quoi d'autre pourrait en être la cause? Je suis à mon esprit " fin ici.
Je suis l'aide de Delphi 2007 et SQL Server 2005.
Je suis l'aide de paramètres.
OriginalL'auteur Mason Wheeler | 2009-04-02
Vous devez vous connecter pour publier un commentaire.
Je peux obtenir cette erreur, à l'aide de Delphi 2007 et MSSQL Server 2008, et j'ai trouvé une solution de contournement. (ce qui est assez merdique à mon humble avis, mais c'est peut-être utile pour vous, si le vôtre est causée par la même chose.)
code pour produire l'erreur:
J'ai trouvé deux solutions pour y remédier:
1) supprimer les crochets du SQL, c'est à dire:
2) l'utilisation de deux paramètres au lieu d'un:
OriginalL'auteur
J'ai trouvé ce fil de discussion lors de la recherche précédemment mentionné message d'Exception. Dans mon cas, la cause était une tentative d'incorporer un commentaire SQL /* foo */dans ma requête.sql.texte.
(Je pensais que ça aurait été pratique pour voir un commentaire aller flottante passé dans ma fenêtre générateur de profils.)
De toute façon - Delphi7 détesté.
OriginalL'auteur kPkPkP
Ici une réponse tardive. Dans mon cas, c'était quelque chose de complètement différent.
J'ai essayé d'ajouter une procédure stockée dans la base de données.
Quand j'ai enlevé les deux-points (:), il a travaillé. Comme il a vu le côlon comme un paramètre.
OriginalL'auteur
Je suis face au même message d'erreur décrit dans votre question. J'ai retracé l'erreur dans ADODB.pas ->
procedure TParameters.AppendParameters; ParameterCollection.Append(Items[I].ParameterObject).
En utilisant breakppoints, l'erreur a été soulevée dans mon cas, un paramètre qui doit remplir un champ DateTime dans la base de données et je n'ai jamais rempli le paramètre. la configuration du paramètre().valeur:=" a résolu le problème(j'ai essayé aussi avec varnull, mais il y a un problème au lieu de l'envoi de la valeur Null dans la base de données, la requête est de l'envoi 1 - la valeur de l'entier de varnull).
PS: je sais, c'est un retard en retard en retard de réponse, mais peut-être que quelqu'un va arriver à la même erreur.
Je vais avoir le même problème à l'heure actuelle, ce qui arrive parfois, parfois pas, et j'ai aussi réussi à retracer à TParameters.AppendParameters. J'ai remarqué que le paramètre qui a été à l'origine du problème a été attribuée la valeur NULL. Changer Unassigned semble avoir résolu le problème. Mais ce qui me dérange, c'est le fait que l'erreur serait de seulement parfois se produire.
OriginalL'auteur RBA
Je viens de rencontré cette erreur moi-même. Je suis l'aide de Delphi 7 pour écrire à 2003, MS Accès base de données à l'aide d'un TAdoQuery composant. (ancien code) Ma requête a bien fonctionné directement dans MS Access, mais ne parvient pas à Delphes par le biais de la TAdoQuery objet. Mon erreur venait d'un deux-points (excuses à l'affiche originale) à partir d'une valeur de date/heure.
Comme je le comprends, Jet SQL format de date/heure est #mm/jj/aaaa hh:nn:ss# (0 à gauche-rembourrage n'est pas nécessaire).
Si le TAdoQuery.ParamCheck propriété est Vraie, alors ce format échoue. (Merci affiches!) Deux solutions sont: a) de mettre en ParamCheck à Faux, ou b) d'utiliser un autre format de date/heure, à savoir "mm/jj/aaaa hh:nn:ss" (AVEC les guillemets).
J'ai testé ces deux options et ils travaillent tous les deux.
Même si le double-cité format de date/heure n'est pas le Jet format de date/heure, l'Accès est assez bon à faire preuve de souplesse sur ces formats de date/heure. Je pense aussi qu'il a quelque chose à voir avec le BDE/LocalSQL/Paradox (Delphi 7 natif de SQL et de la base de données du moteur) format de date/heure (utilise les guillemets doubles, comme ci-dessus). L'analyseur est probablement conçu pour ignorer les chaînes entre guillemets (les guillemets sont de la chaîne de valeur de délimiteur dans le BDE LocalSQL), mais peut trébucher un peu sur d'autres non-natif des formats de date/heure.
SQL Server utilise des apostrophes pour délimiter les chaînes de caractères, donc c'est peut-être à la place des guillemets lors de l'écriture des tables SQL Server (pas testé). Ou peut-être le Delphi TAdoQuery objet va encore tomber. La désactivation de ParamCheck dans ce cas peut être la seule option. Si vous envisagez de basculer le ParamCheck la valeur de la propriété dans le code, vous économiserez du temps de traitement en assurant la propriété SQL est vide avant de l'activer, si vous ne prévoyez pas sur l'analyse en cours de SQL.
OriginalL'auteur FreeText
Si je me souviens bien, vous avez explicite de mettre la valeur NULL pour le paramètre. Si vous utilisez un TAdoStoredProc composant, vous devez le faire au moment de la conception.
OriginalL'auteur eKek0
Êtes-vous à l'aide de tout le filetage? Il me semble me rappeler comment cette erreur lors d'un événement de minuterie commencé une requête alors que la connexion ADO a été utilisée pour une autre requête synchrone. (La minuterie a été le contrôle d'un "système" drapeau de chaque minute).
OriginalL'auteur Gerry Coll
Vous avez défini le Type de données du paramètre ou de ne vous laisser que ftUnknown?
OriginalL'auteur
J'ai aussi eu le même problème, mais avec une dynamique de commande (par exemple, une instruction de mise à Jour).
Certains paramètres peuvent être NULL.
La seule façon que je pouvais obtenir ce travail, a été le paramètre.DataType := ftString et les paramètres.Taille := 1 et pas de réglage de la valeur.
OriginalL'auteur BennyBechDk
Je viens de tomber sur cette erreur aujourd'hui sur un TADOQuery qui a
ParamCheck := False
et n'a pas de virgule dans le SQL.Passe la OLECMDEXECOPT_DODEFAULT paramètre TWebBrowser.ExecWB() a été à l'origine de ce pour moi:
Cela montre le problème:
Cela ne veut pas montrer le problème:
OriginalL'auteur jasonpenny
Un seul guillemet double dans la requête peut également soulever cette erreur à partir de ce que j'ai vécu et je ne suis pas à l'aide de paramètres à tous les ...
OriginalL'auteur webnoob
Vous pouvez obtenir cette erreur lorsque vous tentez d'utiliser une valeur de temps dans le SQL et d'oublier de les envelopper avec QuotedStr().
OriginalL'auteur fullerm
J'ai eu le même message d'erreur. S'est avéré, que c'est parce que l'un des paramètres de la procédure stockée a été déclaré comme étant de type varchar(max). Fait varchar(4000) et l'erreur a disparu.
OriginalL'auteur Kiril Hadjiev