Een tijd geleden heb ik een programma geschreven in VB6.0 voor bedrijfsadministratie werkzaamheden. Dat programma zou toen door slechts 1 gebruiker tegelijk worden gebruikt.
Nu is dat bedrijf flink aan het groeien, en komt het regelmatig voor dat er 2 mensen tegelijk nodig zijn. Ik heb hier bij het ontwerp van mijn programma toen helaas geen rekening mee gehouden.
Ik ben nu wat aan het rondsnuffelen geweest over concurrency en locking, maar ik kom er zelf niet helemaal uit. Daarom, geachte tweakers, zou ik graag jullie advies willen hebben.
Technische specificaties:
Taal: VB6.0
DBMS: MS SQL Server 2000
In het programma worden steeds connecties aangemaakt via ADO (geen adodc). De recordsets worden aangemaakt en nadat alle data verstuurd/ontvangen is wordt de connectie weer verbroken.
De DBMS staat op een apparte server, de applicatie draait op fat-clients. De clients kennen elkaar onderling niet (laptops van de gebruikers zelf).
Het komt niet echt vaak voor dat de twee gebruikers dezelfde records aan het editten zijn, maar ik moet er absoluut zeker van zijn dat dit niet mogelijk is. (Murphy
)
Wat dus niet mag gebeuren is: Gebruiker A haalt data op, gebruiker B haalt dezelfde op, B veranderd en update de data, A veranderd en update de data waardoor de wijzigingen die B aanbracht weer weg zijn.
Wat wel kan ik dat gebruiker A dan een message ziet, dat de velden veranderd zijn, en of hij zeker weet dat hij de updates wilt doorvoeren. (De gebruikers zitten bijna altijd bij elkaar)
Dit moet natuurlijk niet gelden wanneer er andere records worden aangevraagd uit dezelfde tabel of wanneer er slechts data wordt aangevraagd die niet geupdate hoeft te worden (die velden kan ik dan wel in VB locken, zodat ze niet ge-edit kunnen worden), dus eigenlijk 'read-only' records.
Oplossingen:
Optimistic Locking
Pessimitic Locking
Cursor Locking - Read Only
Cursor Locking - Optimistic With Values
Cursor Locking - Optimistic With Row Versioning
Cursor Locking - Scroll Locks
Graag had ik julli (onderbouwde) advies over welke manier van locking toe te passen op dit probleem. En over hoe dit te integreren in het huidige programma.
Bij Voorbaat dank!
Nu is dat bedrijf flink aan het groeien, en komt het regelmatig voor dat er 2 mensen tegelijk nodig zijn. Ik heb hier bij het ontwerp van mijn programma toen helaas geen rekening mee gehouden.
Ik ben nu wat aan het rondsnuffelen geweest over concurrency en locking, maar ik kom er zelf niet helemaal uit. Daarom, geachte tweakers, zou ik graag jullie advies willen hebben.
Technische specificaties:
Taal: VB6.0
DBMS: MS SQL Server 2000
In het programma worden steeds connecties aangemaakt via ADO (geen adodc). De recordsets worden aangemaakt en nadat alle data verstuurd/ontvangen is wordt de connectie weer verbroken.
De DBMS staat op een apparte server, de applicatie draait op fat-clients. De clients kennen elkaar onderling niet (laptops van de gebruikers zelf).
Het komt niet echt vaak voor dat de twee gebruikers dezelfde records aan het editten zijn, maar ik moet er absoluut zeker van zijn dat dit niet mogelijk is. (Murphy
Wat dus niet mag gebeuren is: Gebruiker A haalt data op, gebruiker B haalt dezelfde op, B veranderd en update de data, A veranderd en update de data waardoor de wijzigingen die B aanbracht weer weg zijn.
Wat wel kan ik dat gebruiker A dan een message ziet, dat de velden veranderd zijn, en of hij zeker weet dat hij de updates wilt doorvoeren. (De gebruikers zitten bijna altijd bij elkaar)
Dit moet natuurlijk niet gelden wanneer er andere records worden aangevraagd uit dezelfde tabel of wanneer er slechts data wordt aangevraagd die niet geupdate hoeft te worden (die velden kan ik dan wel in VB locken, zodat ze niet ge-edit kunnen worden), dus eigenlijk 'read-only' records.
Oplossingen:
Optimistic Locking
Pessimitic Locking
Cursor Locking - Read Only
Cursor Locking - Optimistic With Values
Cursor Locking - Optimistic With Row Versioning
Cursor Locking - Scroll Locks
Graag had ik julli (onderbouwde) advies over welke manier van locking toe te passen op dit probleem. En over hoe dit te integreren in het huidige programma.
Bij Voorbaat dank!