Avatar billede beorndesign Nybegynder
09. februar 2004 - 14:31 Der er 12 kommentarer og
1 løsning

Få id fra netop oprettet record

Jeg er ved at lave en upload komponent, hvor jeg har brug for at trække ID'et ud fra den record jeg lige har oprettet. ID'et skal bruges til at navngive de uploadede filer.
Jeg bruger MSSQL database og kan ikke lige ummidelbart få det til at virke? Jeg har forsøgt med:

Recordset1.AddNew
Recordset1("datenow") = now
Recordset1.update
strID = Recordset1("id")
Recordset1.close
set Recordset1 = nothing
Response.Write(strID)

Men strID er tom! ER der nogen der har et forslag?

/Beorn
Avatar billede snowball Novice
09. februar 2004 - 14:47 #1
Prøv og lav en "SELECT @@IDENTITY" lige efter du har indsat en ny værdi i databasen. Så burde du få det ID som den post du lige har indsat, har.
Avatar billede muddi Praktikant
09. februar 2004 - 14:54 #2
Et eksempel:

INSERT INTO Kunder
(Kundenr) VALUES (30001)

SELECT * FROM Kunder
WHERE ID = @@IDENTITY

DELETE FROM Kunder
WHERE ID = @@IDENTITY

SELECT * FROM Kunder
Avatar billede beorndesign Nybegynder
09. februar 2004 - 15:09 #3
Jeg har sat følgende ind, efter min 1. update, men recordset'et er tomt:

Set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = autofin_STRING
Recordset1.Source = "SELECT * FROM autofin.autofin_items WHERE id = @@IDENTITY"
Recordset1.LockType = 2
Recordset1.Open()

strID = Recordset1("id")
Recordset1("photo") = strID & ".jpg"
Recordset1.update
Recordset1.close
set Recordset1 = nothing
Response.Write(strID)

"Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record."
Avatar billede snowball Novice
09. februar 2004 - 15:16 #4
Så vidt jeg husker, så skal det recordset som du selecter @@INDENTITY'en ud fra, være det samme som du laver din INSERT med. Det vil altså ikke virke hvis du laver din INSERT, lukker forbindelsen til databasen, og derefter opretter en ny forbindelse for at lave din SELECT @@IDENTITY.
Avatar billede muddi Praktikant
09. februar 2004 - 15:22 #5
snowball >> Du husker rigtigt... Det skal være i samme connection! Det er nemlig årsagen til at det ikke kan lade sig gøre i Access, da Access ikke kan køre flere forespørgsler efter hinanden i et SQL job.
Avatar billede beorndesign Nybegynder
09. februar 2004 - 15:26 #6
Hvordan vil du så lave en SELECT?
Avatar billede pelkjaer Nybegynder
09. februar 2004 - 15:27 #7
Dette virker med access:

Function GetOrdreNo ()
    'Nulstiller kald
    Application("Locked") = False
   
    'Laver løkke indtil DB'en ikke længere er i brug
    While Application("Locked") = True
    Wend
   
    Application.Lock
    Application("Locked") = True
    Application.Unlock
        strSQL = "SELECT * FROM tabelnavn"
        Set objRs = objConn.Execute(strSQL)
    strOrdreNo = objRs("OrdreNo")
   
    Application.Lock
    Application("Locked") = False
    Application.Unlock
    GetOrdreNo = strOrdreNo
End Function
Avatar billede muddi Praktikant
09. februar 2004 - 15:29 #8
pelkjaer >> Nu har spørgsmålet egentlig ikke noget med Access at gøre. I øvrigt er dit eksempel, så vidt jeg kan se lavet i VBA og ikke SQL.
Avatar billede muddi Praktikant
09. februar 2004 - 15:30 #9
:o)
Avatar billede pelkjaer Nybegynder
09. februar 2004 - 15:32 #10
Nææ jeg så bare lidt oppe at der var en der sagde man ikke kunne i access - derfor :)
Avatar billede muddi Praktikant
09. februar 2004 - 15:35 #11
Jamen det kan man så med VBA. Bare ikke direkte i SQL :)
Avatar billede pelkjaer Nybegynder
09. februar 2004 - 15:41 #12
i know :)
Avatar billede beorndesign Nybegynder
09. februar 2004 - 16:28 #13
Så fandt jeg løsningen, til hvordan det skulle skrives/gøres:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open autofin_STRING

Conn.execute(strSQL)

strSQL = "SELECT @@identity AS intID FROM autofin.autofin_items"
Set rs = Conn.Execute(strSQL)

Response.Write rs("intID")
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