Que se passe-t-il si j'appelle parambyName pour un paramètre qui n'existe pas?
-
28-10-2019 - |
Question
Je suis très nouveau à Delphi et j'ai reçu le morceau de code suivant (laissé de côté certaines parties non pertinentes) pour lesquelles j'essaie de comprendre ce qu'elle fait:
object SelectCosts: TIBQuery
SQL.Strings = (
'SELECT * FROM costs '
'WHERE code = :code')
ParamData = <
item
DataType = ftUnknown
Name = 'code'
ParamType = ptUnknown
end>
end
Dans un autre fichier, cette requête est utilisée, mais un paramètre qui n'est pas défini dans la requête est ajouté.
DM_HRV.SelectCosts.ParamByName('part').Value := 1;
Fait ce paramètre 'part'
changer quelque chose sur la sélection faite? En d'autres termes: la requête SQL est-elle automatiquement changée en ce qui suit?
'SELECT * FROM costs '
'WHERE code = :code'
'AND part = :part'
La solution
Cela signifie que l'instruction SQL pourrait être modifiée au moment de l'exécution. Ainsi, lorsque cette requête est utilisée, le SQL contient déjà AND part = :part
.
Si l'instruction SQL ne contient pas ce paramètre supplémentaire part
, une exception sera soulevée lors de l'attribution ParamByName('part').Value := 1
.
Je suppose que tu n'as pas confondu SelectCosts
référence (qui est dans DM_HRV
et pas d'autres DM).
Autres conseils
L'instruction suivante dans votre message n'ajoute pas de paramètre, il définit sa valeur:
DM_HRV.SelectCosts.ParamByName('part').Value := 1;
Pour ajouter un paramètre lors de l'exécution, utilisez CreateParam comme suit:
if DM_HRV.SelectCosts.Params.FindParam('Part') = nil then
DM_HRV.SelectCosts.Params.createParam(ftString, 'Part', ptInput);
La requête n'est pas modifiée automatiquement, vous devez le faire vous-même.
Dans votre premier snip, les paramype et l'entrée ne sont pas définis, vous pouvez modifier cela dans l'IDE en accédant à l'éditeur de propriétés de la liste des paramètres (params) et à la mise à jour de ces valeurs.
L'ajout d'un nouveau paramètre ne modifie pas la requête. Vous devez le faire vous-même.