O que acontece se eu chamar ParamByName para um parâmetro que não existe?
-
28-10-2019 - |
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'
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.