Ik ben bezig voor een project om een vb client-server applicatie te bouwen. We gebruiken hiervoor ADO en SQL server 2000.
Als een gebruiker bij een scherm een record wil gaan wijzigen, zal dit record eerst gelockt worden. We doen dit op de volgende manier:
UPDATE .....
SET ID = 2
WHERE ID =2
Dit gaat allemaal gewoon goed.
Nu komt het probleem. Als we dus een record gelockt hebben en vervolgens dezelfde applicatie nog een keer gaan draaien dan loopt die applicatie vast. Stel er zijn 5 records en het 3e record hebben we gelockt bij de eerste applicatie.
De 2e applicatie zal dan de 1e 2 records wel kunnen uitlezen, maar bij de 3e blijft die wachten totdat de gebruiker de lock (dus transactie) heeft opgeheven. Dan zal de 2e applicatie de volgende records ook kunnen uitlezen.
Het probleem is dus dat die bij die update lock dus ook een read lock op een of andere wijze toepast. Maar ik wil alleen een write lock hebben zodat ik dus wel de records uit kan lezen ondanks dat deze locked is.
Is dit mogelijk?
Als een gebruiker bij een scherm een record wil gaan wijzigen, zal dit record eerst gelockt worden. We doen dit op de volgende manier:
UPDATE .....
SET ID = 2
WHERE ID =2
Dit gaat allemaal gewoon goed.
Nu komt het probleem. Als we dus een record gelockt hebben en vervolgens dezelfde applicatie nog een keer gaan draaien dan loopt die applicatie vast. Stel er zijn 5 records en het 3e record hebben we gelockt bij de eerste applicatie.
De 2e applicatie zal dan de 1e 2 records wel kunnen uitlezen, maar bij de 3e blijft die wachten totdat de gebruiker de lock (dus transactie) heeft opgeheven. Dan zal de 2e applicatie de volgende records ook kunnen uitlezen.
Het probleem is dus dat die bij die update lock dus ook een read lock op een of andere wijze toepast. Maar ik wil alleen een write lock hebben zodat ik dus wel de records uit kan lezen ondanks dat deze locked is.
Is dit mogelijk?