Toon posts:

[ASP]weergeven @@identity

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende code:

code:
1
2
     sql_insert1 = "select @@identity as maxadv_ID from links "
   set gegevens = objconn.Execute(sql_insert1)


Deze gebruik ik na een succesvolle insert in een tabel. Alleen hoe print ik de result van die query in een asp pagina?

response.write gegevens("maxadv_ID")
geeft geen resultaat

Ik weet dat er een waarde is, want ik kan deze waarde wel inserten in een tweede table. Ik wil em als value in een form kunnen plakken, en dat gaat dus niet. Resultaat is gewoon niets.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Gewoon uitlezen zoals je normaliter een recordset uitleest?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
en wat gebeurt er als er toevallig 2 gebruikers deze asp pagina opvragen? Welke @@identity krijg je dan?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
@@identity geeft het laatst geinserte ID terug van een auto-nummer veld binnen deze sessie.

Als jij een record insert in een tabel met autonummering, krijg je het ID terug van het record dat jij geinsert hebt; als iemand anders die pagina opvraagt, en hij heeft gedurende zijn databank-sessie nog niets geinsert, dan krijgt hij NULL terug.

https://fgheysels.github.io/


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Je kan het ook zo doen:

ASP:
1
2
3
4
5
'Insert gedaan
sql_insert1 = "select @@identity"
Set rs = Conn.Execute(SQL)
ID = rs(0)
Set rs = Nothing

[ Voor 8% gewijzigd door Jaspertje op 03-01-2004 12:17 ]


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
whoami schreef op 03 januari 2004 @ 10:54:
@@identity geeft het laatst geinserte ID terug van een auto-nummer veld binnen deze sessie.

Als jij een record insert in een tabel met autonummering, krijg je het ID terug van het record dat jij geinsert hebt; als iemand anders die pagina opvraagt, en hij heeft gedurende zijn databank-sessie nog niets geinsert, dan krijgt hij NULL terug.
Ligt dat niet aan hoe de db verbinding geregeld is? Als er sprake is van connection pooling (wat standaard onder ODBC het geval is) hoe wordt er dan onderscheid gemaakt tussen website bezoeker 1 en bezoeker 2? En wanneer deze nagenoeg tegelijk een insert doen, is er dan geen kans dat bezoeker 1 de @@identity van bezoeker 2 krijgt?

Ik bedoel hiermee, is het niet slimmer om de insert actie en het opvragen van de @@identity in 1 stored proc te doen? Om er zeker van te zijn dat de juiste identity getoond wordt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
zneek schreef op 03 januari 2004 @ 14:48:
[...]


Ligt dat niet aan hoe de db verbinding geregeld is? Als er sprake is van connection pooling (wat standaard onder ODBC het geval is) hoe wordt er dan onderscheid gemaakt tussen website bezoeker 1 en bezoeker 2? En wanneer deze nagenoeg tegelijk een insert doen, is er dan geen kans dat bezoeker 1 de @@identity van bezoeker 2 krijgt?
Dat zou geen probleem mogen zijn. Als je je connectie sluit, wordt ze naar een pool gebracht. Als je dan een connectie heropend, en je doet dan select @@identity, zonder voorafgaande insert, dan krijg je -denk ik- ook NULL terug.
Ik bedoel hiermee, is het niet slimmer om de insert actie en het opvragen van de @@identity in 1 stored proc te doen? Om er zeker van te zijn dat de juiste identity getoond wordt?
Dat zou zowiezo beter zijn idd, maar in Access kan je geen SP's gebruiken.

https://fgheysels.github.io/


Verwijderd

Topicstarter
hmm nu krijg ik ook geen value meer als ik em door insert naar een andere table.

Op een ander script op een andere site, maar wel op dezelfde server en met een db op dezelfde db server (mssql 7) werkt hij nog wel.

Ik snap er niets van, ik heb dit al vaker gedaan en ik snap niet wat ik fout doe.

Hier mijn hele code:
Let niet op die eerste insert, want die heb ik ff in stukken gebroken ivm layoutverkrachting van dit topic.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!-- #INCLUDE FILE="connection.inc" -->
<%
session.LCID = 1033


    Function SQLEncode(sValue)
        Position = InStr(sValue, "'")
        Do While Position > 0
            sValue = Mid(sValue, 1, Position) & Mid(sValue, Position)
            Position = InStr(Position + 2, sValue, "'")
        Loop
        SQLEncode = Server.HTMLEncode(sValue)
    End Function

    Dim linkRec
    Dim catsRec
    Dim sysRec
    Dim active

    Dim homeurl
    Dim func 
    Dim error
    
    error = ""
    
    Set linkRec = Server.CreateObject("ADODB.Recordset")
    Set catsRec = Server.CreateObject("ADODB.Recordset")
    Set sysRec = Server.CreateObject("ADODB.Recordset")
    Set objConn = Server.CreateObject ("ADODB.Connection")
    
    objConn.Open strConnect
    
    Set sysRec = objConn.Execute ("SELECT * FROM system ;")
    active = sysRec("addlinkswoa")
    homeurl = sysRec("homeurl")
    Set sysRec = Nothing

    func = Request.QueryString("func")
    if func = "write" then
        Set linkRec = objConn.Execute ("SELECT * FROM links WHERE url = '"& Request.Form("url") & "';")
        'if linkRec.BOF then
        sqlstr = "INSERT INTO links (title, description, url, catid, datein,
 active, hits, plaats, provincie, phone, email, price)
 values ('" & Request.Form("title") & "' , '" & Request.Form("description") & "' , '"  & 
Request.Form("url") & "' , '"  & Request.Form("catid") & "' , '" & date() & "' , '" & 0 
&  "' , '" & 0 & "' , '"  & Request.Form("plaats") & "' , '"  & Request.Form("provincie")
 & "'  , '"  & Request.Form("phone") & "' , '"  & Request.Form("email") & "' , '"  & 
Request.Form("price") & "') "
'response.write sqlstr

    objConn.Execute (sqlstr)
    
     sql_insert1 = "select @@identity as linkID from links "
   set gegevens = objconn.Execute(sql_insert1)



'sqlstr2 = "INSERT INTO test (id) values ('"& gegevens("linkid") &"')"
'objConn.Execute (sqlstr2)



        'else
            'error = "Link bestaat al"
        'end if
    end if
    

    response.write gegevens("linkID")

    objConn.Close
    Set linkRec = Nothing
    Set catsRec = Nothing
%>

[ Voor 21% gewijzigd door Verwijderd op 04-01-2004 02:41 ]


Verwijderd

Topicstarter
lama ik weet het al.

Schijnbaar zat die eerste query dwars.

code:
1
Set linkRec = objConn.Execute ("SELECT * FROM links WHERE url = '"& Request.Form("url") & "';")


Gelukkig heb ik deze query toch niet meer nodig. Ze stonden echter in dezelfde if else, dus misschien was dat het probleem.

[ Voor 67% gewijzigd door Verwijderd op 04-01-2004 02:51 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Nog een tip: Let op SQL Injection Attacks en maak gebruik van parametrized queries

[ Voor 33% gewijzigd door gorgi_19 op 04-01-2004 09:19 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1