multiuser probleem

Status
Niet open voor verdere reacties.

scarie

Gebruiker
Lid geworden
18 jul 2004
Berichten
83
goedemiddag,

Ik heb een database gemaakt in multiuser omgeving. In deze db is een inschrijvingsformulier voor nieuwe leden afhankelijk van de tabel "leden". Er wordt automatisch een nieuw lidnummer aangemaakt met de volgende code:

Dim curx As Currency
curx = DMax("[lidnummer]", "leden") + 1
Me.Lidnummer = curx
DoCmd.RunCommand acCmdSaveRecord

Dit gebeurt helemaal op het laatste, dus als alle andere gegevens reeds ingevuld zijn, met een "save" opdrachtknop
Dit werkt prima maar het onvermijdelijke is gebeurd:
Het lidnummer in de onderliggende tabel "leden" is de primary key.
En nu hebben 2 users tegelijkertijd op de knop "save" gedrukt.
Dit heeft tot gevolg dat het lidnummer bij de ene user hetzelfde wordt dan de andere en wordt er maar 1 record opgeslagen. Dit is het record van de user die een fractie van een seconde rapper gedrukt heeft dan de andere.
Is het mogelijk om dit op te lossen?

Dank bij voorbaat
 
Waarom gebruik je het currency type voor een integer of long veld? Het Currency type is een double die heb je voor een volgnummer niet nodig.

Je probleem is op verschillende manieren op te lossen.

1 - De meest eenvoudige manier is door als key een autonummer veld als Key te gebruiken.
2 - Reserveer een nieuw lidnummer voor een gebruiker. Maak een tabel met twee velden. Een autonummer veld als Key en een tekst veld. Schrijf de naam van de gebruiker naar het tekst veld. Haal op basis van deze naam het nummer op. Verwijder het record uit deze tabel. Je hebt nu een uniek volgnummer dat je verder kan gebruiken.

De tweede geeft je meer flexibiliteit. De eerste is makkelijker.

HTH:D
 
Hallo Guus,

Bedankt voor de reactie, maar intussen heb ik het anders opgelost.
Namelijk access genereerde een fout indien de ene user een fractie van een seconde later reageerde dan de andere.
Dus heb ik die opgevangen in de gebeurtenis "OnClick" van de gebeurtenisknop "Save"

Nu ziet het er zo uit:
Private Sub Save_Click()
On Error GoTo Err_Save_Click

Dim curx As Currency
curx = DMax("[lidnummer]", "leden") + 1
Me.Lidnummer = curx
DoCmd.RunCommand acCmdSaveRecord


Exit_Save_Click:
Exit Sub
Err_Save_Click:
Displaymessage ("Opgelet! Er worden 2 leden tegelijkertijd ingeschreven!
Automatische aanpassing gebeurt na OK.")
Me.Lidnummer = Me.Lidnummer + 1
DoCmd.RunCommand acCmdSaveRecord
Resume Exit_Save_Click

End Sub

User1 = de vlugge user
User2 = de trage

Deze fout komt alleen voor bij de user2 . Bij de user1 ziet men niets en wordt het record gewoon opgeslagen. Indien de user2 op de ok knop drukt gebruikt hij het laatste record van User1 + 1

En het werkt.
Die currency was wel een foutje. Dat zal ik nog veranderen.

Toch bedankt want uw denkwijze is ook perfect
 
Bedankt voor je terugkoppeling.

Blij dat het werkt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan