Newsgroup: it.comp.lang.visual-basic
Titolo: Blocco DB Access quando carico i dati

Salve, ho un'applicazione che all'avvio fa un ciclo su tutti i record di una tabella per compilare delle combobox.
Durante questo caricamento, che normalmente dura dai 30 ai 50 secondi, il database è ovviamente lokkato.
Se in quel momento la stessa applicazione che gira su un secondo pc in rete e che accede allo stesso DB tenta di scrivere sul DB stesso mi succede un casino.
Come posso fare a gestire questa situazione? Uso ADO.

 casino. Come posso fare a gestire questa situazione? Uso ADO.
 
Non usare Access :-)
 
.m
 
-- 
blog @ //
milestone.topics.it
 
 
 

 blog @ //
milestone.topics.it
 
 
I record sono più di 10000.
Ormai è tutto fatto per interfacciarsi con Access... non voglio cambiare.

 Ormai è tutto fatto per interfacciarsi con Access... non voglio cambiare.
 
c'è poco da fare, Access e la multiutenza non sono propriamente amici.
Però, domanda: quale è la casistica in cui "ti si incasina tutto"?


 Ormai è tutto fatto per interfacciarsi con Access... non voglio cambiare.
 
Capisco.
Però se fossi il cliente, un lavoro del genere nel 2012 non lo 
accetterei...
 
Alberto
 
 


E' un progetto che avevo fatto io diversi anni fa.... lo so che fa schifo ma 
all'epoca mi stavo cimentando nella programmazione e poi ho lasciato perdere... ora mi chiedono di migliorare questo aspetto....
 
Vi faccio vedere come è il codice attuale...
 
Dim cnn2 As ADODB.Connection
Dim recArt As New ADODB.Recordset
recArt.Open "SELECT * FROM tabArticoli ;", cnn2, adOpenStatic, adLockPessimistic, adCmdText
nrec = recArt.RecordCount
recArt.MoveFirst
Do Until recArt.EOF
 
.... e qui comincia il popolamento vero e proprio...
 
cmbDescrizione.AddItem recArt!descrizione
cmbDescrizione.AddItem recArt!descrizione
 
.... ecc ecc ecc
 
recArt.movenext
loop
 
Per fare come dici tu come devo fare?

 loop
 
cmb.Descrizione.Visible=False
 
-- 
Greg 
 
 

 Per fare come dici tu come devo fare?
 
Piï¿œ o meno ï¿œ cosï¿œ.
Perï¿œ:
- Select * ï¿œ una porcheria, si fa sempre l'elenco delle colonne
- Il lock a cosa ti serve?
- Prima dell'apertura del recordset, impostane il cursorside a client
- nascondi la combo prima di fare il loop e visualizzala alla fine
- la connessione ï¿œ meglio attaccarla al recordset col SET prima 
dell'open
 
Alberto
 
 

Ormai � tutto fatto per interfacciarsi con Access... non voglio cambiare.
 
Che significa ciclare su 10000 record? Non farai mica una combo con 10000 
elementi....
 

 Alberto
 
Grazie per i consigli ma ti chiedo:
 
- select * non è uguale a fare select elencando tutti i campi?
- il lock mi serve per fare in modo da visualizzare un messaggio al secondo pc che tenta di accedere e farlo aspettare, quando il DB si è liberato allora può proseguire
- le combo non sono visualizzate in quanto sono su dei form che sono nascosti
- non ho capito il discorso del SET prima dell'open
 
Grazie

 - non ho capito il discorso del SET prima dell'open
 
Ok, mi arrendo.
 
 
Alberto
 
 

 Certo, ma in una combobox mica ti serviranno TUTTI i campi, mi auguro...
 
il problema dell'usare il SELECT * invece di elenecare i nomi dei campi 
(che ï¿œ una ottima pratica) ï¿œ che l'* obbliga il db a capire come ï¿œ 
fatta la struttura della tabella, e quindi fa un lavoro inutile che gli 
potresti tranquillamente risparmiare.


 blog @ //
milestone.topics.it
 
 
Grazie a tutti per i consigli... ora proverò a metterli in pratica.


MAH!
...ti han già detto tutto.....
cmq...piccoli consigli...secondo me!
 
ABBI PAZIENZA....stai leggendo una tabella....per popolare un combo! Non 
per leggere un saldo di un conto corrente!
 
MA PERCHE' pessimistic???? che per forza ti lokka tutta la tabella???
Che poi non capisco il senso
 
ragiona insieme a me
 
ORE 10:00 Tabella articoli
    LOCK
      leggo articoli
      popolo combo
    UNLOCK
ore 10:05
 
Cosa hai ottenuto di vantaggio? Mi dirai...caro briacone..ho la tabella 
aggiornata con i nuovi articoli!!!
UH! caro mio...ok l'hai aggiornata
ok poniamo il caso che
 
ore 10:10 PAMELA "la pantera" introduce ordini
ore 10:15 GINO introduce un nuovo articolo
ore 10:20 PAMELA "la pantera" introduce ordini
ore 10:21 GINO modifica un articolo...casomai dell'ordine di PAMELA...ad 
esempio lo sconto se non proprio il prezzo!
ore 10:22 ARGH PAMELA "la pantera" introduce un ordine proprio con 
l'articolo modificato da GINO
 
Dove ti ha aiutato il pessimistic??? In nulla! ...hai un combo 
assolutamente non allineato con il database!!!
Lo potevi tranquillamente leggere con il cursore più veloce ossia 
forward only!
 
Pensa un po se GINO marchiava come esaurito una articolo....e lo 
toglieva dal listino! PAMELA "la pantera" continuava a fare ordini con 
l'articolo ritirato!
 
Ragionare alla Net...abituati a questo....
DB client server e in ado BatchUpdate e concorrenza ottimistica....
 
Access non si presta ad avere elaborazioni lato server
 
Però se vuoi rimanere con un database basato su file
 
SQLserver compact qualcosa
 
ed
SQLite
in access non è possibile....ma ad esempio in SQLite si..dei TRIGGER 
delle STored....spostare sul server una parte di 
elaborazione...aiuterebbe alquanto!
 
 
Un sistema di alert...o di semafori....poi....sarebbe auspicabile!