Newsgroup: it.comp.appl.access
Titolo: Modifiche contemporanee

Ciao  a tutti,
ho un database che viene usato contemporaneamente da 3
utenti che spesso lavorano sulle stesse maschere.
Come posso evitare che un utente si trovi ad operare
su di un record che sta lavorando un altro utente??
Ossia, c'e' un modo per farglielo saltare automaticamente
e passare a quello successivo??
Grazie,
Alxx


Ciao Alxx (alla terza x mi sarei preoccupato che tu hard...warista)
Dividi il db in due.
Sul primo ci metti solo le tabelle
sul secondo tutti gli altri oggetti e poi distribuisci a ciascun utente 
questo secondo
(ovvio che dovrai curare il percorso di rete)
MAssimiliano
 

Alxx ha scritto:

Impostando la proprietà "Blocco record" della maschera a "Record
modificati" (vedi help) chi apre un record che è già in fase di modifica
da parte di qualcun altro non può editarlo finchè l'altro non finisce e lo
salva, e vede un simbolo di divieto sul selettore record.
Bisognerebbe verificare se c'è una proprietà di maschera che ti dice se il
record è già bloccato da un altro utente, e in quel caso spostarsi sul
prossimo record.
Il blocco a livello di record è disponibile da A2000 in poi, il 97
bloccava un'intera pagina.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio 
news:8OYPd.2762$hd4....@news.edisontel.com...

devo provare,
mi preoccupa il fatto di curare il percorso di rete in quanto
non so esattamente cosa intendi o se ci sono indicazioni
particolari.
Scusa la domanda forse poco opportuna:
ma cosa cambia se divido il file mdb in due?
cioe' cosa impedirebbe a due utenti di lavorare
contemporaneamente sullo stesso record?
grazie, ciao

 ha scritto nel messaggio
news:37bu21F...@individual.net...

Mi sa che stavolta MA si è leggermente distratto...
Antonio

 Namor
provero' stasera ma temo di averlo gia' fatto,
ottenendo scarsi risultati,
provero' di nuovo, grazie
Ciao

 ha scritto nel messaggio 
news:37bu21F...@individual.net...

Strumenti
utilita di sistema
gestione tabele collegate
MAssimiliano


ho provato ma non funziona,
lo stesso record puo' essere
lavorato contemporaneamente da piu' utenti.
Altri suggerimenti?
ciao
Alxx 

 ha scritto nel messaggio 
news:vA3Qd.2854$hd4....@news.edisontel.com...

ho provato ma non funziona,
due operatori diversi riescono a partire dallo
stesso record ignari l'uno dell'altro.
Hai altri suggerimenti?
ciao
Alxx


Non ho A2k sottomano, ma mi pare di ricordare ci sia un'opzione da qualche
parte (Strumenti --> <qualcosa>) che ti permette di impostare la modalità di
Record Locking. Di default è "Nessun Lock": prova a metterla a "Pessimistic"
(anche qui non ricordo le voci esatte).
HTH.
Alessandro

Ciao a tutti,
purtroppo non ho ancora capito ne sono riuscita ad
impostare un mdb per evitare modifiche contemporanne.
Nonostante i preziosi suggerimenti di MA, namor ed Alex NSB
non riesco, tuttora, ad evitare che lo stesso record
venga visualizzato da due operatori diversi
in fase di modifica. Accade infatti questo:
due operatori in rete avviano su due pc diversi la stessa maschera,
questa si apre filtrando (con una query) i dati da una tabella.
Vengono filtrati n record e questi operatori li devono lavorare
e modificare. Accade che entrambi si trovano con lo stesso
record sullo schermo nella condizione (sempre entrambi),
di modificarlo contemporaneamente.
Come posso evitarlo? Insomma, c'e' un modo
per far si che l'operatore A, pur usando la stessa
maschera dell'operatore B non visualizzi (salti)
o veda bloccato il record che sta lavorando quest'ultimo?
Grazie
Alxx 

 o veda bloccato il record che sta lavorando quest'ultimo?
Non hai ancora specificato che versione di Access usi nč se hai un db unico
o diviso in BE/FE nč se la maschera č bound o unbound.
Comunque ho fatto un po' di ricerche in rete e sembra un problema abbastanza
diffuso e non completamente risolto.
Tra le altre cose ho trovato questo codice (che NON ho verificato):
Private Sub Form_Dirty(Cancel As Integer)
    Dim rsClone As DAO.Recordset
    Dim strCriteri As String
    On Error GoTo Form_Dirty_Err
    'Prima modifica a questo record tramite QUESTA form
    'controllo se qualcun altro lo sta modificando
    If Not Me.NewRecord Then
       strCriteri = "<inserisci qui un criterio per recuperare il record>"
       Set rsClone = Me.RecordsetClone
       rsClone.FindFirst strCriteri
       'se la seguente istruzione non genera errori,
       'posso modificare il record.
       rsClone.Edit
       rsClone.Close
       Set rsClone = Nothing
    End If
    Exit Sub
Form_Dirty_Err:
    Select Case Err.Number
    Case 3218, 3260, 3046
        'non posso modificare il record,
        'qualcun altro lo sta modificando
        MsgBox "Un altro utente sta modificando il record. Riprova piů
tardi.", vbOKOnly + vbInformation, "Record Lock"
        Cancel = True
        rsClone.Close
        Set rsClone = Nothing
        Exit Sub
    Case Else
        Call WriteError("Form miaForm:Form_Dirty", Err.Number,
Err.Description)
        Exit Sub
    End Select
End Sub
 provalo nella tua form e vedi se aiuta.
Alessandro

Alxx ha scritto:

