Avatar billede jacand Nybegynder
07. april 2002 - 14:53 Der er 8 kommentarer og
1 løsning

Hent ID ver. 2

Jeg prøver lige igen, da det gamle spørgsmål er blevet lidt rodet :)

Når nedenstående kode har lavet en ny record i databasen. hvordan får jeg den så til at hente ID på den record den har lavet, så jeg kan bruge den i den mail jeg sender ud?

Jeg får fejlen:
Microsoft VBScript runtime error '800a01a8'

Object required: ''

/salg/savenewinfo.asp, line 24
Når jeg bruger:
Set rs = Conn.Execute("select max(ID) from Annoncer")
men den oprettet fint nok den nye record i databasen.

<!-- #include file="db.asp" -->
<!-- #include file="mailinfo.asp" -->
<%
Response.Buffer = true
Response.CacheControl = "no-cache"
Response.Expires = -1
Session.LCID = 1030

Set rs = Server.CreateObject("ADODB.Connection")
rs.Open strDSN
SQL = "INSERT INTO Annoncer (kode,Kategori,overskrift,tekst,Pris,Navn,Adresse,Postnr,Bynavn,EMail,tlfnr,dato,klokken,Ipnummer)"
SQL = SQL & " VALUES ('" & request.form("kode") & "','" & request.form("Kategori") & "','" & request.form("overskrift") & "','" & request.form("tekst") & "','" & request.form("Pris") & "','" & request.form("Navn") & "','" & request.form("adresse") & "','" & request.form("Postnr") & "','" & request.form("Bynavn") & "','" & request.form("EMail") & "','" & request.form("tlfnr")& "','" & date() & "','" & time() & "','" & Request.ServerVariables("REMOTE_ADDR") & "')"

response.write sql

rs.Execute (SQL)

rs.Close
Set rs = nothing
Set SQL = nothing


Set rs = Conn.Execute("select max(ID) from Annoncer")
rs.Open strDSN
strLastInsertID = rs(0)
overskrift = rs("overskrift")
mail = rs("EMail")
navn = rs("Navn")

Set JMail = Server.CreateObject("JMail.SMTPMail")
    JMail.ServerAddress = mailserver
        JMail.Sender = mailsender
        JMail.SenderName = mailsendername
    JMail.Subject = "12345"
    JMail.AddRecipient mail
    JMail.Body = "Hej " & navn & vbcrlf & vbcrlf & "test "     
   
   
    JMail.Priority = 1
    JMail.Execute
    JMail.Close
    Set JMail = Nothing   


rs.Close
Set rs = nothing
Set SQL = nothing
%>
Avatar billede ncp Nybegynder
07. april 2002 - 15:04 #1
brug denne "insert-metode" istedet :

                Set rs = Server.CreateObject("ADODB.RecordSet")
                strSQL = "SELECT * FROM Brugere WHERE (ID = 0)"
                rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
                If (rs.BOF Or rs.EOF) Then
                    rs.AddNew
                    rs("navn") = Navn
                    rs("email") = Email
                    rs("adresse") = adresse
                    rs("postnummer") = Postnummer
                    rs("by") = By
                    rs("password") = Password
                    rs("Admin") = "Nej"
                    rs("stemmer") = "1"
                    rs("point") = "3"
                    rs.Update
       
                    id = rs("id")
                    rs("brugerid") = id
                    rs.Update

                    rs.Close
                Set rs = Nothing
Avatar billede ncp Nybegynder
07. april 2002 - 15:05 #2
glemte lige 3 linjer (skal stå øverst):

Const adOpenKeyset = 1
Const adLockOptimistic = 3
Conn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("mdb/brugere.mdb")
Avatar billede erikjacobsen Ekspert
07. april 2002 - 15:17 #3
ja, du skal da i hvert fald ikke lave en select max(ID) - det er
hul i hovedet. Det er ineffektivt, og forkert. Der kan sagtens
komme en ekstre INSERT fra en anden bruger, mellem du
har sagt INSERT og siger select max(ID). Og så er tallet
forkert.

Gør som ncp siger, eller brug den nye Jet-driver. Der kan du gøre som
i MSSQL (@@IDENTITY)
Avatar billede jacand Nybegynder
07. april 2002 - 15:22 #4
Svaret fra ncp viker bare som det skal

Tak for hjælpen :)
Avatar billede ncp Nybegynder
07. april 2002 - 15:28 #5
det var da så lidt... tak 4 points
Avatar billede erikjacobsen Ekspert
07. april 2002 - 15:50 #6
...og det var også det du fik at vide i http://www.eksperten.dk/spm/194773
bare sådan for en ordens skyld
Avatar billede jacand Nybegynder
07. april 2002 - 16:03 #7
Nej i http://www.eksperten.dk/spm/194773 fik jeg at vide at jeg skulle lave det med Set rs = Conn.Execute("select max(ID) from Annoncer") :) og dette spørgsmål er en ny ver. af det gamle, der var blevet lidt rodet.
Avatar billede erikjacobsen Ekspert
07. april 2002 - 16:06 #8
Se blot hvad jeg skrev i bemeldte spørgsmål.
Avatar billede Slettet bruger
07. april 2002 - 18:02 #9
erik > Hvad er alternativet til select max(ID)?
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