Avatar billede sbm Nybegynder
15. februar 2001 - 22:55 Der er 6 kommentarer og
1 løsning

Samtidig databasetilgang.

Når jeg tilgår en database fra en asp-side, kan det ikke helt forhindres at der fra tid til anden er flere brugere der tilgår siden præcis samtidig.
Så får den ene bruger en fejl databasen allerede er i brug.
Er der en elegant måde til at omgå dette problem?
Avatar billede sbm Nybegynder
15. februar 2001 - 22:57 #1
...jeg skal måske selv lige tilføje, at jeg naturligvis ønsker at BEGGE brugere får siden vist normalt, selv om de tilgår databasen præcis samtidig.
Avatar billede erikjacobsen Ekspert
15. februar 2001 - 22:57 #2
Øhm, hvilken database bruger du? Det er ikke normalt noget problem med
Access, MSSql, MySql, osv.
Avatar billede sone Nybegynder
15. februar 2001 - 22:57 #3
Nå... det har jeg aldrig oplevet.
Hvordan ser din kode ud der hvor du åbner databasen ?
Avatar billede keysersoze Ekspert
15. februar 2001 - 23:07 #4
PWS kan til tider give denne fejl - men det er forkert brug af databasen eller PWS. så problemet ligger formentlig dér da det ellers ikke burde kunne give problemer (medmindre der er RIGTIG mange brugere!)
Avatar billede kasseper Nybegynder
16. februar 2001 - 08:40 #5
Det gyldne ord må her være : SEMAFORER.
Semaforer buges tilat sikre udelelig adgang, som det så smukt hedder.
Et typisk anvendelsesområde for semaforer er når dit styresystem, skal foretage et kernekald, altså et klad der direkte sætter din ene processor til at udføre et stykke arbejde.
Normalt vil en hver database, være sikret med semaforer, men åbentbart ikke ( bruger du Access ?? )...
Du kan implementere dine semafore på kode niveau, men ASP\'s egen Application.Lock benytter ligeledes semaforer så denne kan anbefales...
Du kan læse lidt nærmere her :http://www.iu.hio.no/~haugerud/os/Forelesning/os/node8.html
Det er om de spisende filosoffers problem ( de er 5 der gerne vil spise af 4 pladser på samme tid !!!)
Avatar billede sbm Nybegynder
16. februar 2001 - 08:53 #6
Jeg uddyber lige...

Jeg bruger Access og følgende er et eksempel på hvordan jeg tilgår databasen:

<%
    set conn = server.createobject(\"ADODB.connection\")
    strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"../dbfiler/deltagere.mdb\")
    conn.open strDSN
   
    SQL = \"SELECT * FROM deltagere\"
    set RS = conn.execute( SQL )
    If RS.eof then
      Response.write\"Der er ikke registeret nogen deltagere.\"
    else
          ...arbejd igennem Resultset...
        end if
Avatar billede kasseper Nybegynder
16. februar 2001 - 08:59 #7
Så kan du bruger :

<%
    set conn = server.createobject(\"ADODB.connection\")
    strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"../dbfiler/deltagere.mdb\")
    conn.open strDSN
    SQL = \"SELECT * FROM deltagere\"
    Application.Lock
    set RS = conn.execute( SQL )
    Application.Unlock
    If RS.eof then
      Response.write\"Der er ikke registeret nogen deltagere.\"
    else
          ...arbejd igennem Resultset...
        end if

Da det er din kommunikation over mod databasen, der skal ske udeleligt.
Husk på at der kan aldrig udføres 2 samtidige ting, men for at det skal opfattes sådan, så må man sørge for at de sker lige efter hinanden....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester