Avatar billede centauri Nybegynder
23. november 2004 - 14:17 Der 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.
Avatar billede htm Nybegynder
23. november 2004 - 14:25 #1
i MSSQL kan du lave SELECT @@IDENTITY as nytid FROM tabel
Avatar billede centauri Nybegynder
23. november 2004 - 14:29 #2
hvordan virker den lige ?
Avatar billede netjay Nybegynder
23. november 2004 - 14:33 #3
'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")
Avatar billede netjay Nybegynder
23. november 2004 - 14:38 #4
...........

'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

Response.Write("<b>Oprettet i:</b> "&OpretID&"<br>")
Avatar billede centauri Nybegynder
23. november 2004 - 14:39 #5
-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.
Avatar billede netjay Nybegynder
23. november 2004 - 14:48 #6
hmm :)  - lytter med
Avatar billede fennec Nybegynder
23. november 2004 - 15:13 #7
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.
Avatar billede fennec Nybegynder
23. november 2004 - 15:15 #8
Med MS-SQL kan du samle det til et kald:

set rs = conn.execute("set noCount on;insert into EnTabel(felt1,felt2) values('sdvds','gfd');select @@IDENTITY as ThisID;")
OprettetID = rs("ThisID")
Avatar billede centauri Nybegynder
23. november 2004 - 15:27 #9
Jamen siger mange tak fennec, fik det til at virke med f.eks

INSERT INTO Lokale (Kunde,Nummer) VALUES (12,125)SELECT @@IDENTITY AS 'ID'
Avatar billede fennec Nybegynder
23. november 2004 - 16:20 #10
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).
Avatar billede centauri Nybegynder
24. november 2004 - 08:32 #11
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?
Avatar billede fennec Nybegynder
24. november 2004 - 08:45 #12
";" 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.
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