nej nej! også alt for usikkert! Hvis to bruger submitter samme INSERT INTO på samme tidspunkt, er muligheden for at den ene bruger får den andens indeks alt for stor.
Mit spørgsmål lyder på om der ikke findes en metode hvorpå man finder indeks i det øjeblik den bliver oprettet????
Ikke med mySQL, da det ikke er til at få den til at æde en transktion, så skal du ud i og lave en Application.Lock og Application.Unlock uden om koden.
Sandsynigheden for at 2 rammer det samme ID er dog MEGET lille, jeg har brugt ovenstående med succes og aldrig er der en der har ramt forkert.
Men Max() metoden er dog usikker, da mySQL godt kan finde på at sætte ind på tomme pladser hvor man har slettet en record.
Jeg har brugt det hvor der har været 100 samtidige brugere på sitet, men det kan også være jeg bare har været bragende heldig.
Men hvis du vil have det helt rigtigt, så du er 100% sikker på at det ikke går galt, bliver du nok nød til at vælge en anden DBMS som understøtter transaktioner, f.eks. MS SQL eller Oracle, selvom det er min mening at de er sløve i forhold til mySQL´en.
Jeg har endnu ikke haft tid til at kigge på den nye mySQL, men jeg tror ikke de er nået så langt endnu. Ja views har vi jo manglet i lang tid, men det kommer vel engang, men man kan jo heller ik forvente alverden af en gratis DBMS.
Hvis du gerne vil undgå at låse så er en mulig løsning at oprette et talfelt i tabellen med plads til Session.SessionID så er nedenstående linie pludselig 100% sikker. !
"SELECT MAX(indeks) FROM tabel where SessionID=" & Session.SessionID
Jeg har haft lignende flerbruger problemer inde på livet i 10 år og ville ikke tøve med at anvende denne løsning hvis transaktionstyring ikke er tilgængelig.
Når jeg har ovenstående problem i access, så har jeg sommetider gjort det at jeg har dannet en stræng på 50 tilfældige karektere, denne gemme jeg så, og smider den ned i databasen, i et felt der er lavet til dette, herefter er det så bare at søge i databasen på denne gemte streng, og så finde det idnummer denne har, og så er mit postulat at det er meget usandsynlig at en anden skulle få dannet samme streng inde for de "par sek." det tager at oprette strengen, gemme denne i db, hente id, og så evt slette strengen igen i tabelen
Jeg er godt klar over at dette ikke er en særlig køn måde at lave sådan noget på, men det virker hvergang !
sth >> Hvis man virkelig skal ud i den løsning så er coltau´s løsning 100 gange bedre, Sessionidet er der allerede, unikt for hver bruger på websitet, så hvorfor ikke bruge det ?
Det kan jeg da kun være enig i, men den kendte jeg ikke, og skrev derfor hvad jeg så havde brugt.
Så er det jo godt at man kan komme på eksperten og lære noget nyt :)
Synes godt om
Ny brugerNybegynder
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.