Come già suggerito, se imposti la proprietà "Blocco record" della maschera
a "Record modificati" non impedisci di visualizzare in contemporanea lo
stesso record ma impedisci le modifiche in contemporanea. Il primo utente
che inizia a modificare il record potrà farlo con comodo, gli altri
vedranno sul selettore record un segno di divieto ad indicare che
qualcun'altro ci sta lavorando, e non potranno editarlo finchè chi l'aveva
impegnato non lo rilascia salvandolo o annullando le modifiche.
Questo da A2000 in poi, e abilitando Strumenti/Opzioni/Avanzate/Apri db
con blocco a livello di record.
Leggi l'help in linea, è spiegato abbastanza bene.



(non mi ero accorta di aver mandato lo stesso messaggio)
in merito al blocco record devo dire che pur avendo impostato
tutto (credo) non appare il segno di divieto e non so perche'.
sul selettore della maschera appare il triangolino nero sia
sul pc1 che sul pc2
ciao
Alxx 


E' un errore di copia incolla, trichiama una funzione che non ti è stata 
inviata
Puoi cancellarla o almeno metterci un apostrofo prima così lui te la salta
MAssimiliano

 Alxx
Il segno di divieto appare appena tenti di modificare un record bloccato,
oppure se il record č giŕ bloccato al momento in cui viene visualizzato, o
dopo pochi secondi di attesa.
Prova cosě: apri i due FE sullo stesso record e fai una piccola modifica
in uno dei due (senza salvare), poi prova a modificare il record anche
dall'altro e vedrai che compare il divieto e non accetta la modifica.
Oppure fai una modifica nel primo (senza salvare), poi torna sull'altro e
aspetta qualche secondo, vedrai che compare.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 



La prima riga te la scrive in rosso perchč NON deve andare a capo (la parola
"tardi" deve seguire "Riprova piů").
La seconda effettivamente č un errore (avevo detto di NON aver fatto
controlli): puoi provare commentarla (come suggerito da MA) oppure a
sostituiral con:
MsgBox "Errore numero " & Err.Number & " " & Err.Description, vbOKOnly +
vbInformation, "Errore"
In entrambi i casi, controlla che sia tutto sulla stessa riga.
HTH.
Alessandro

 Alessandro
mi da quest'errore nel momento in cui scrivo la prima lettera nel
campo della maschera, poi continua normalmente.
Errore numero 3077 Errore di sintassi (operatore mancante) nell'espressione.
ciao
Alxx 

 nell'espressione.
Che versione di Access hai?
La tua form è bound o unbound?
Hai corretto (e come) l'istruzione
strCriteri = "<inserisci qui un criterio per recuperare il record>"
?
Alessandro


non ho inserito nulla di codice, ho solo copiato ed
incollato quello da te suggerito.
Cosa devo corregere e dove?
(premetto che di codice, come gia' detto, ne capisco
poco e niente)
grazie Alessandro, ciao 

 poco e niente)
Devi inserire una stringa che permette alla successiva FindFirst di
ricercare il record corrente nella tua tabella.
Qualcosa come (ATTENZIONE, devi personalizzare in base all'effettivo disegno
della tabella e della form):
strCriteri = "ID_Tabella=" & Me.ID_Tabella
HTH.
Alessandro

 Alessandro
sotto c'e' il codice che ho inserito nella form,
seguendo pedissequamente le tue indicazioni,
perdona la mia completa non padronanza di codice e
controlla cosa c'e' che non va. Sicuramente ho
commesso errori grossolani,
grazie, ciao
Alxx
Private Sub Form_Dirty(Cancel As Integer)
    Dim rsClone As DAO.Recordset
    Dim strCriteri As String
    On Error GoTo Form_Dirty_Err
    'Prima modifica a questo record tramite QUESTA form
    'controllo se qualcun altro lo sta modificando
    If Not Me.NewRecord Then
       strCriteri = "ID_Tabella=" & Me.ID_Tabella
       Set rsClone = Me.RecordsetClone
       rsClone.FindFirst strCriteri
       'se la seguente istruzione non genera errori,
       'posso modificare il record.
       rsClone.Edit
       rsClone.Close
       Set rsClone = Nothing
    End If
    Exit Sub
Form_Dirty_Err:
    Select Case Err.Number
    Case 3218, 3260, 3046
        'non posso modificare il record,
        'qualcun altro lo sta modificando
        MsgBox "Un altro utente sta modificando il record. Riprova piů
tardi.", vbOKOnly + vbInformation, "Record Lock"
        Cancel = True
        rsClone.Close
        Set rsClone = Nothing
        Exit Sub
    Case Else
        MsgBox "Errore numero " & Err.Number & " " & Err.Description,
vbOKOnly + vbInformation, "Errore"
        Exit Sub
    End Select
End Sub

 commesso errori grossolani,
Come si chiama il campo chiave primaria della tua tabella?
Questo campo è presente sulla form? Se non è presente, aggiungilo (magari
nascosto).
Quindi modifica la seguente istruzione
strCriteri = "ID_Tabella=" & Me.ID_Tabella
sostituendo ID_Tabella con il nome reale del campo chiave primaria della tua
tabella (tra parentesi quadre se contiene spazi o caratteri speciali).
Alessandro


la chiave primaria si chiama "ID"
quindi dovrebbe essere:
strCriteri = "ID" & Me.ID
giusto?
Ciao 

"ID=" non "ID"
lo gia' corretto, mea culpa!
ciao
Alxx


E funziona?
Alessandro


sembra proprio di si', grande!
dico sembra perche' devo testarla in un vero ambiente multiutente
ma immagino che tu abbia fatto centro, grazie
Alxx