Newsgroup: it.comp.lang.visual-basic
Titolo: Ado e requery/resync

Ciao a tutti,
ho la necessità di aggiornare i dati di un recorset aperto, senza chiuderlo
e riaprirlo.
In pratica devo:
if adors("PIPPO")=0 then
  adocn.execute "UPDATE tabella SET PIPPO=1"
endif
if adors("PIPPO")=1 then msgbox "pippo"
Mi serve che nel secondo if il valore si aggiorni ad 1 e non rimanga 0.
Il recorset l'ho aperto con le proprietà di default senza definire proprietà
Cursor o simili.
Se utilizzo un adors.requery fra i 2 IF tutto funziona, ma il recordset mi
riparte dall'inizio ovviamente, quindi se devo scorrere 3.000 record, ogni
volta che faccio un update devo riscorrere da capo.
Ho provato il .resync ma mi dice che il provider non lo supporta.
Utilizzo interbase e SIBProvider.
Avete qualche consiglio?
Grazie :)

 if adors("PIPPO")=1 then msgbox "pippo"
If adors("PIPPO")=0 Then
   adors("PIPPO")=1
   adors.Update
End If
If adors("PIPPO")=1 Then MsgBox "pippo"
Ovviamente il recordset deve essere ti tipo aggiornabile (dipende dalla
query che usi per popolare adors).

 dalla query che usi per popolare adors).
Volevo sapere se in questo modo si genere molto traffico di rete o se
comunque è molto più pesante di lanciare un command sql, dato che il db sta
sul server, e i client lanciano questo script su diverse centinaia (o anche
migliaia) di record. E ogni record deve passare da una 15 di update.
In pratica non c'è sempre l'update, solo quando alcuni campi hanno valori
sballati li risetto.
Grazie :)

 sballati li risetto.
Perchè non usi recordset disconnessi?
Così le modifiche le vedi in locale finchè non decidi di aggiornare il 
server (occhio però ai conflitti)
Oppure ti rileggi su un secondo recordset solo il record modificato (questa 
è certamente più pulita della soluzione che hai adottato perchè indipendente 
dall'implementazione utilizzata).
Usare un command o un update non cambia di molto perchè sotto ado converte 
tutto in comandi SQL da inviare al server.
Ciao 


Ne generi una quantità immane!
il fatto di essere dynamic è proprio quello che genera traffico...in pratica
sei costantemente aggiornato nel tuo client sul record remoto.
ORA
se questo script vien chiamato migliaia di volte forse sarebbe bene vedere
se ci sono altre strade percorribili.
NON SOLO
se ci sono anche (piove sul bagnato) migliaia di client che lo eseguono....
pur impostando lockoptimistic....prima o poi un conflitto lo trovi!
In pratica cosa dovresti fare realmente al di la dell'esempio "pippo" ?
-- 
------------------------------------------------
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 New Entry nel bestiario!
:-)

 if adors("PIPPO")=1 then msgbox "pippo"
A parte l'update e il traffico di rete, sui quali ti hanno già risposto, il
tuo codice non può essere scritto come segue?
if adors("PIPPO")=0 then
  adocn.execute "UPDATE tabella SET PIPPO=1"
  msgbox "pippo"
endif
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 In pratica cosa dovresti fare realmente al di la dell'esempio "pippo"
Allora in pratica ho un archivio di persone.
I campi dell'anagrafica a volte possono essere vuoti, oppure avere valori
sballati o che.
La mia applicazione genere un file di record da spedire ad un secondo
programma, prima di creare questo file di record devo perň essere sicuro che
i campi di cui sopra siano "corretti".
Quindi per ogni persona controllo vari campi, ed eventualmetne aggiorno il
valore nel DB, e di seguito per quel recordset chiamo la procedura di
creazioe file.
Quindi
Adors.open "SELECT * FROM TABELLA WHERE " & filtrowhere
do until adors.eof
    controllodati
    creaFileRecord
    adors.movenext
loop
Controlla dati mi fa la sequenza di update *ed anche* un controllo sui dati,
per cui mi restituisce in una variabile$ gli eventuali errori.
CreaFileRecord mi crea il file.
Se io apro come statico, quando faccio creafilerecord non ho i dati
aggiornati con gli UPDATE della procedura di cui sopra...
In conclusione ho bisogno di entrare in creafilerecord con un Adors
"aggiornato".
Grazie :)

 Quindi
tutto quanto sotto IMHO e non conoscendo l'analisi fatta.
Allora il fatto di essere i dati "corretti"...si chiama validazione!
Anche io ho fatto vari errori di gioventů prima di farmi la fatidica
domanda...
cavolo ma perchč non li valido prima i dati?
Quando un utente carica i dati anagrafici (o altri)...normalmente se il
programma č multiutente
..
sta lavorando lato client...
Non solo....stai lavorando su una interfaccia locale che non č necessario
(pensa un po) che sia connessa al database!
Quindi senza stare a scomodare il 3tier che sarebbe optimum ma io non sono
il piů adatto....
Raccolgo i dati in una maschera che mostro all'utente....
IN QUESTA sede valido l'input...ossia...
controllo lunghezze input...controllo campi vuoti ...controllo esattezza
valori (ad esempio un input 123 456 come va gestito?
oppure un campo 123a456 etc etc)
Una volta che ho i dati formalmente esatti....
li invio optimistic updatebatch al server...ed eventualmente gestisco
l'errore di concorrenza
Detta come l'hai detta tu...non sembra ci sia nessun problema di
concorrenza...si tratta di validare i dati prima di inviarli a qualcosa!
Avevo capito che tu avessi un problema di concorrenza
ad esempio il caso tipico...
Movimento di magazzino
in magazzino ci sono 10 scatole di cerini
Utente A arriva e legge 10 scatole e ne preleva 9...prima di battere "save"
guarda le chiappe della sua collega bonazza!
Utente B arriva e legge 10 scatole ne preleva 7...siccome ha accanto un
collega brutto preme subito..."salva"
Utente A riemerge dal coma e preme "salva"
Un attenta gestione dei cursori...oppure un tuo minisistema tramite flag
deve ovviare a ciň!
Saluti!

 flag deve ovviare a ciò!
Nono, niente di tutto questo per questa routine :)