27. september 2000 - 14:20Der er
11 kommentarer og 1 løsning
Få den post retur som man lige har oprettet....
Hey,
Så er jeg her igen - har lavet en lille rutine, der kører i ASP som indsætter en post i en tabel på min SQL Server. Det virker ganske fint og ser således ud:
--- Set dbConn = Server.CreateObject(\"ADODB.Connection\") dbConn.Open ConnectStr
strSQL = \"INSERT INTO User_Generateindex (IsActive) VALUES (\'1\')\"
dbConn.Execute (strSQL)
dbConn.Close
Set dbConn = nothing ---
MEN.. Problemet er at SQL\'en genrerer en index-key automatisk (UserNumber) som jeg gerne vil have returneret på den post jeg lige har oprettet. Nogen forslag til hvordan man mon gør det smartest?
Ret din strSQL til: strSQL = \"INSERT INTO User_Generateindex (IsActive) VALUES (\'1\')SELECT @@IDENTITY as UserNumber\" @@IDENTITY returnere den sidste identity (autonummerering hedder det vist på dansk) der er genereret af serveren.
Husk der skal lige lidt mere kode på til at håndtere returværdien fra db\'en.
Jeg har ikke testet men det her burde virke: Set dbConn = Server.CreateObject(\"ADODB.Connection\") Set dbRS = Server.CreateObject(\"ADODB.Recordset\")
dbConn.Open ConnectStr
strSQL = \"INSERT INTO User_Generateindex (IsActive) VALUES (\'1\') SELECT @@IDENTITY as \'UserNumber\'\"
set dbRS = dbConn.Execute (strSQL) if not dbRS.EOF then intResult = dbRS(0).Value End If
dbConn.Close set dbRS = nothing Set dbConn = nothing
så prøv med dbrs(\"UserNumber\").value eller med enkelt plinger dbrs(\'UserNumber\').value det er jo en næsten almindelig select så den skulle returnere et recordset med 1 post i, er du sikker på at det er tomt recordsettet??, nummeret i parentes er jo indexet det kan også være et.
Jaeh.. Prøvede med et - det hjalp ikke. Og hvis jeg angiver dbrs(\"UserNumber\") - får jeg samme fejl (Item cannot be found in the collection corresponding to the requested name or ordnial).
Jeg anvender andetsteds udtræk fra en tabel hvor jeg får felter ud på ovenstående måde.
For at der ikke skal være tvivl - min kode ser således ud nu:
--- \'Create and Open Connection Object Set dbConn = Server.CreateObject(\"ADODB.Connection\") dbConn.Open ConnectStr
strSQL = \"INSERT INTO User_Generateindex (IsActive) VALUES (\'1\') SELECT @@IDENTITY as \'UserNumber\'\" set dbRS = dbConn.Execute (strSQL) st = dbRS(\"UserNumber\")
lthrane> Hmm - jeg prøver den han siger på sin side (1stscript.com):
--- rs.open \"SELECT * FROM User_Generateindex WHERE (Usernumber=0)\", ConnectStr, adOpenStatic rs.AddNew rs(\"IsActive\") = \"1\" rs.Update St = rs(\"Usernumber\") rs.Close ---
Men der får jeg ikke lov til at udføre AddNew metoden, den siger \'object or provider is not cabable of performing the requested operation\'.
Hvis jeg tilføjer ,adLockOptimistic i kaldes af Open får jeg \'arguments are of the wrong type, are out of the acceptable range or are in conflict with oneanother\'.
Jeg har ingen bud. Måske kan du få hjælp fra eksperterne hvis du lægger en kommentar ind på http://www.eksperten.dk/spm/26896 for at henlede deres opmærksomhed på dette spørgsmål ?
lthrane
Synes godt om
Ny brugerNybegynder
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.