Newsgroup: it.comp.lang.visual-basic
Titolo: [?] ADO+SQLsrv, UpdateBatch sembra non andare

ADO 2.5 con SQL Server 7.0 e SQLOLEDB:
Apro un recordset con cursore lato server, modalità Static e lock
ottimistico.
Il recordset (verificato) è scrollabile e aggiornabile. Poi:
Con recordset vuoto, senza records:
debug.print rs.recordcount <<<0
rs.addnew
rs!campo=valore
rs.update
rs.updatebatch
debug.print rs.recordcount <<<1
rs!campo=altro_valore <<<Errore
oppure (con recordset popolato da 2 records):
debug.print rs.recordcount <<<2
rs.movefirst
rs.delete
rs.updatebatch
debug.print rs.recordcount <<<2 (ancora 2)
rs.delete <<<Errore, trova il primo record eliminato come contrassegnato da
eliminare
La UpdateBatch è supportata (ho verificato con Support), ma sembra che non
aggiorni
sul database quanto i vari comandi (update su addnew o delete) hanno messo
nella cache.
Ho appena cominciato a usare ADO (ho sempre usato DAO) con SQL Server
e sono già distrutto. Datemi una mano, per favore. Grazie.

e sono già distrutto.
Coraggio, ci siamo passati tutti!
Alcuni link che potranno farti comodo:
Programming with Active Data Objects
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbegvb/html/programmingwithactivedataobjects.asp
Microsoft ADO and SQL Server Developer's Guide
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsqlsg/html/msdn_adosql.asp
-- 
hth, hal

 ha scritto nel messaggio
news:a913lt$10a6m8$1...@ID-56381.news.dfncis.de...

Hal, ti ringrazio, ora guarderò i link che gentilmente mi hai dato, ma ho
MSDN su CD, la consulto in linea, ho il libro VB6 e SQL Server di Vaugh (o
come cavolo si scrive), ho Books on line di SQL Server, ho già letto come un
bibliotecario, non è possibile che mi debba fermare di fronte a una banalità
come quella che ho scritto. Ho provato anche con il lock batchottimistico,
non c'è verso.


se non erro il record cancellato rimane quello corrente fino a quando
non ci si sposta sul prossimo record disponibile...
fammi sapere.. a dopo
Ciao
 valter


Grazie Valter, proverņ, ma perchč la UpdateBatch non fa quel che dice?
PS: Quando smetterņ di trovare nuove proprietą, flags, ammenicoli?
Se dopo tutto questo scrivo un libro come dico io (non come li scrive M$),
pensi che qualcuno potrą leggerlo?

 Grazie Valter, proverò, ma perchè la UpdateBatch non fa quel che dice?
No, non va, nel senso che posso applicare la proprietà "Change Inserted
Rows" solo a rs chiuso. Quando lo apre me la rimette a False. Ma, senti un
po': Sono convinto che con cursore lato client tutto funziona (proverò), ma
toglimi una curiosità: Tu usi cursori sempre e solo lato client anche se
così schifosamente lenti nell'aprire i recordsets? Grazie.

 > >
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q294160
Posso dire, anzi, ripetere che M$ è una botte di grappa? Non è possibile,
siamo alla versione ADO 2.5 (l'errore si presenta anche con 2.1 (anche se
l'articolo concentra il problema dalla 2.5 in poi)
Dopo la update basta (ovviamente per correggere i loro buchi) fare
rs.movenext e rs.moveprevious che si può editare nuovamente. Non serve
nemmeno la updatebatch. Ora provo con la delete.

 Non serve nemmeno la updatebatch.
Questo è documentato, ora non prendertela di nuovo con la M$.
Da MSDN :
"Se ci si sposta dal record che si sta aggiungendo o modificando
 prima di chiamare il metodo Update, verrà automaticamente
 chiamato il metodo Update per salvare le modifiche.
 Se si desidera annullare le modifiche apportate al record corrente
 o eliminare un record appena aggiunto, è necessario chiamare il
 metodo CancelUpdate".      ;-)
la UpdateBatch ha senso se utilizzi aggiornamenti batch a gruppi...
 Perchè la usi con un lock ottimistico normale? hai qualche motivo
particolare o ti serve per il famoso libro :
 "Accesso ai dati con LUPADO e SQL(upo) SERVER" :-))
P.S. A proposito del libro che intendi scrivere : sarò il primo a leggerlo,
       ma ne voglio una copia autografata ;-)
       Sai che anch'io sono un vecchio RPG-Man? Mamma mia che
       tempacci!! :-))) Ho ancora le sinapsi cotte dal ciclo RPG e dagli
       indicatori di livello....
Ciao
 valter

 ha scritto nel messaggio
news:a91ls0$11nc$1...@newsreader1.mclink.it...

Valter, io non mi sposto dal record che ho appena aggiunto, semplicemente lo
vario nuovamente e lo riaggiorno (ma l'errore è subito alla variazione). La
updatebatch l'avevo messa per la disperazione (della serie "le provo
tutte"), non perchè dovesse servire. Se leggi il link, si parla di un errore
non ancora risolto e, fra le altre 8000 cose, si dice di fare
avanti-indietro.
La delete non va con la stessa regola, sono costretto, dopo la stessa a fare
un rs.requery, ma questo rallenta e non mi piace affatto. E' come chiudere e
riaprire il recordset. Comunque c'ho messo 'na pezza, nel senso che vorrei
modificare il meno possibile la logica dei programmi già funzionanti. Poi
penserò alle prestazioni.

 penserò alle prestazioni.
Non so quanto ti conviene... se hai deciso di migrare ad ADO e continui ad
usarlo
come DAO, secondo me è controproducente, ma visto che facciamo lo stesso
mestiere, capisco che a volte l'urgenza non si sposa con la praticità..
A costo di diventarti antipatico, continuo a consigliarti il libro del tuo
amico Vaughn
"Il modo migliore di usare ADO" ci sono due o tre capitoli dedicati ai
cursori di ADO
e quando scoprirai cosa avviene dietro le quinte all'inoltro di un semplice
Update,
non ti stupirai più di qualche  incongruenza ( chiamiamola così per
educazione,
il sostantivo è un'altro....)
Ciao
 Valter

 il sostantivo è un'altro....)
Mi dovrò davvero rassegnare a un altro testo. Quello che ho mi sembra buono,
ma forse un po' datato (parla di ADO 2.0).
PS: (Scusa se insisto): Tu hai avuto modo di progettare/ottimizzare con
cursori diversi a seconda delle circostanze o usi un solo tipo di cursore.
Se è la seconda, quale?
Grazie ancora, Valter.
Ciao. Luigi.