Toon posts:

[ASP] Access 2000 met meerdere gebruikers. Script lock?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag allen,

Na een hoop zoeken:

Ik heb een site gemaakt waar nogal eens meer dan 1 (laten we zeggen rond de 20) gebruikers tegelijk doorheen surft.
Op de site staan o.a. Login systeem, Picture Vote en een Forum syteem (bij foto's; zie ook www.q-dance.nl)
Dit is dus aardig wat database gerommel.

Probleem:

Veel gebruikers klagen over 'File already in use' fouten, logisch (denk ik) want als ik een plaatje een cijfer geef en iemand anders stemt tegelijk, dan gaat het script iets weg schrijven naar de db terwijl iemand anders dat ook wil...
Ik heb wat zitten testen, en het lijkt erop dat het probleem zich met name voordoet bij het updaten: dan zit er locktype 3 op, dit leek me de beste voor de situatie maar het geeft dus nog steeds problemen...

Ik heb me laten vertellen dat je een asp pagina kan instellen dat deze maar door een bezoeker tegelijk uitgevoerd kan worden (en de db connecties daarin dus ook) en dat iis een soort wachtrij maakt: sommige mensen moeten ff w88 maar dat vind ik wel ok, die paar sec moet kunnen. Kan dat? Zo ja, hoe?

Zijn hier oplossingen voor of moet ik echt naar een (My)SQL db overstappen? (Liever niet :))

[ Voor 11% gewijzigd door Verwijderd op 05-03-2004 02:07 ]


  • Nemrah
  • Registratie: Februari 2003
  • Laatst online: 22-12-2025
Het is een optie om er omheen te scripten, maar lijkt me niet echt gebruikers vriendelijk... :X
Als je met grote regelmaat meervoudige gebruikers hebt, ben je naar mijn idee toch gebonden aan een iets meer solide oplossing. Je geeft het antwoord eigenlijk zelf al: mySQL oid.

Plant eens een boompje


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik denk persoonlijk dat het in de manier van programmeren zit, 20 gebruikers op een site kan Access makkelijk aan. Grofweg kun je zeggen dat Access bij meer dan 20 a 25 concurrent gebruikers problemen heeft, maar dat zijn dan concurrent gebruikers van de database, dat is heeeel wat anders dan bezoekers van je site.

Misschien kun je wat relevante code van probleempagina's laten zien?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Kermit.de.Kikker
  • Registratie: Februari 2002
  • Laatst online: 20:55
Access can 255 concurrent users aan.

Even googlen had ook geholpen :
http://support.codecharge.com/kb_article.asp?article_id=4

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Kermit.de.Kikker schreef op 05 maart 2004 @ 09:22:
Access can 255 concurrent users aan.

Even googlen had ook geholpen :
http://support.codecharge.com/kb_article.asp?article_id=4
En MS Access kan ook 2 GB groot worden, maar dat zijn allemaal theoretische waarden.. In praktijk zijn 5, maximaal 10 concurrent users de limiet.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

je krijgt de melding "file is already in use" ?
Open je de database in exclusive mode dan ? dat is toch nergens voor nodig ?
Post de code voor het openen van de db eens, dan kan ik ( of iemand anders ) eens kijken.

Verwijderd

Topicstarter
'Create recorset object
Set rsAddNewComments = Server.CreateObject("ADODB.Recordset")

'Initalise the SQL string with a query
strSQL = "SELECT pic.* FROM pic WHERE gal = '" & gal & "' AND pic = '" & pic & "'"

%>
<!--#include file="common.asp" -->
<%

rsAddNewComments.LockType = 3
rsAddNewComments.Open strSQL, adoCon

stemmenoud = rsAddNewComments("stemmen")
gemiddeldeoud = rsAddNewComments("cijfer")

cijferoud = gemiddeldeoud * stemmenoud
cijferoud = cijferoud + cijfer
stemmennieuw = stemmenoud + 1
gemiddeldenieuw = cijferoud / stemmennieuw
gemiddeldenieuw = round(gemiddeldenieuw, 1)

rsAddNewComments("stemmen") = stemmennieuw
rsAddNewComments("cijfer") = gemiddeldenieuw

rsAddNewComments.Update

rsAddNewComments.Close
adoCon.close
Set rsAddNewComments = Nothing
Set adoCon = Nothing
Set strCon = Nothing


Volgens mij zorgt locktype 3 ervoor dat de velden alleen TIJDENS het updaten gelocked zijn...?

In common.asp zit de database verbinding (AdoCon)

Ik ben niet goed in lange berekeningen in 1 regel, vandaar dat mooie rekensysteempje ertussen :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 gooit wat in de groep; misschien dat anderen kunnen aanvullen..
SQL:
1
Update TabelNaam Set Stemmen = Stemmen + 1, Gemiddelde = (Gemiddelde  * Stemmen + " & cijfer & ") / (Stemmen + 1) WHERE gal = " & gal & " AND pic = " & pic


Deze werkt volgens mij en krijg je ook geen problemen met locking e.d.

Verder vraag ik me af of je niet beter een andere db-structuur kan nemen.... :)

