Newsgroup: it.comp.lang.visual-basic
Titolo: [1/2 OT] Scrivo sul db, leggo e non trovo quello che ho scritto...

Ho un programma che gira senza problemi su tutti i S.O.
Su 4 macchine identiche (HP Pavillon) con W2000 Pro SP2 succede che:
Con un programma VB6 (SP5) e DAO 3.51, scrivo un record sul database (Access
97) , dopo pochi istanti (praticamente subito) lo ricerco con un comando SQL
e non lo trovo. Questo mi incasina. Sono sicuro che è stato scritto (lo vedo
con VisData). La cosa accade solo (!) su queste macchine.
Non l'ho messo nel subject, ma: AIUTOOOOO! Avete qualche idea? Grazie a
tutti.


Scommetto che se prima della rilettura ti fermi un paio di secondi con un
breakpoint ad es. poi funziona :)
Ci ho perso 15 giorni di imprecazioni ma credo di avere la soluzione.
1) Non usare i controlli data: gestiscono internamente il caching dei dati e
non scrivono immediatamente su disco.
2) Se proprio devi usarli fai un Set data.Recordset = MioRecordset, dovo
MioRecordset č un recordset aperto manualmente.
3) Prima di rileggere i dati fai un DBEngine.Idle dbRefreshCache per forzare
tutti i dati in cache a essere scritti fisicamente su disco, cosě da poter
essere riletti.
Ciao

 essere riletti.
Grazie, proverò con la terza (non uso assolutamente i controlli data), ma
temo (sic!) che ci sia già quanto dici. Ma perchè solo su quelle macchine?
(Differenze di velocità???)


Bella risposta, completa e mirata al problema allo stesso tempo, salvata nei
post importanti, anche se io, da quando faccio tutto da codice, problemi di
questo tipo non ne ho piů avuti.
Ciao

 essere riletti.
Io ho un problema molto simile con ADO: sulla stessa connessione eseguo
prima un connessione.execute "DELETE Qualcosa..." poi immediatamente dopo
faccio una select e il dato cancellato magicamente riappare (ovvaimente
controllando nel database č stato cancellato)! Se la cosa non fosse
preoccupante la metterei in ridere! :-)
Non č che hai una cura anche per questo? Io attualmente il problema l'ho
aggirato modificando la select. :-(
--
Ciao
Alessandro

Io ho avuto gli stessi problemi con ADO e ho risolto con un requery del
recordset (fortuna che non è mastodontico :( ) e subito dopo un find per
riposizionarmi. Altrimenti picche. Non avrei mai visto il record appena
inserito... :(
CiaoZ
SebaMix

 ha scritto nel messaggio
news:a6pu19$g9o1n$1...@ID-66833.news.dfncis.de...

Il porblema è che io la query la faccio ex-novo... non è che pretendo che il
recordset si autoaggiorni! Prima cancello un dato, poi faccio una select e
il dato me lo ritrovo! :-( Non è mica che mi posso mettere ad aspettare i
comodi suoi... (avevo anche provato con uno sleep ma non posso mica far
affidamento su qualcosa di simile!) :-(

 essere riletti.
Riposto con la coda fra le gambe. Come avevo supposto, il DBEngine.Idle
dbRefreshCache c'è già (e c'è anche un forse obsoleto dbFreeLocks), tutto
ciò prima della Select. Addirittura chiudo prima il recordset e lo riapro
con tutta la tabella, poi faccio la Select di quello che interessa. Non uso
i controlli Data.
Sono abbattuto!

 recordset si autoaggiorni! Prima cancello un dato, poi faccio una select e
[...]
Guarda che io il delete lo facevo su di un recordset... :(
CiaoZ
SebaMix


C'è ancora una possibilità (molto strano comunque che non funzioni... forse
c'è qualcosa che sfugge... provato a lasciare solo dbRefreshCache?)
Puoi provare con la DBEngine.SetOption così (spero di ricordarmi, al massimo
cerca su MSDN SharedAsyncDelay o FlushTransactionTimeout):
DBEngine.SetOption dbFlushTransactionTimeout, 0
DBEngine.SetOption dbSharedAsyncDelay, 0
DBEngine.SetOption dbExclusiveAsyncDelay, 0
Ciao


Ho idea che DAO 3.51 su macchine WIN2000 SP2, dove quindi
è installata minimo la versione 2.5 SP2 di MDAC, possa provocare
qualche scompenso, soprattutto per quanto riguarda l'esatta esecuzione
di statements SQL ( bug documentato anche se riferito a problemi diversi
dal tuo ).
Purtroppo non posso verificare in quanto uso ancora WIN98SE..
prova a modificare i riferimenti del progetto con  DAO 3.6, così, tanto
per provare...
Comunque il fatto che su altre macchine funzioni tutto alla perfezione,
credo
indichi che la strada da seguire potrebbe essere quella di eventuali
incompatibilità
tra DAO 3.51, le dll JET installate e WIN2000 SP2. Al limite dai un'occhiata
qui :
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q237994
Io ci ho provato... :-)
Ciao
 Valter