Was passiert, wenn ich ParamByName für einen Parameter aufrufe, der nicht existiert?
-
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'
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.