Newsgroup: it.comp.lang.delphi
Titolo: errore parametri query

Ho tentato di utilizzare i parametri in una query che altrimenti funziona, 
ma ricevo un errore che dice:
"Qry1: field dBanca is of a unkown type"
 
Questo č un estratto del codice:
SelectSaldo:= 'Select BANCA as Conto,... where (BANCA = :dBanca) and  (AA) 
BETWEEN :DaAnno and :AdAnno';
 
with Qry1 do begin
  Sql.Clear;
  Sql.add(SelectSaldo);
  try
    Open;
    ParamByName('dBanca').Value := cBanca;  (oppure 
ParamByName('dBanca').String := cBanca)
    ParamByName('dAnno').Value  :=  Qry1.FieldByName('ANNO').AsString;
    ParamByName('DaAnno').Value := EdDaAnno.Text;
    ParamByName('AdAnno').Value := EdAdAnno.Text;
  except
    Application.MessageBox('Errore nello statement SQL','Database 
error',IDOK);
  end; 
 
 
---
Questa e-mail č priva di virus e malware perché č attiva la protezione avast! Antivirus.
http://www.avast.com
 
 

     ParamByName('dBanca').Value := cBanca;  (oppure 
 
Bhe, se la apri PRIMA DI IMPOSTARE I VALORI DEI PARAMETRI non funzionerà mai...
 
 
A.
 
 

   end; 
 
 
 
 
A.

"Alberto Salvati"  ha scritto nel messaggio 
news:382465cd-db47-44dd...@googlegroups.com...

Non ci posso credere !! Un occhio esterno ha visto quello che mi è stato 
impossibile vedere da me. Grazie.
Ma perchè mi si dice che l'uso dei parametri è preferibile rispetto ad altri 
sistemi (io usavo il %s..) ?
 
 
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
 
 

 sistemi (io usavo il %s..) ?
 
Ti suggerisco di fare sempre il rompiballe chiedendo perchè.
Prima di tutto, cosi non fai le cose in modo "bovino"..
E secondo, è una domanda che in genere provoca la fuga di quanti parlano a vanvera, e ti metti al riparo da suggerimenti nella migliore delle ipotesi, incompleti, nella peggiore privi di fondamento e mai provate di persona da chi le suggerisce o da persone di loro fiducia.
 
 
Un qualsiasi statement sql subisce un processo di parsing da parte del motore database. Questo processo non è a costo zero (in termini sia di tempo che di risorse). 
 
Ora, se usi una query non parametrica, il motore db fa questa operazione ogni volta. Invece, se usi una query parametrica, cioe', UNA QUERY CHE E' SEMPRE LA STESSA, SALVO I VALORI DEI PARAMETRI, lui sta kaz di cosa la fa SOLO LA PRIMA VOLTA. 
 
Su oracle esiste una vista di sistema che contiene un dump di tutte le query oggetto di parsing. E li hai modo di rendertene conto.
Se poi ti va male, puoi beccare qualche dba oracle che GIUSTAMENTE potrebbe romperti le balle su questa cosa.
 
...no... non è una leggenda metropolitana: è una cosa che ho visto.
 
 
A.

Mi faccio da solo la domanda:
 
"xche quel try..except è SBAGLIATO??"
 
Risposta:
 
Ti perdi il messaggio esatto della eccezione.
Un cliente ti chiama e ti dice quella cosa e tu NON SAI COSA E' SUCCESSO IN REALTA'.
I messaggi di errore, eccezioni etc non vanno MAI nascosti e se hai un log, devono sempre essere loggati.
 
A.

Grazie per la spiegazione. A volte mi accontento di fare le cose come mi 
suggeriscono senza capirle appieno. Non tutti spendono del tempo a 
'spiegare'. 
