Newsgroup: it.comp.lang.visual-basic
Titolo: [vb.net] Forzare scrittura db (access)

Sto impazzendo per un problema apparentemente assurdo: ho una sequenza
di operazioni batch da fare su un db access e alcune istruzioni update
non vanno a buon fine da un certo punto in poi.
Se eseguo il programma in debug, andando step-by-step, però, tutto va
alla perfezione... insomma ho l'impressione che si perda le operazioni
per una sorta di "riempimento buffer". So che quello che ho scritto
sembra assurdo, ma é così.
Ho fatto anche un'altra prova, ovvero chiudere e riaprire il db ogni
volta che lancio una di queste procedure. Tutte le operazioni vanno a
buon fine... mah!
C'é qualche metodo che posso invocare sull'oggetto OleDbConnection? Ho
letto un po' di help, ma non trovo una soluzione, a parte
aprire-chiudere ogni volta la connessione.
Ciao e grazie a chi vorrà darmi una mano....
GigioTD

è tristissimo, ma anche io ho avuto lo stesso problema.
girando su internet avevo a suo tempo trovato indicazioni in merito,
che, mi sembra di ricordare, proponevano, come soluzione,
la variazione di una chiave di registro del tipo 'database timeout'
'delay' ecc.
non dico come ho risolto io, per vergogna e pudore.
do solo una indicazione: dopo avere chiuso il recordset, prima di
elaborare i records flaggati, timer=enabled, .......
credo però che se invece di lavorare con adors.update e adors.movenext
avessi fatto, se fattibile, adocn.execute "update file set campo1='1'
where ...."
forse avrei risolto, e anche più brillantemente...
in ogni caso, se qualcun ha soluzioni pulite, sarò lieto di leggerle.
NULLA E' IMPOSSIBILE, PER CHI NON DEVE FARLO.

Forse questo puo' aiutarti
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q200300
Ciao

 
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q200300
Gli ho dato un occhio ed ho provato a utilizzare la commit della
transazione... ma ottengo un errore di altro tipo.
In pratica, visto che in genere l'apertura/chiusura della connessione
costa del tempo, io ne faccio una quando parte l'applicazione (var.
Global) e la passo come parametro a tutte le procedure che ne hanno
bisogno.
Nello specifico, il caso é piuttosto complesso... cerco di
semplificare, spero di riuscire ad essere chiaro.
La connessione globale mi serve per fare un loop in lettura.
All'interno del loop devo lanciare delle istruzioni update, tramite una
procedura parametrica e quindi ho bisogno di un'altra connessione,
visto che non posso usare la prima per leggere e scrivere
contemporaneamente.
Quindi dichiaro un'altra var. come oledb connection fuori dal loop e la
passo ad ogni ciclo alla funzione che fa update.
In pratica:
------------------------------------------------------------------------------------------------------
'(var. globale, fuori dal loop)
Public myConnDelta As New OleDbConnection
'(var. locale, fuori dal loop)
Dim MyConnUpdate As New OleDbConnection
While
   procUpdate(campo1, campo2, myConnUpdate)
end while
MyConnUpdate.close()
------------------------------------------------------------------------------------------------------
procUpdate ha le seg. righe:
------------------------------------------------------------------------------------------------------
sub procUpdate
        Dim istrUpd
        Dim cmd As OleDbCommand
        Try
            istrUpd = "UPDATE nomeTab  SET xxx=par1 where
campochiave=par2"
            cmd = myConn.CreateCommand()
            cmd.CommandText = istrUpd
            cmd.ExecuteNonQuery()
        Catch Myex1 As Exception
            MessageBox.Show(Myex1.Message.ToString)
        End Try
        cmd.Dispose()
end sub
------------------------------------------------------------------------------------------------------
Quello che ho sperimentato é che devo chiudere e aprire la conn.
globale ogni volta che chiamo una procedura come questa (ne ho diverse
in sequenza simili a questa).
Non so se mi sono spiegato abbastanza.... comunque usando una
beginTransaction e una CommitTransaction fuori dalla proc. di update,
ottengo un errore che dice che l'execute richiede che il command abbia
una transaction locale e che questa non risulta inizializzata... boh...
ci smeno altri pochi minuti, poi vorrà dire che mi terrò
l'apertura/chiusura di connessione globale... :(
Ciao e grazie!
GigioTD

 forse avrei risolto, e anche più brillantemente...
Credo che sia proprio quello che ho fatto io, ottenendo lo stesso
problema: non uso mai i comandi movenext, etc., ma solo istruzioni sql!
Ciao
GigioTD