[ASP] - Vind hier locking plaats?

Pagina: 1
Acties:

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Hallo iedereen,

Had weer eens iets waar ik geen antwoordt op kon vinden.
Ik zit met het volgende, ik was een teller aan het bouwen onder een knoppie.
Dus als iemand op dat knopje drukt wordt er een waarde in de database met 1 omhoog opgeteld.
Het lijkt dus een beetje op een application met een teller erin.
Ik heb hier een ASP boek en die zegt het volgende m.b.t. application:
" Stel dat 2 personen tegelijkertijd een pagina opvragen. Ruth vraagt de pagina op en de application variabele heeft de waarde 354. Op hetzelfde moment vraagt Andere de pagina op. De variable heeft nog steeds de waarde 354. Vervolgens wordt de waarde opgeteld met 1, en wordt dus 355. De waarde moet echter zijn 356."
Als oplossing moet er dus application.lock gebruikt worden.

Ik vroeg me af of hetzelfde probleem optreedt bij mijn update statement of heeft de database hier al een "ingebouwde" beveiliging voor?

P.S mijn database is Access

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 09-08 00:05

Urk

Yes! Kijk maar eens naar locktypes die je in kunt stellen bij je database connectie.

  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Urk schreef op 06 April 2003 @ 02:43:
Yes! Kijk maar eens naar locktypes die je in kunt stellen bij je database connectie.
Heb bij mijn connectie niets ingesteld aan locktypes (probeer dat ADO gebeuren zoveel mogelijk te omzeilen als het kan). Ik maak alleen een verbinding met mijn DSN.

Maar er vind dus locking plaats of pas wanneer ik met die locktypes ga klooien?

Verwijderd

Locks geef je niet op bij een connectie maar bij het maken/vulllen van een recordset. Als je een Update statement maakt in SQL wordt het locken van data overgelaten aan de database (of de driver).

Met Access zal het onder normale omstandigheden goed gaan omdat de Access Jet engine voor locking zorgt, hoewel onder zware load zou kunnen leiden tot slechte performance en in extreme gevallen zelfs tot database corruptie en onbetrouwbare resultaten.

Verwijderd

blijhoofd_bennie schreef op 06 April 2003 @ 14:45:
Heb bij mijn connectie niets ingesteld aan locktypes (probeer dat ADO gebeuren zoveel mogelijk te omzeilen als het kan). Ik maak alleen een verbinding met mijn DSN.
Waarom probeer je dat ado gebeuren zoveel mogenlijk te omzeilen? Ik vind het net makkelijker met een ado verbinding. En dan nog handiger ook. Start learning ado! ;)

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Hier is vooral de implementatie van belang.

Het voorbeeld komt overeen met dat je de waarde uit de database opvraagt.

( je krijgt een 354 terug)

In je code tel je er een bij op ( 355 ) en schrijft dat terug in de database. dan staat er 355, komt de volgende persoon je haalt het getal op ( 355 ) en tel je er een bij op ( 356 ) en schrijft dat weer in de database, dan eindig je op 356, echter stel dat ze op het zelfde moment komen, halen beiden het eerste getal op, ( 354 ) tellen er allebei een bij op ( komen ze beiden op 355 te staan ) dan schrijft de eerste zijn getal weg ( 355 ) , en dan schrijft de andere zijn getal weg ( ook 355, maar die schrijft het over de oude 355 heen ) dus is het einde 355 terwijl dit 356 had moeten zijn.

Als je het tellen echter via een update statement doet ( update tabelletje set kolom1=kolom1+1 where blaat=3 ) dan zorgt zoals MrX het al zei de database voor locking, dat betekent als er een andere connectie komt die het ook wilt updaten zal deze netjes in de rij moeten wachten tot hij mag updaten. ( gaat volkomen automatisch bij elke database! )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • blijhoofd_bennie
  • Registratie: Maart 2000
  • Niet online

blijhoofd_bennie

Wasser für alle!!

Topicstarter
Verwijderd schreef op 07 April 2003 @ 02:13:
[...]
Waarom probeer je dat ado gebeuren zoveel mogenlijk te omzeilen? Ik vind het net makkelijker met een ado verbinding. En dan nog handiger ook. Start learning ado! ;)
In de toekomst wordt de database misschien omgezet naar SQL en ik geloof dat ado commando's zoals bijv. getrows (sorry kan niet ff een concreet voorbeeld vinden) niet werken.
Tevens vind ik SQL plus om de rijen op te halen met bijv. de While not EOF combo duidelijker (is een persoonlijke kwestie natuurlijk).

Voor de overige mensen die gereageerd hebben:
Hartelijk dank voor de info _/-\o_ , weet ik weer wat meer :Y)

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 22-08 14:31

Basszje

Reisvaap!]

Het gaat hier volgens mij helemaal niet om de database of wel :? . Je hebt het erover dat je session dit kan doen, dat klopt idd ( daarom die lock ) .

Een database tijdens een update lockt zichzelf automagisch .. Dit kan trouwens wel optreden als je bv eerst een "Select" doet met die waarde, de waarde teruggooit naar je code en DAN pas een "Update" doet met die geselecteerde waarde .. Maar als je "UPDATE BLA WHERE COUNT = COUNT + 1" oid doet kan dat volgens mij nooit optreden op je waarde.

[edit]Beetje spuit 11 antwoord nu ik de rest zo doorlees :o

[ Voor 10% gewijzigd door Basszje op 07-04-2003 10:18 ]

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.

Pagina: 1