Avatar billede ebe Praktikant
06. november 2002 - 12:40 Der er 9 kommentarer og
1 løsning

Er her flerebrugerproblemer?

vi har en database med ordrer og tilhørende ordrelinier. Ordrenummeret bliver fremmednøgle i ordrelinier.

Når vi gemmer en ordre sker der følgende:
1. gem stamdata i ordre (opretter ny ordre med ny ordrenummer.
2. Hent højeste ordenummer (vi går ud fra at det kommer fra den ordre vi lige har oprettet)
3. Gem ordrelinier fra session med ordrenummeret som fremmednøgle.

Kan der opstå følgende situation når flere brugere prøver på at gemme en ordre samtidigt?

Bruger1                        Bruger2
Skriv ordre (n)                skriv ordre (n+1)
Hent højeste nr =(n+1)???      Hent højeste nr =(n+1)???
Gem alle linier med (n+1)      Gem alle linier med (n+1)

Resultatet ville så være at bruger1´s ordrelinier bliver gemt sammen med bruger 2´s ordre!!!

Hvordan undgår vi det?
Avatar billede ebe Praktikant
06. november 2002 - 12:41 #1
ps.: det her en en web-shop
Avatar billede sjap Praktikant
06. november 2002 - 12:49 #2
Ja det er flerbrugerproblemer?

Prøv at oprette en ny tabel der kun indeholder ordrenummer. Tabellen skal så bruges til at angive hvilket nummer der bruges nu, og dette nummer hentes så over til den aktuelle bruger. Den næste bruger vil så få et højere nummer.
Avatar billede sjap Praktikant
06. november 2002 - 12:58 #3
Problemet skyldes at tabellen med den nye ordre ikke opdateres før brugeren går til en ny post eller lukker tabellen. Derfor vil en bruger, der går ind i tabellen efter den første bruger, men inden den første bruger har gemt sin ordre, få samme ordrenummer.

Med en separat ordrenummertabel, der opdateres umiddelbart efter nummeret er udtaget undgås dette problem. Du kan selvfølgelig også lave en programmæssig opdatering af posten i tabellen INDEN brugeren har gemt ordren, men så risikerer du at der ligger en række tomme ordre (fra brugere der fortryder undervejs). Selvfølgelig vil numrene blive udtaget i odrenummertabellen, men der fylder de jo ikke så meget.
Avatar billede ebe Praktikant
06. november 2002 - 13:02 #4
tak for hurtig og fornuftig svar! :-)
Avatar billede sjap Praktikant
06. november 2002 - 13:10 #5
Selv tak.
Avatar billede terry Ekspert
06. november 2002 - 13:12 #6
Is there any guaranty that only ONE user can read the "ordrenummertabel" AND update it BEFORE another user reads the same number?
Avatar billede ebe Praktikant
06. november 2002 - 13:18 #7
terry>> good question. but how else would you solve it? how is it solved in existing web-shops?
Avatar billede ebe Praktikant
06. november 2002 - 13:32 #8
terry>> thinking about it, in the "ordrenummertabel" the ordrenummer would be primary key. The database would allow another user to read the number, but not allow any other user to write an already existing number back.
Avatar billede terry Ekspert
06. november 2002 - 13:38 #9
who says its a primary key in "ordrenummertabel"? If I understood superjaps answer correctly he is only using ONE record which gets updated directlt ater it is read. NOTE, superjaps answer WILL WORK but only if you make sure that the record is locked when it is read and UNTIL it is re-written. Not sure which methods you use when reading records in ASP but the problem is the same no matter.
Avatar billede ebe Praktikant
06. november 2002 - 13:45 #10
i think i´ll let the table grow and use the primary key. That will always ensure there is a new number.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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