Newsgroup: it.comp.lang.visual-basic
Titolo: URGENTE su campo MEMO

oggi sono stato tentato di sparare una revolverata sul computer.
qualcuno mi sa dire perche questo codice funziona da Dio se il campo è di
Testo, ma non se è Memo?
' rst è un recordset
' cnn è la connessione
set rst=cnn.execute("UPDATE UnaTabellaQualsiasi SET UnCampoQualsiasi =
'Prova' WHERE ID = '22'", RecAff,adcmdtext)
in pratica se il campo UnCampoQualsiasi è MEMO, mi dà un "Errore di sintassi
SQL"...
e fa la stessa cosa anche se faccio:
' cmd è Command
cmd.activeconnection=cnn
cmd.commandtype?adcmdtext
cmd.commandtext="UPDATE UnaTabellaQualsiasi SET UnCampoQualsiasi = ? WHERE
ID = ?"
cmd.parameters.refresh       <------------ Questa è la riga incriminata...
anche qui mi dà un errore di sintassi sql...
ma come devo fare per evitarlo???????
grazie
MarioH

 wrote in message
9ins24$k5j67$1...@ID-70152.news.dfncis.de...
PS: il bello è che invece, se devo solo leggere i dati dal campo MEMO, non
da alcun problema... il problema è nllo scrivere...
ma da che cosa puo dipendere?
MarioH

 MarioH
Prego
P.S. Ho fatto il controllo MonthViewer del tipo che volevi tu....
...Tra 1 o 2 giorni sarà sul sito..
...voglio fare gli ultimi tests e poi sarà disponibile a tutti per il
download.
Ciao Diego
*************************************
http://www.biapps.it/vbprogrammer
Il portale di riferimento per gli sviluppatori VB
- Iscriviti alla NewsLetter
- Partecipa alla Shared Comuniti
- Entra nel Forum
*************************************

 SQL"...
Non ho dimestichezza con ado, ma credo che l'esecuzione di una query di
aggiornamento non restituisca nulla di 'assegnabile' ad un oggetto recordset
(rst).
Questo, naturalmente, a prescindere dalla questione "TESTO-MEMO"!
nonsonostatoio [ma se ho detto una str^^z^ta, dimmelo!]


no un momento. il where con gli apici ha funzionato, perche il campo ID è un
campo di testo.
ripeto, funziona bene sempre, tranne se l'altro campo è un MEMO...
MarioH

 Questo, naturalmente, a prescindere dalla questione "TESTO-MEMO"!
lo pensavo anche io. però stranamente funziona. ha sempre funzionato. ogni
aggiornamento di campi lo faccio cosi.
non funziona solo quando il campo da modificare è un memo... questo è il
mistero...!!
MarioH

 mistero...!!
Ultimamente mi sto documentando un po' più a fondo ed ho scoperto (l'acqua
calda, a pensarci bene!)...che:
1) il metodo Execute di 'cnn' [e ovviamente di un oggetto command] accetta
come parametro opzionale adExecuteNoRecords, che indica ad ADO di non
restituire alcun set di record (o meglio i dati...sospetto che i metadati li
restituisca comunque!).
Per istruzioni SQL di tipo 'INSERT', 'UPDATE', 'DELETE' questo mi pare
gratificante, non credi?
E che diavolo! Mi pareva strano assegnare il risultato di una query di
comando ad un recordset!!!
Incuriosito consulto MSDN e trovo..."La costante adExecuteNoRecords
ottimizza le prestazioni riducendo il carico di elaborazione interna...."
...eccicredo! ;-).. "...Questa costante non è mai isolata ma è sempre
associata a adCmdText o adCmdStoredProc (ad esempio,
adCmdText+adExecuteNoRecords).".
Pare, però, vada bene anche da sola...d'altra parte il tutto dovrebbe essere
opzionale, no!
2) In una connessione lato server, ADO si protegge in qualche modo quando ha
a che fare con aggiornamenti di campi cosiddetti 'Long', ovvero campi
caratterizzati da un TYPE di 'grandi dimensioni'.
Il modo in cui ADO si difende è 'differire' il recupero e -specialmente-
l'aggiornamento dei dati per questi campi.
Per valutare il tuo caso dovresti interrogare la proprietà Attributes del
campo e controllare se adFldLong e adFldMayDeffer risultano true...la cosa
non è così immediata, perché Attributes è una proprietà multivalore!
[devi chiederti, cioè, se
UnCampoQualsiasi.Attributes AND adFldLong = true
e
UnCampoQualsiasi.Attributes AND adFldMayDeffer = true]
In ogni caso, non so se o quanto tutto ciò riguardi effettivamente il tuo
'urgentissimo' ;-( problema, ma se con un cursore lato client il problema
dovesse risolversi, allora ciò ne dimostrerebbe la causa.
Infatti pare che un cursore lato client non setti tali proprietà...così
adFldMayDeffer resta a false e ADO non applica la sua interessante strategia
di difesa.
In alternativa è possibile scrivere il valore del campo 'a blocchi',
sfruttando il metodo AppendChunk.
Mah! Spero almeno possa tornarti utile questa dissertazione...Fammi sapere.
NON-MI-PASSA-PIU!!!!!
nonsonostatoio