Avatar billede jimmidreng Nybegynder
23. januar 2001 - 17:30 Der er 7 kommentarer og
1 løsning

Hive ID ud af recordset (Hjææææælp)

Jeg ønsker at hive den automatisk generede Id ud af et recordset inden jeg lukker det, jeg er ligeglad om det er før eller efter update:

Set objRS = Server.CreateObject(\"ADODB.Recordset\")
objRS.Open \"Table\", Conn, 3, 3
objRS.AddNew
TmpId = objRS(\"ID\")
objRS.Update
response.write TmpId

resultatet bliver en tom variabel, der kommer intet ud, TmpId er tom!
Hvorfor? Er det mine CursorTypes???
Avatar billede eagleeye Praktikant
23. januar 2001 - 17:32 #1
Set objRS = Server.CreateObject(\"ADODB.Recordset\")
objRS.Open \"Table\", Conn, 3, 3
objRS.AddNew
objRS.Update
objRS.movelast
TmpId = objRS(\"ID\")
response.write TmpId
Avatar billede jimmidreng Nybegynder
23. januar 2001 - 17:34 #2
Det ved jeg, problemet er bare hvis der er to der opretter samtidig kan der opstå fejl!
Det skal være 100% at den id der kommer ud er den man selv har oprettet.
Det er til en betalings løsning, og der er dødstraf til mig hvis der kommer sådanne fejl.
Avatar billede eagleeye Praktikant
23. januar 2001 - 17:37 #3
  Set objRS = Server.CreateObject(\"ADODB.Recordset\")
objRS.Open \"Table\", Conn, 3, 3
objRS.AddNew
objRS.Update
objRS.close

sqlStr = SELECT * FROM table ORDER BY id
objRS.Open sqlStr,\"Table\", Conn, 3, 3
objRS.movelast
TmpId = objRS(\"ID\")
response.write TmpId 
Avatar billede eagleeye Praktikant
23. januar 2001 - 17:38 #4
Open skal se sådan ud.
objRS.Open sqlStr, Conn, 3, 3
Avatar billede jimmidreng Nybegynder
23. januar 2001 - 17:41 #5
Min Open ser jo sådan ud: objRS.Open sqlStr, Conn, 3, 3

sqlStr er jo bare angivet direkte: \"Table\" istedet for at ligge det i en variabel.

Og så laver du Movelast finten igen, det virker jo ikke hvis der er en anden bruger der har oprettet en post i det split sekund som man er om at oprette og movelast\'e
Avatar billede eagleeye Praktikant
23. januar 2001 - 19:17 #6
Ifølge MS skal du bruge Jet Engine. Din \"con\" skal ændres til:
con= \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"&Server.MapPath(dindatabase)
objRS.Open \"Table\", Conn, 3, 3
objRS.AddNew
TmpId = objRS(\"ID\")
objRS.Update
response.write TmpId


Prøv at kikke her:
http://support.microsoft.com/support/kb/articles/Q244/1/36.asp
http://www.adopenstatic.com/experiments/autonumberandaddnew.asp

P.S: Jeg prøvet og jeg kan få det til at virke med Access97 og Jet Engine.
Avatar billede erikjacobsen Ekspert
23. januar 2001 - 21:42 #7
Jeg har gjort mig nogle tanker om dette på
http://www.1script.com/asp0001.html
Alting er ikke helt korrekt, for jeg har fundet ud at parametrene
på en rs.open varierer på forskellige databaser. Men det er da
en start!
Avatar billede ortrak Nybegynder
24. januar 2001 - 01:09 #8
jimmidreeeeeng.....hvor svært kan det være!!

normalt så ville jeg lave:

objRS.AddNew
objRS.Update
TmpId = objRS(\"ID\")

Men hvis du skal være dødsenssikker sikker på at det virkelig er det id, som netop er blevet oprettet, så ville jeg benytte T-SQL\'s udmærkede @@identity. f.eks.:

SQL = \"INSERT INTO something(field1, fields2) VALUES (8,8)\"

Conn.Execute(SQL)

Set TmpId = Conn.Execute(\"SELECT @@IDENTITY FROM something\")


Er alt dette ikke implementeret i den originale betalingsløsning. Det må have været en kludderkoder som har lavet det. :-]


/ortrak

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