Что произойдет, если я вызову ParamByName для параметра, который не существует? - PullRequest
8 голосов
/ 16 января 2012

Я очень новичок в Delphi и получил следующий фрагмент кода (оставив некоторые несущественные части), для которого я пытаюсь понять, что он делает:

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

В другом файле этот запрос используется, но добавлен параметр, который не определен в запросе.

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

Изменяет ли этот параметр 'part' что-либо в сделанном выборе? Другими словами: SQL-запрос автоматически изменяется на следующий?

'SELECT * FROM costs '
  'WHERE code = :code'
  'AND part = :part'

Ответы [ 3 ]

8 голосов
/ 16 января 2012

Это означает, что оператор SQL может быть изменен во время выполнения. поэтому, когда этот запрос используется, SQL уже содержит AND part = :part.

Если инструкция SQL не содержит этот дополнительный параметр part, при назначении ParamByName('part').Value := 1.

будет сгенерировано исключение.

Я предполагаю, что вы не перепутали ссылку SelectCosts (которая находится в DM_HRV, а не в другом DM).

5 голосов
/ 16 января 2012

Следующий оператор в вашем посте не добавляет параметр, он устанавливает его значение:

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

Чтобы добавить параметр во время выполнения, используйте CreateParam следующим образом:

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

Запрос не изменяется автоматически, вы должны сделать это самостоятельно.

В вашем первом фрагменте ParamType и InputType не определены, вы можете изменить это в IDE, открыв редактор свойств списка параметров (Params) и обновив эти значения.

0 голосов
/ 16 января 2012

Добавление нового параметра не меняет запрос. Ты должен сделать это сам.

...