Was passiert, wenn ich ParamByName für einen Parameter aufrufe, der nicht existiert?

StackOverflow https://stackoverflow.com/questions/8880091

  •  28-10-2019
  •  | 
  •  

Frage

Ich bin sehr neu in Delphi und habe den folgenden Code erhalten (einige irrelevante Teile weggelassen), für den ich zu verstehen versuche, was es tut:

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

In einer anderen Datei wird diese Abfrage verwendet, aber ein Parameter, der nicht in der Abfrage definiert ist, wird hinzugefügt.

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

Ändert dieser Parameter 'part' etwas an der getroffenen Auswahl?Mit anderen Worten: Wird die SQL-Abfrage automatisch in die folgende geändert?

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

War es hilfreich?

Lösung

Das bedeutet, dass die SQL-Anweisung zur Laufzeit geändert werden kann.Wenn diese Abfrage verwendet wird, enthält SQL bereits AND part = :part.

Wenn die SQL-Anweisung diesen zusätzlichen Parameter part nicht enthält, wird beim Zuweisen von ParamByName('part').Value := 1 eine Ausnahme ausgelöst.

Ich gehe davon aus, dass Sie die SelectCosts-Referenz (die in DM_HRV und nicht in anderen DM enthalten ist) nicht verwechselt haben.

Andere Tipps

Die folgende Anweisung in Ihrem Beitrag fügt keinen Parameter hinzu, sondern legt dessen Wert fest:

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

Um zur Laufzeit einen Parameter hinzuzufügen, verwenden Sie CreateParam wie folgt:

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

Die Abfrage wird nicht automatisch geändert, das müssen Sie selbst tun.

In Ihrem ersten Snip sind ParamType und InputType nicht definiert. Sie können dies in der IDE ändern, indem Sie auf den Eigenschafteneditor der Parameterliste (Params) zugreifen und diese Werte aktualisieren.

Durch Hinzufügen eines neuen Parameters wird die Abfrage nicht geändert.Das müssen Sie selbst tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top