Pergunta

Sou muito novo no Delphi e recebi o seguinte trecho de código (omitido algumas partes irrelevantes) para o qual estou tentando entender o que ele faz:

object SelectCosts: TIBQuery
    SQL.Strings = (
      'SELECT * FROM costs '
      'WHERE code = :code')
    ParamData = <
      item
        DataType = ftUnknown
        Name = 'code'
        ParamType = ptUnknown
      end>
  end

Em outro arquivo, essa consulta é usada, mas um parâmetro que não está definido na consulta é adicionado.

DM_HRV.SelectCosts.ParamByName('part').Value := 1;

Este parâmetro 'part' altera alguma coisa na seleção feita?Em outras palavras: a consulta SQL é alterada automaticamente para a seguinte?

'SELECT * FROM costs '
  'WHERE code = :code'
  'AND part = :part'
Foi útil?

Solução

Isso significa que a instrução SQL pode ser alterada em tempo de execução.então, quando essa consulta é usada, o SQL já contém AND part = :part.

Se a instrução SQL não contiver este parâmetro extra part, uma exceção será gerada ao atribuir ParamByName('part').Value := 1.

Presumo que você não confundiu a referência SelectCosts (que está em DM_HRV e não em outro DM).

Outras dicas

A seguinte declaração em sua postagem não adiciona um parâmetro, mas define seu valor:

DM_HRV.SelectCosts.ParamByName('part').Value := 1;

Para adicionar um parâmetro em tempo de execução, use CreateParam da seguinte maneira:

if DM_HRV.SelectCosts.Params.FindParam('Part') = nil then
   DM_HRV.SelectCosts.Params.createParam(ftString, 'Part', ptInput);

A consulta não é modificada automaticamente, você precisa fazer isso sozinho.

Em seu primeiro recorte, ParamType e InputType não estão definidos, você pode alterar isso no IDE acessando o editor de propriedades da lista de parâmetros (Params) e atualizando esses valores.

Adicionar um novo parâmetro não altera a consulta.Você tem que fazer isso sozinho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top