Avatar billede stkol Nybegynder
22. maj 2003 - 13:01 Der er 35 kommentarer og
1 løsning

Returnering af ID efter insert

Hej

Jeg vil meget gerne have nedenstående kode til at returnere ID efter at jeg har lavet et INSERT INTO, men har desværer ikke haft heldet med mig med de eksempler jeg har fundet

Koden er :

<%

    Dim strSql
    Dim dbInsert_connection

    '#Insert the Label
    set dbInsert_connection = Server.CreateObject("ADODB.Connection")
    dbInsert_connection.Open Application("ConnectString")
    set rsSave = Server.CreateObject("ADODB.Recordset")

    if request.querystring("docid") = "" then
   
        strSql = "INSERT INTO documents headline='" & request.form("headline") & "',linkname='" & request.form("subcategory") & "',kategori='" & request.form("categoria") & "',news='" & request.form("newsStatus") & "',sublinkname='" & request.form("sublink") & "',searchword='" & request.form("searchwords") & "',searchdescription='" & request.form("searchdescription")
    else
        strSql = "Update documents set headline='" & request.form("headline") & "',linkname='" & request.form("subcategory") & "',kategori='" & request.form("categoria") & "',news='" & request.form("newsStatus") & "',sublinkname='" & request.form("sublink") & "',searchword='" & request.form("searchwords") & "',searchdescription='" & request.form("searchdescription") & "' WHERE recordid=1;"
    end if
   
    dbInsert_connection.execute(strSql)

    dbInsert_connection.Close
    set dbInsert_connection = Nothing

    Session(request.querystring("boxno")) = ""

    if request.querystring("docid") = "" then
        response.redirect "editor.asp?docid=DOCIDFROMDB"
    else
        response.redirect "editor.asp?docid=" & request.querystring("docid")
    end if
%>

Er der en der kan løse mit problem, så ville jeg blive meget glad *S

/Stig :-)
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:06 #1
SELECT @@IDENTITY AS NewID

//akj
Avatar billede stkol Nybegynder
22. maj 2003 - 13:10 #2
Hej Akj ! Kan du give mig et eksempel ud fra ovenstående koden??
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:10 #3
Øjeblik
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:13 #4
' ændsæt data
dbInsert_connection.execute(strSql)

' find nyt id
set rsid= dbInsert_connection.execute("SELECT @@IDENTITY AS NewID")
nytid = rsid("NewId")

//akj
Avatar billede refi Nybegynder
22. maj 2003 - 13:24 #5
Hmmm dk_akj, han bliver nødt til at udføre ovenstående i samme SQL sætning, som hans insert... ellers kan han risikere at få et andet id... da den altid retunere det sidst brugte id...

Faktisk troede jeg ikke at dette kunne lades sig gøre, medmindre at man lavede det i en stored procedure på SQL serveren... sådan har jeg ialtfald altid gjort...

/René
Avatar billede erikjacobsen Ekspert
22. maj 2003 - 13:27 #6
Det er tilstrækkeligt at bruge samme connection. Så
virker det med garanti.

Hvis det virker i den driver han bruger ... altså...
Avatar billede eagleeye Praktikant
22. maj 2003 - 13:29 #7
refi>> Det ligger i connectionen så hvis man ikke lukker connection mellem de to SQL kald skulle det gerne virke.
Avatar billede eagleeye Praktikant
22. maj 2003 - 13:29 #8
hmm, jeg skal vist bruge F5 lidt mere.
Avatar billede refi Nybegynder
22. maj 2003 - 13:31 #9
Hehe... okay eagleeye og erikjacobsen :-)

Så lærte jeg da også noget i dag ;-)

/René
Avatar billede stkol Nybegynder
22. maj 2003 - 13:32 #10
jeg har ikke kunnet teste det men jeg går udfra at det er rigtigt, men jeg får denne fejl

Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near 'headline'.

/admin/frame/updateSiteinfo.asp, line 22


