Newsgroup: it.comp.lang.delphi
Titolo: ADO e Parameters

Ciao a tutti,
sto cercando di creare una query di update parametrica.
Uso gli oggetti ADO.
Prima di creare gli oggetti parameter, valorizzo la stringa sql
dell'oggetto query :
myAdoQuery.SQL.Add('UPDATE sda.PREVENTIVI SET');
myAdoQuery.SQL.Add('ANNO = :paramANNO, ');
myAdoQuery.SQL.Add('NUMERO = :paramNUMERO, ');
myAdoQuery.SQL.Add('DATA = :paramDATA, ');
...
...
myAdoQuery.SQL.Add('NOTE = :paramNOTE, ');
myAdoQuery.SQL.Add('WHERE ');
etc etc...
Per i primi 3 parametri tutto bene, ma quando arrivo al parametro
paramNOTE che è un
campo BLOB mi da il seguente errore :
---------------------------
Project GIV2005.exe raised exception class EOleException with message
'Gli argomenti non sono di tipo valido, non sono compresi
nell'intervallo consentito o sono in conflitto'.
---------------------------
Credo sia un problema dei campi BLOB perchè ho provato con qualsiasi
altro tipo di campo, e non si alza nessuna eccezione.
Ragazzi mi date una mano?
Grazie mille in anticipo.
Rino

 campo BLOB mi da il seguente errore :
Ti sembrerà stupido, ma prova a cambiare il nome del campo in NOTE1 o 
qualsiasi altra cosa. Altrimenti usa le parentesi quadre [NOTE].
-- 
Jax

 
in realtà il campo si chiama PTNOT...

 in realtà il campo si chiama PTNOT...
Come non detto :)
-- 
Jax

Cmq, visto che nessuno sa risolvere il mio problema,
sto cercando di cambiare strada e risolverlo diversamente.
C'è un modo per passare ad una stringa SQL il valore di un RichEdit?
Logicamente il mio RichEdit contiene testo formattato (colori,
grassetto, corsivo, etc. etc.).
Rino

 altro tipo di campo, e non si alza nessuna eccezione.
Ho paura di si!
Io ho fatto una prova su MSSQL, ma suppongo che altri database abbiano 
lo stesso problema (tu purtroppo non hai indicato a che database ti stai 
collegando quindi possiamo solo ipotizzare):
select * from tabella where campotext = 'ciao'
"Msg 306, Level 16, State 1, Line 1
The text, ntext, and image data types cannot be compared or sorted,
except when using IS NULL or LIKE operator."
Prova a usare LIKE oppure dovrai usare un tipo diverso, sui cui sia 
possibile effettuare confronti, come un varchar(2000).
ciao
Giacomo

 possibile effettuare confronti, come un varchar(2000).
Purtroppo non posso perchè come dicevo prima il testo è formattato...
Ora la mia domanda è : "ma è possibile che su questo NG nessuno abbia
mai
usato un campo BLOB? Se sì, come lo aggiorna?"
Ciao 
Rino


da un memo per esempio:
ADODataSet1Note.Assign(Memo1.Lines);
-- 
Ore 18.30: premo invio.

No, non và...
ragazzi... non trovo una soluzione...
Oltretutto l'esempio di Massimo non usa una query SQL per l'update,
come invece io avevo chiesto all'inizio del 3d...
Ragazzi non mi abbandonate... 
Troviamo una soluzione insieme.
Rino



come non uso una query?
tuo codice:
myAdoQuery.SQL.Add('UPDATE sda.PREVENTIVI SET');
myAdoQuery.SQL.Add('ANNO = :paramANNO, ');
myAdoQuery.SQL.Add('NUMERO = :paramNUMERO, ');
myAdoQuery.SQL.Add('DATA = :paramDATA, ');
...
...
myAdoQuery.SQL.Add('NOTE = :paramNOTE, ');
myAdoQuery.SQL.Add('WHERE ');
a questo punto sti cavolo di parametri glieli passerai no? e quindi 
myAdoQuery.Parameters.ParamByName('paramNote').Assing(xxxx);
dove xxx sarà quello che sai tu
Non perdiamoci nelle inezie, campi persistenti o meno, il discorso non
cambia :)


cambia :)
Mi dispiace di farti perdere tempo, però sicuramente capirai la mia
situazione di stallo.
Grazie ancora per l'interessamento.
Rino

>Rino
Prima di tutto scusa, ma avevo letto velocemente la prima parte e non
avevo capito perfettamente.
Allora, ho fatto qualche prova con ADO, D7 e MSSQL2000 su una tabella
di test con campo varchar(50), un text, un image e un datetime
1) non ho nessun problema nella creazione della query a runtime
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('update testblob');
  adoquery1.SQL.Add('set note = :note, ');         //questo è il blob
  adoquery1.SQL.Add('UnaData = :data');
  adoquery1.SQL.Add('where MyID = 1');
  adoquery1.Parameters.Refresh;         
il parametro Blob lo passo come dicevo ieri 
  adoquery1.Parameters[0].Assign(memo1.lines);
  adoquery1.execsql;
e, non so come dirtelo, la query viene eseguita senza problemi.
Stesso risultato col campo di tipo image...


1) non ho nessun problema nella creazione della query a runtime
che dire...
l'unica differenza è che uso D2005...
Cmq, se puoi mi giri in privato l'esempio, con lo script del DB?
Lo voglio provare sia con D2005 che con D7.
Grazie mille
Rino