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'
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top