i denne kode :


        strSql = "INSERT INTO documents headline='" & request.form("headline") & "',linkname='" & request.form("subcategory") & "',kategori='" & request.form("categoria") & "',news='" & request.form("newsStatus") & "',sublinkname='" & request.form("sublink") & "',searchword='" & request.form("searchwords") & "',searchdescription='" & request.form("searchdescription")
        set rsid= dbInsert_connection.execute("SELECT @@IDENTITY AS NewID")
        nytid = rsid("NewId")

Hvad kan det være??
Avatar billede erikjacobsen Ekspert
22. maj 2003 - 13:34 #11
I nogle SQL-er er det lovligt at skrive

INSERT INTO documents set headlin=....osv.
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:34 #12
Det er fordi du blander update og insert syntaxen sammen.

Du skal bruge en syntax som denne:
strSql = "INSERT INTO documents (felt1,felt2,osv....) values(værdi1, værdi2,værdi3, osv....)

//akj
Avatar billede stkol Nybegynder
22. maj 2003 - 13:35 #13
Nå, okay!! jeg laver lige om i koden!!
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:36 #14
Husk at du stadig skal have plinger / gnyffer om text'er.

//akj
Avatar billede erikjacobsen Ekspert
22. maj 2003 - 13:36 #15
Ja, det er sjovt vi deltager i spørgsmålet uden at vide hvilken
database han anvender.... ;)
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:37 #16
Jeg gætter på access :-)

//akj
Avatar billede refi Nybegynder
22. maj 2003 - 13:38 #17
Tjaaa... det er vel ingen Access... ellers ville @@IDENTITY jo ikke kunne bruges ;-)

/René
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:38 #18
Jo, den virker også på sqlserver.

//akj
Avatar billede erikjacobsen Ekspert
22. maj 2003 - 13:40 #19
Access med JET-driver kan bruge @@IDENTITY. Men det kunne være mysql,
oracle, eller ....
Avatar billede refi Nybegynder
22. maj 2003 - 13:40 #20
I know dk_akj... det er jo der jeg selv bruger den ;-)
Du læste vel ovenstående forkert...

/René
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:43 #21
refi >> jeps, jeg læste forkert :-) men som erik siger virker @@identity også på access med oracle + andre ved jeg ikke.

//akj
Avatar billede refi Nybegynder
22. maj 2003 - 13:48 #22
Anyway... stkol, hvis du vil have din ASP til at performe max... så skal du lave hele dit SQL insert og update i en stored procedure... så er det også nemt at lave et output parameter med @@IDENTITY værdien..., men men... den går jo ikke hvis du bruger Access... og jeg ved ikke med MySQL om man kan lave sådan nogle der... har ikke noget erfaring med den DB... måske du ved det... erikjacobsen?
Avatar billede stkol Nybegynder
22. maj 2003 - 13:50 #23
Det er SQL 2000!!! (Hvad ellers ;-) )*GGG
Avatar billede refi Nybegynder
22. maj 2003 - 13:52 #24
Hvad venter du så på stkol... lav dig en stored procedure med hele baduljen ;-)
Avatar billede stkol Nybegynder
22. maj 2003 - 13:53 #25
Nu har jeg lavet min kode om så den ser sådan her ud :

<%

    Dim strSql
    Dim dbInsert_connection

    '#Insert the Label
    set dbInsert_connection = Server.CreateObject("ADODB.Connection")
    dbInsert_connection.Open Application("ConnectString")
    set rsSave = Server.CreateObject("ADODB.Recordset")

    if request.querystring("docid") = "" then
   
        strSql = "INSERT INTO documents(headline,linkname,kategori,news,sublinkname,searchword,searchdescription) values('"& request.form("headline") & "','" & request.form("subcategory") & "','" & request.form("categoria") & "','" & request.form("newsStatus") & "','" & request.form("sublink") & "','" & request.form("searchwords") & "','" & request.form("searchdescription") & "')"
        set rsid= dbInsert_connection.execute("SELECT @@IDENTITY AS NewID")
        nytid = rsid("NewId")
    else
        strSql = "Update documents set headline='" & request.form("headline") & "',linkname='" & request.form("subcategory") & "',kategori='" & request.form("categoria") & "',news='" & request.form("newsStatus") & "',sublinkname='" & request.form("sublink") & "',searchword='" & request.form("searchwords") & "',searchdescription='" & request.form("searchdescription") & "' WHERE recordid=1;"
    end if
   
    dbInsert_connection.execute(strSql)

    dbInsert_connection.Close
    set dbInsert_connection = Nothing

    Session(request.querystring("boxno")) = ""

    if request.querystring("docid") = "" then
        response.redirect "editor.asp?docid=" & rsid("NewId")
    else
        response.redirect "editor.asp?docid=" & request.querystring("docid")
    end if
   
