Cosa succede se chiamo ParamByName per un parametro che non esiste?
-
28-10-2019 - |
Domanda
Sono molto nuovo su Delphi e ho ricevuto il seguente pezzo di codice (tralasciate alcune parti irrilevanti) per il quale sto cercando di capire cosa fa:
object SelectCosts: TIBQuery
SQL.Strings = (
'SELECT * FROM costs '
'WHERE code = :code')
ParamData = <
item
DataType = ftUnknown
Name = 'code'
ParamType = ptUnknown
end>
end
In un altro file, viene utilizzata quella query, ma viene aggiunto un parametro non definito nella query.
DM_HRV.SelectCosts.ParamByName('part').Value := 1;
Questo parametro 'part'
cambia qualcosa sulla selezione effettuata?In altre parole: la query SQL viene automaticamente modificata nella seguente?
'SELECT * FROM costs '
'WHERE code = :code'
'AND part = :part'
Soluzione
significa che l'istruzione SQL potrebbe essere modificata in fase di esecuzione.Quindi, quando questa query viene utilizzata, lo SQL contiene già AND part = :part
.
Se l'istruzione SQL non contiene questo parametro extra part
, un'eccezione verrà sollevata quando si assegna ParamByName('part').Value := 1
.
Suppongo che tu non abbia confuso il riferimento SelectCosts
(che è in DM_HRV
e non altro DM).
Altri suggerimenti
La seguente dichiarazione nel tuo post non aggiunge un parametro, ne imposta il valore:
DM_HRV.SelectCosts.ParamByName('part').Value := 1;
Per aggiungere un parametro in fase di esecuzione, utilizzare CreateParam come segue:
if DM_HRV.SelectCosts.Params.FindParam('Part') = nil then
DM_HRV.SelectCosts.Params.createParam(ftString, 'Part', ptInput);
La query non viene modificata automaticamente, devi farlo tu stesso.
Nella tua prima cattura, ParamType e InputType non sono definiti, puoi cambiarli nell'IDE accedendo all'editor delle proprietà dell'elenco dei parametri (Params) e aggiornando quei valori.
L'aggiunta di un nuovo parametro non modifica la query.Devi farlo da solo.