Newsgroup: it.comp.appl.access
Titolo: aggiornamento contemporaneo db, records duplicati!

Maschera di inserimento nuovi records  (nella fattispecie il protocollo)
Tramite questa istruzione :
nprotocollo=DMax("[nprotocollo]";"[protocollouscita]";"[Idcoop]=[forms]![nuo
vo]![Idcoop]")+1
assegno al controllo  nuovoprotocollo, come valore predefinito, l'ultimo
record inserito incrementato di uno.
(nprotocollo è un semplice campo testo che incremento, non è indicizzato e
non è chiave primaria)
Tutto filava liscio...
Problema: mi sono trovato due record con lo stesso numero. aCC!
Probabilmente due utenti in contemporanea hanno tentato di inserire un nuovo
record ...
come è possibile far si che venga riaggiornato il record al valore corretto
prima di salvare il record ?
sto cercando di fare una requery ... o un refresh ... ma non accade nulla
...

 ha scritto nel messaggio
news:bug9pi$jti$1...@news.flashnet.it...

Credo che i problemi di gestione MultiUtenza siano i più classici, ma anche
i più
complessi da gestire.
Io per il tipo di applicazioni che uso faccio in modo di usare Form Non
associate
per l'AddNew, nel momento di inserire uso una QRY INSERT, non ho risolto
tutti i problemi, ma qualcuno si.....!
Ovviamente la cosa va approfondita in base al tipo di gestionale.
Un'altra possibilità è di usare il Blocco Record Pessimistico/Ottimistico
a seconda, ma questo ti impone sempre di avere Form non associate,
il vantaggio è che con A_XP hai la possibilità di sfruttare il Metodo
Recordset
di Form(Forse anche in A2K, ma non avendolo......)
@Alex.

 ha scritto nel messaggio
news:bug9pi$jti$1...@news.flashnet.it...

Secondo me dovresti assegnare il numero di protocollo dopo il salvataggio
del record; o meglio quando c'è la conferma per salvare i dati. Così (forse)
eviti numeri doppi.
Altrimenti dovresti "bloccare" il numero di protocollo al momento che
l'utente accede al nuovo record; fermo restando che dovresti gestire anche
"il ripensamento" (leggi: annulla)...
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:WGUOb.114382$VW.46...@news3.tin.it...

Entrambi i consigli sono assolutamente validi. Oggi cercherò di fare qualche
prova.
Ieri ho provato a fare in questo modo:
all'apertura della maschera di inserimento dati, quando l'utente decide di
inserire un nuovo documento, impongo di andare immediatamente al controllo
firmatario, faccio un sendkeys scrivendo "inserisci il tuo nome" , poi
faccio un salva record. (questo comando l'ho trovato nelle macro, ora la
converto e cerco il corrispondente comando vba)
in tal modo il record dovrebbe essere salvato e l'utente che inserisse un
nuovo record contemporaneamente, o subito dopo riceverebbe dal dmax il nuovo
valore ...
what do you think about it?  può funzionare?

 what do you think about it?  può funzionare?
E se l'utente ci ripensa? Ti ritrovi una serie di record con solo il
nominativo inserito; non mi sembra questa la via per il paradiso...
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:buj61g$la2$1...@canarie.caspur.it...

ipotesi uno: gli spezzo le gambine ...
ipotesi due: vorrei fare salvare il numero di protocollo alla fine della
compilazione della maschera ... come giustamente consigliavi.
Il concetto è chiarissimo! però, xè c'è sempre un però ... io dalla maschera
di inserimento genero un doc di word che si autoformatta secondo ben precisi
modelli di documento, inserendo alcuni valori tra cui il n.protocollo ecc
...
Come fare a fare da una maschera non asssociata una query insert into?
Non ho mai usato i recordset ... è forse con questi strumenti che si possono
fare?

 fare?
Se hai una maschera non associata, avrai (spero) un bottone che avvia la
procedura che salva i dati in una tabella (query di creazione); prima di
fare tutto ciò aggiorni in numero di protocollo e poi lo leggi associandolo
alla sua casella di testo:
DoCmd.RunSQL "UPDATE nometabellaConProtocollo SET numProt = [numProt]+1;"
Me!numeroProtocollo = DMax("numProt","nometabellaConProtocollo")
...
'--> prosegui con Insert Into
Comunque, se non gestisci il blocco dei record o addirittura tutta la
tabella che contiene il numero di protocollo, non sei al riparo da
"problemini" e qui ci riallacciamo al discorso anche di @Alex.
Ciao.
--
Sergio MAZZA

 ha scritto nel messaggio
news:bujabk$mea$1...@canarie.caspur.it...

Sergio, ti rispondo solo ora xè avevo inizialmente abbandonato l'idea che mi
stavi proponendo, in effetti xò c'è il rischio ripensamento....allora
ricapitolando: maschera non associata, compilazione campi, controllo dmax+1
del protocollo, esecuzione sql insert into.
xè però tu mi proponevi prima l'update e poi  "...prosegui con insert into"
...???


Perché ipotizzavo la presenza di una tabella con i numeri di protocollo
(nometabellaConProtocollo), quindi con l'Update aggiorni il numero + 1 e con
DMax() ottieni l'ultimo numero (più alto) inserito.
Poi prosegui con inserimento dei dati della maschera non associata, presumo
con un Insert Into.
Però torno a dire che il meccanismo non è esente da errori; se vuoi essere
sicuro che dopo aver fatto l'Update del numero+1 e prima della DMax qualcuno
non esegua anche lui l'Update numero+1, devi bloccare la tabella.
Ciao.
--
Sergio MAZZA