[ Voor 49% gewijzigd door gorgi_19 op 05-03-2004 14:18 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ja, wat gorgi_91 zegt. In plaats van een ADODB.RecordSet.Update kun je beter een update query gebruiken en die uitvoeren.

code:
1
2
3
strSQL = [wat gorgi zegt]
[open connection]
MyConnection.Execute ( strSQL )

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
ok dan!

ga ik doen, en testen of het probleem afneemt. zo niet? andere db?

[ Voor 134% gewijzigd door Verwijderd op 05-03-2004 14:37 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op 05 maart 2004 @ 14:31:
ok dan!

ga ik doen, en testen of het probleem afneemt. zo niet? andere db?
Andere db is echt niet nodig, ik heb wel drukkere sites gemaakt met access die helemaal geen problemen gaven.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 05 maart 2004 @ 14:31:
ok dan!

ga ik doen, en testen of het probleem afneemt. zo niet? andere db?
Nee, ergens anders kijken voor het probleem. Mijn methodiek gebruikt geen locking.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 05 maart 2004 @ 14:31:
ok dan!

ga ik doen, en testen of het probleem afneemt. zo niet? andere db?

wat bereft de structuur: er zijn gallery's met foto nummers. de om er een foto uit te halen moet je de gallery weten (kolom 1 gal) het nummer (kol 2 pic)
dan voor de berekening: het aantal stemmen (kol 3 stemmen) en het gemiddelde cijfer (kol 4 cijfer)

heb je een suggestie voor een andere structuur?
Per stem een nieuwe entry; kan je ook makkelijk maken dat je per IP-adress maar 1x kan stemmen. En het ophalen van het cijfer en het aantal stemmen krijg je dan iets van:

Select COUNT(*) as aantal, AVG(cijfer) as GEmiddelde etc.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
wat bereft de structuur: er zijn gallery's met foto nummers. de om er een foto uit te halen moet je de gallery weten (kolom 1 gal) het nummer (kol 2 pic)
dan voor de berekening: het aantal stemmen (kol 3 stemmen) en het gemiddelde cijfer (kol 4 cijfer)

heb je een suggestie voor een andere structuur?

Verwijderd

Topicstarter
wooow jullie zijn wel snel zeg!
tnx :)

Verwijderd

Je gebruikt locktype 3 (= adLockOptimistic ). Daar kan volgens mij het probleem niet zitten. Maar zoals ik al eerder vroeg, post de code voor het openen van de connection eens ( uit common.asp dus ). Ik vermoed namelijk dat daar een probleem zit

Verwijderd

Topicstarter
Verwijderd schreef op 05 maart 2004 @ 14:47:
Je gebruikt locktype 3 (= adLockOptimistic ). Daar kan volgens mij het probleem niet zitten. Maar zoals ik al eerder vroeg, post de code voor het openen van de connection eens ( uit common.asp dus ). Ik vermoed namelijk dat daar een probleem zit
'Create a connection object
Set adoCon = Server.CreateObject("ADODB.Connection")

strCon = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(".") & "\db.mdb;User Id=admin;Password=;"

adoCon.Open strCon

Verwijderd

Topicstarter
gorgi_19 schreef op 05 maart 2004 @ 14:37:
[...]

Per stem een nieuwe entry; kan je ook makkelijk maken dat je per IP-adress maar 1x kan stemmen. En het ophalen van het cijfer en het aantal stemmen krijg je dan iets van:

Select COUNT(*) as aantal, AVG(cijfer) as GEmiddelde etc.
Er zit een random script voor, dus een bezoeker mag meer dan 1 x stemmen. Maar elke stem een nieuw record... Er zijn zo'n 1000 foto's met elk ongeveer 30 stemmen... worden dat niet wat veel records? of maakt dat niet uit?

Verwijderd

volgens mij onderschat je access een beetje :)

dat kan makkelijk!!!

Verwijderd

Je zou eens kunnen proberen om ";Mode=Share Deny None" in je connectionstring op te nemen. Mocht dat niet werken, dan weet ik het ook niet meer....
Verwijderd schreef op 05 maart 2004 @ 14:50:
[...]

'Create a connection object
Set adoCon = Server.CreateObject("ADODB.Connection")

strCon = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath(".") & "\db.mdb;User Id=admin;Password=;"

adoCon.Open strCon

Verwijderd

Topicstarter
P_de_B schreef op 05 maart 2004 @ 14:16:
Ja, wat gorgi_91 zegt. In plaats van een ADODB.RecordSet.Update kun je beter een update query gebruiken en die uitvoeren.

code:
1
2
3
strSQL = [wat gorgi zegt]
[open connection]
MyConnection.Execute ( strSQL )
Ik heb dit er nu in staan met de 'alles in één' string van gorgi, werkt top!

Nu wil ik alleen het nieuwe gemiddelde en het totaal aantal stemmen op de volgende pagina weergeven. Moet ik die dan weer uit de db halen of is het mogelijk ze hier al in een var te stoppen, dan stuur ik ze gewoon mee naar de volgende pagina..? (scheelt weer een keer openen van mn db :))

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Ik gok dat 1 simpele selectquery niet zo heel erg eng is.....

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 05 maart 2004 @ 15:24:
Ik gok dat 1 simpele selectquery niet zo heel erg eng is.....
ok... _/-\o_ ik voel me als beginner wel erg dom hier... :)
Pagina: 1