22. juni 2004 - 13:52Der er
19 kommentarer og 1 løsning
Unik id
Heysa
Jeg er ved at lave en side hvor jeg smider nogle informationer ind i en database, men lige før de bliver smidt ind i databasen skal der oprettes et unikt id som ikke findes i databasen i forvejen. Gerne på 4-8 tegn.
Nej for så skal jeg bagefter udtrække data fra databasen udfra de felter der blev udfyldt. Hvis jeg kan genere en unik kode før, kan jeg kalde dataerne med det samme.
Du kan jo hente det sidste indsatte autonummer ud fra databasen, så du kan hente alle data ud igen. Ofte gøres det med "SELECT @@IDENTITY AS THISID" i forskellige former afhængig af database type.
Problemet er at du ikke kan generere en kode der er unik, uden at skal til at tjekke det med databasen igen og igen. Så det vil være bedst at bruge autonummer funktionen. Hvilken database kører du med???
En transaction er en slags beskyttelse mod netop det du beskriver, samtidige opdateringer. Hvis en proces kører indenfor en transaction, så er det kun den ene bruger der kan ændre data imens.
Det betyder naturligvis at du skal sørge for at transactions sluttes, ellers låses dele af databasen.
Jeg tror du skal læse om det selv, jeg er ikke helt sikker på hvordan det foregår omkr. access.
Du behøver ikke transaktioner til lige netop dette (men i andre tilfælde!) Når blot du ikke lukker din connection mellem "INSERT ..." og "SELECT @@IDENTITY AS THISID" får du det rigtige svar, også selv om der er flere brugere.
Det gælder dig ikke nødvendigvis hvis du bruger MSSQL med triggers der laver nye INSERTs - men det gør du jo ikke ;)
Jeg har dog altid troet, at det var muligt for en bruger at indsætte, i tiden mellem de to linjer bliver eksiveret af en anden bruger (meget lille mulighed). Men det ved erikjacobsen og ldanielsen sikkert mere om....
erikjacobsen > Tak for kommentaren, det var lige det jeg ikke turde påstå. Jeg mente nok at der også for Access er en automatisk transaction for en connections levetid. Det er måske standard for ado uanset driver?
Endnu en grund til at huske at lukke sin connection, ellers commit'er transaction'en vel først når connection'en får timeout
Nej, det er ikke derfor man skal lukke sin forbindelse. Hver sql-sætning udføres som den står, når man ikke blander transaktioner ind i det.
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.