Newsgroup: it.comp.lang.delphi
Titolo: Passaggio di parametri a ADOQuery da Delphi 2006 a Delphi 2009

Salve,
 oggi ho dovuto ricompilare una applicazione sviluppato in Delphi 2006
con Delphi 2009.
L'applicazione con entrambi le versioni di Delphi compila ma quando accede 
ad una origine dati da un errore " ODBC : Tipo di dati SQL non compreso nell'intervallo" se la compilo con Delphi 2009.
 
Per accedere uso l'oggetto ADOQuery
dove imposto la stringa SQL con il metodo SQL.ADD('select * from tabella where utente = :pippo ');
Poi usavo il metodo : Parameters.ParamByName('pippo').Value := 'zeno'
per passare il parametro :pippo.
Questo in Delphi 2006 funziona.
 
Quando ho riaperto il progetto con Delphi 2009, compilo senza errori ma
quando eseguo il codice mi da errore ODBC : Tipo di dati SQL non compreso nell'intervallo".
 
Per ovviare la cosa ho scritto il SQL come concatenazione di stringhe e usando la funzione quotedstr().
cioè
SQL.ADD('select * from tabella where utente = '+quotedstr('zeno') );
In questo modo in Delphi 2009 funziona correttamente.
 
DOMANDA: qual'è il metodo giusto per passare parametri alla stringa SQL dell'oggetto AdoQuery ?
 
E' forse un problema del driver ODBC sottostante ?
 
Voi usate quotedstr() o Parameters.ParamByName ?
 
Ringraziamenti anticipati
 
 
Zeno
 

 Voi usate quotedstr() o Parameters.ParamByName ?
 
Parameters.ParamByName
 
Ciao.

 
Grazie Luigi per la rapida risposta.
 
Ma tu che versione di Delphi usi ?
 
Te lo chiedo perchè non capisco perchè il metodo AsString di
 Parameters.ParamByName('pippo').AsString 
ne con Delphi 2006 ne con Delphi 2009 mi viene proposto dal autocompletamento,
e se lo forzo mi da errore di compilazione.
 
Ringraziamenti anticipati
 
Zeno

 e se lo forzo mi da errore di compilazione.
 
Adesso che leggo meglio mi accorgo che c'� una differenza nel metodo da 
te invocato:
 >   Parameters.ParamByName('pippo').AsString
 
Io uso: Params.ParamByName('pippo').AsString e non esiste *Parameters*
 
Che ci sia questa differenza tra i componenti ADO ed i componenti BDE e 
Zeos?
 
Si, guardando l'help della TADOQuery su D2010, effettivamente, vedo che 
c'� Parameters e non Params e ParambyName ha *solo* value quindi devi 
rearti i parametri dal propertyEditor impostando opportunamente.
 
Ciao.
 

 per passare il parametro :pippo.
 
Purtroppo in questo momento, non sono in grado di fare una prova,
ma potrebbe essere un problema di unicode.
Prova  a vedere se impostando manualmente il Datatype prima di impostare value l'errore sparisce.
 
// non testato
P := Parameters.ParamByName('pippo');
P.DataType := ftString;
P.Value := 'zeno'
 
 
ciao
Giacomo

....l'errore non sembra ne di delphi ne di ado, ma del driver odbc.
In entrambi i casi usi LO STESSO DRIVER ODBC sullo stesso client che punta allo stesso database?
Che database è? Oggi quasi tutti i database hanno un oledb provider che ti permette di non usare ODBC...
 
A.

 
 
Su...su....non siate "bovini"... :-D
Magari le ultime versioni di delphi non usano piu' f1....
Ma un kaz di modo per andare sulla guida in linea esiste..o no?
Da SEMPRE ado ha solo parametri variant e non tipizzati.
Infatti, sia bed che dbx usano Params, ado invece usa Parameters.
Params è una collection di TParam che hanno asstring, asinteger asfloat etc
Parameters è una collection di TParam che ha solo la property Value di tipo variant. Anche la gestione dei blob passa da 2 diverse classi: TBlobStream e TADOBlobStream.
 
Se non ricordo male Zeos usa TParams e, cosa brutta, l'oggetto per la connessione al database non eredita da TCustomConnection.
 
A.


 
Dalla versione 7 eredita da TZAbstractConnection che è simile.
 
Mi pare di aver letto che abbiano finalmente implementato le 
StoredProcedure per Oracle oltre che per Firebird/Interbase.
 
Ciao.

 StoredProcedure per Oracle oltre che per Firebird/Interbase.
 
 
L'oggetto c'era ma con oracle NON FUNZIONAVA.
 
A.

 scrivono:
- TZStoredproc got a full makeover. Now Stored procedures should work 
for postgres, firebird, mysql, mssql and oracle (alpha status)
 
Adesso che ti scrivo mi accorgo che, per oracle sono allo stadio alpha.
 
Ciao.

Voi usate quotedstr() o Parameters.ParamByName ?
Io certamente uso la seconda variante per il motivo sopra nominato.
 
Spero che ti aiuti questo!!
 
Saluti,
 
Hubert