%>

M E N den kommer med denne fejl (Den vil heller ikke skrive den nye ID ud på skærmen)

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/admin/frame/updateSiteinfo.asp, line 28
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:54 #26
og linie 28 er ???
Avatar billede erikjacobsen Ekspert
22. maj 2003 - 13:54 #27
du skal lige udføre din strsql
Avatar billede stkol Nybegynder
22. maj 2003 - 13:54 #28
refi > Ja det ville bare være dejligt, jeg har bare aldrig lavet en stored procedure, så jeg ved ikke hvordan man gør!! :-}
Avatar billede stkol Nybegynder
22. maj 2003 - 13:55 #29
Linie 28 er  :

response.redirect "editor.asp?docid=" & rsid("NewId")
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:56 #30
Du mangler denne linie
set rsid= dbInsert_connection.execute("SELECT @@IDENTITY AS NewID")

//akj
Avatar billede erikjacobsen Ekspert
22. maj 2003 - 13:56 #31
response.redirect "editor.asp?docid=" & nytid

men du kan ikke aflæse @@identity før du har udført din insert
Avatar billede dk_akj Nybegynder
22. maj 2003 - 13:58 #32
Nåh @@identity ligger deroppe...
set rsid= dbInsert_connection.execute("SELECT @@IDENTITY AS NewID")
skal stå lige efter
dbInsert_connection.execute(strSql)

//akj
Avatar billede stkol Nybegynder
22. maj 2003 - 13:59 #33
Yes!!! Så virker det hele sgu *SSSSS Tusind tak for hjælpen !!
Avatar billede dk_akj Nybegynder
22. maj 2003 - 14:00 #34
Selvtak.

//akj
Avatar billede refi Nybegynder
22. maj 2003 - 14:06 #35
How and what to do... stkol:

CREATE    PROCEDURE InsertDims

  @Headline varchar(50),
  @Linkname varchar(50),
  @Kategori varchar(50),
  @Newsstatus varchar(5),
  @Sublinkname varchar(50),
  @Searchword varchar(50),
  @searchdescription varchar(50),
  @NewID int output

AS

  DECLARE @ReperationID int
  DECLARE @ReperatoerID int
  DECLARE @Forsendelse tinyint
  DECLARE @PersonaleID int
  DECLARE @AnkomstDato datetime
  DECLARE @IndtastStatus tinyint
  DECLARE @PostStatus tinyint
  DECLARE @ReperationStatus tinyint
  DECLARE @Status tinyint

  INSERT INTO Documents (Headline, Linkname, Kategori, News, Sublinkname, Searchword, Searchdescription)
  VALUES (@Headline, @Linkname, @Kategori, @Newsstatus, @Sublinkname, @Searchword, @searchdescription)
  SELECT @NewID = @@IDENTITY

GO

Kopier koden over i din Query Analyzer og udfør den i den rette database på din SQL server... så har den en stored procedure til at inserte dine poster. Husk at varchar variablerne skal defineres således at der er plads nok til den tekst der måtte være i dem... du siger bare til hvis jeg skal lave noget ASP kode til at snakke med proceduren... hvis du da vælger at prøve løsningen ;-)

Hygge...

/René
Avatar billede refi Nybegynder
22. maj 2003 - 14:08 #36
Ups... slet lige alle DECLARE variablerne... dem behøves du vist ikke... hehe... ;-)
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