Newsgroup: it.comp.lang.visual-basic
Titolo: LOCK dei record in VB = MERDA !!!!

Sono incazzato nero !!!!
Sto impazzendo a trovare un sistema in VB (5 professional) per fare un
lock dei record
come di deve.......ovvero se in fase di lettura (edit) un singolo record
(e non la fottutissima pagina di 2 Kb) e' bloccato c'e' modo di saperlo
e gestire l'errore ?!?!?!??!
Mi sta' bene tutto il DAO qualunque versione !!! Gli oggetti qualunque
essi siano database, connection ecc.
Sono 10 anni che scrivo programmi in cobol.........lo so il cobol e'
passato, e' vecchio, e brutto .......ma un fottutissimo lock di un
record e' un gioco da ragazzi !!!!
GRAZIE A TUTTI IN ANTICIPO
--
Contact     : Stefano Piersigilli
Company     : StephenSoftware(R)
Address     : Via Ettore Paladini, 45-47-49
Zip         : 00149
City        : ROME
State       : ITALY
Tel.        : +39-6-5571648
Fax         : +39-6-5560638
Internet    : 
http://www.stephensoftware.it
Compuserve  : 106165,2472
Fingerprint : 08 C6 63 BC 79 93 C1 98  46 20 45 11 30 77 5F C9

Se lavori col motore access, temo che tu non abbia alternative.
Comunque cerca di calmarti chela rabbia  non fa bene al cuore 8^)
Leo™
Stefano Piersigilli ha scritto:



Prima di tutto...
Ti consiglio vivamente di non andare a scrivere queste cose su
it.comp.database.access...
Loro (alcuni frequentatori di quel NG) hanno gia' insultato, sfottuto e
fatto incazzare troppo il sottoscritto, quindi, se non vuoi sentirtene dire
di tutti i colori,
Passiamo alle cose serie.
Penso che tu abbia capito che in Access NON ESISTE lock a singolo record...
:-(
Inoltre non puoi simularlo in alcun modo (tranne forse fare in modo che un
record sia esattamente 2KB, ma anche questo non assicura il risultato, oltre
ad essere una soluzione da pecorai (non si offendano gli eventuali pecorai
:-)
Io adotto questo sistema:
- Lock ottimistico: guarda LockEdits nell'help
    in pratica blocca solo durante AddNew o Edit, poi sblocca, blocca solo
durante Update,
    invece quello pessimistico blocca da AddNew/Edit fino a Update...
    Per cui e' come non avere il lock.
- all'Update, in caso di eliminazione o modifica del record corrente da
parte di un altro utente
    il DAO da' un errore trappabile (On Error...) quindi puoi gestire la
situazione cosi'.
Morale della favola (riassunto scarso)
non usi lock...
quindi altri utenti possono modificare e/o cancellare lo stesso record che
tu stai leggendo/editando/cancellando...
quando tenti di terminare l'operazione di modifica/eliminazione (fai Update)
in caso di modifiche concorrenti --> errore!
Trappi l'errore e via...
P.S. Alcune gentili persone su it.comp.database.access continuano a
sostenere che il "loro" Access e' il miglior DBMS... e se gli vai a dire che
le sue strategie di lock faccio ca*are, potrebbero limitarsi a dire che sei
TU che non hai capito la loro logica... va beh!?
P.P.S. Mi sembra che anche SQL Server (sempre Microsoft, ma va?) NON ha il
lock su record, ma su pagine di 2KB (questo almeno fino alla versione
6.5...)
Io sinceramente non capisco perche' alla M$ abbiano fatto questa scelta (e,
per di piu', continuino a sostenerla!)... boh?
--
Roal Zanazzi
z...@iol.it

In effetti 1/3 della guida di VB è dedicata alla gestione dei dati e il Lock
non è che sia molto chiaro, ma dovrebbe funzionare perfettamente se imposti
LockEdits=True sul DataBase.
Se poi fai l'Edit di un record già aperto da un'altra istanza o da un'altro
utente ottieni l'errore, indipendentemente dalla pagina di 2K o quello che
è.
Ciao,
Fabio Guerrazzi

e gestire l'errore ?!?!?!??!
Anche io in ufficio ho avuto lo stesso problema e quelli della
Micro$oft mi hanno risposto che con il database Access non si puo'
fare (hanno deciso di fare il blocco di 2K alla volta per aumentare le
prestazioni. Mah, se lo dicono loro sara' vero, comunque potevano
anche lasciar decidere a noi se volevamo le prestazioni aumentate o
sto' caspita di record bloccato!!).
Comunque io il problema l'ho aggiranto in questo modo: ho messo un
campo ID (contatore) nella struttura e in fase di edit ho bloccato il
byte corrispondente di un file di testo di lunghezza zero (cerca le
istruzioni Open e Lock nell'help di VB). Se il blocco del byte aveva
successo, allora nessuno stava modificando quel record, altrimenti
notificavo all'utente l'impossibilita' di effettuare la modifica.
Devo riconoscere che la soluzione non l'ho trovata da solo, ma me l'ha
suggerita non mi ricordo piu' chi in questo stesso NG.
Spero di essere stato chiaro, comunque domani in ufficio posso
prendermi il codice del blocco e postartelo.
Ciao
Nando


A me hanno detto che con una base dati Oracle il lock singolo e'
possibile, pero' non ho mai provato.
Nando

essi siano database, connection ecc.
Io ho risolto facendo il lock ottimistico che presumo sia l'unico
veramente utilizzabile con il Jet, il lock sul record nel Jet a mio
parere te lo scordi.
--------------------------------------------------------
Paolo Hölzl
Metis Informatica S.r.L technical manager (Ferrara)
--------------------------------------------------------
ATTENZIONE!, antispam 
per reply sostituire xxxx.xxxxxxx.xx con 
mail.asianet.it

...

Tutti i DBMS (DataBase Management Systems), tranne quelli Microsoft, hanno
il lock a singolo record.
(Oracle, Sybase, Informix, InterBase... persino Paradox, che non e'
client/server)
E un motivo ci sara' pure, no?
Infatti gestire i lock su Access o MS SQL Server (a pagine di 2KB) e'
realisticamente impossibile.
E continuo a non capire perche' alla Microsoft abbiano scelto questa
strategia di lock...
--
Roal Zanazzi
z...@iol.it