¿Qué sucede si llamo a ParamByName para un parámetro que no existe?
-
28-10-2019 - |
Pregunta
Soy muy nuevo en Delphi y recibí el siguiente fragmento de código (omitió algunas partes irrelevantes) para el que estoy tratando de entender qué hace:
object SelectCosts: TIBQuery
SQL.Strings = (
'SELECT * FROM costs '
'WHERE code = :code')
ParamData = <
item
DataType = ftUnknown
Name = 'code'
ParamType = ptUnknown
end>
end
En otro archivo, se usa esa consulta, pero se agrega un parámetro que no está definido en la consulta.
DM_HRV.SelectCosts.ParamByName('part').Value := 1;
¿Este parámetro 'part'
cambia algo sobre la selección realizada?En otras palabras: ¿la consulta SQL cambia automáticamente a lo siguiente?
'SELECT * FROM costs '
'WHERE code = :code'
'AND part = :part'
Solución
Eso significa que la declaración SQL podría cambiarse en tiempo de ejecución.así que cuando se usa esa consulta, el SQL ya contiene AND part = :part
.
Si la instrucción SQL no contiene este parámetro adicional part
, se generará una excepción al asignar ParamByName('part').Value := 1
.
Supongo que no confundió la referencia SelectCosts
(que está en DM_HRV
y no en otro DM).
Otros consejos
La siguiente declaración en su publicación no agrega un parámetro, establece su valor:
DM_HRV.SelectCosts.ParamByName('part').Value := 1;
Para agregar un parámetro en tiempo de ejecución, use CreateParam de la siguiente manera:
if DM_HRV.SelectCosts.Params.FindParam('Part') = nil then
DM_HRV.SelectCosts.Params.createParam(ftString, 'Part', ptInput);
La consulta no se modifica automáticamente, debe hacerlo usted mismo.
En su primer recorte, ParamType y InputType no están definidos, puede cambiar eso en el IDE accediendo al editor de propiedades de la lista de parámetros (Params) y actualizando esos valores.
Agregar un nuevo parámetro no cambia la consulta.Tienes que hacerlo tú mismo.