23. november 2004 - 14:17Der er
11 kommentarer og 1 løsning
Udlæs den netop opretede Records ID?
Findes der er funktion eller SQL statement eller noget der giver mig ID nummeret på den netop oprettede record.
Det skal være sådan at idet jeg opretter en record så skal jeg nogle linjer efter i program koden kunne udlæse hvilket Record ID den oprettede record fik. Og det selfølgelig i et ASP script.
Ved godt man kan lave noget med MAX(ID) , men der er men vel ikke 100% sikker på at man får ID'et på netop den record man lige oprettede.
Vil bare undgå det kan ske en fejl hvis 2 brugere mere eller mindre smatidig opretter en record og der så kommer til at blive refereret til den forkerte. Ved godt chancerne måske ikke er store, men de er der.
Og kan ikke lige bruge en søgning til at udlæse Record ID da man nemt kan resikere at det indeholder nøjagtig noget der allerede ligger i databasen.
Håber der er nogle der har en mulig løsning på dette problem.
'OPRET I DB Main.Execute("INSERT INTO db (id,dato,bruger) VALUES(1,'"&now&"',session("user"))")
'FIND NETOP OPRETTEDE ELEMENT set rs=Main.Execute("SELECT TOP 1 * FROM db WHERE dato='"&now&"' ORDER BY id DESC") OpretID=rs("id") rs.close set rs=nothing
-netjay Den kan jeg ikke lige bruge for som sagt kan jeg have 2 records der er fuldstændig ens. Og ønsker ikke lige at sætte noget med tid og dato ind.
For menes engang at være faldet over en løsning man kan bare ikke huske mere hvordan den var.
Du skal bruge "SELECT @@IDENTITY" metoden (som htm nævnte):
conn.execute("insert into EnTabel(felt1,felt2) values('sdvds','gfd')") set rs = conn.execute("select @@IDENTITY as ThisID") OprettetID = rs("ThisID")
Det er ikke nødvendigt at have tabelnavnet med. Den ved selv hvilken record det handler om, så længe du ikke lukker connectionen til databasen eller oprette en ny række, med samme connection, hvorved den henter ID'et fra den række.
Det er vel htm, der skal have point, det er jo hans løsning :o)
Har du det til at køre i ET kald, ala det jeg skrev i forige post (15:15:45), for så skal du huske ; imellem funktionerne og have noCount sat også (bare forat nævne det).
Ja jeg har alt til at køre i et kald men det virker da nu også fint nok uden jeg har ";" med og noCount. Hvad skulle det lige bevirke.
Ja men hvis nu både du og HTM smider et svar så deler jeg pointene. For HTM kom da ved ideen men kunne ikke lige se hvordan den skulle bruges uden det eksempel du kom med. Det er vel fair nok?
";" bruges til at afslutte "funktionskald", lige som Java og mange andre sprog kræver en afslutning på hver "sætning". Det er derfor en god ide, når der er flere kald i samme sætning, for at sikre at databasen opfatter instruktionerne rigtigt.
"set noCount on;" fortæller databasen, at den ikke skal returnere værdien for hvor mange record's der bliver påvirket (I dette tilfælde er det altid 1). Den skal på, for at det tal ikke bliver forvekslet med ID'et.
Og som en sidste ting, skal du være opmærksom på, at det ikke er alle databaser, der understøtter flere "funktionskald" i samme sætning. Du kan f.eks ikke gøre dette i Access og MySQL.
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.