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'
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top