Avatar billede larsomania Nybegynder
27. september 2000 - 14:20 Der 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?
Avatar billede privaten Nybegynder
27. september 2000 - 14:48 #1
Hvad med at hente den vha. \"Select MAX(UserNumber)....\"?
Avatar billede jper Nybegynder
27. september 2000 - 14:59 #2
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.
Avatar billede larsomania Nybegynder
27. september 2000 - 15:11 #3
Privaten> Jo, men det virker bare ikke hvis nu tro brugere gør det \'samtidigt\'.

JPER> Ja, hvor får jeg så den select værdi returneret til? Er det Execute, der så returnerer værdien.
Avatar billede jper Nybegynder
27. september 2000 - 15:23 #4
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
Avatar billede larsomania Nybegynder
27. september 2000 - 15:30 #5
jper> Hrrm.. Jeg får et tomt dataset retur (den vil ikke hente dbRS(0)).
Avatar billede jper Nybegynder
27. september 2000 - 15:36 #6
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.
Avatar billede larsomania Nybegynder
27. september 2000 - 15:44 #7
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\")
 
  dbConn.Close
---
Avatar billede jper Nybegynder
27. september 2000 - 15:58 #8
Men du mangler .Value linien før dbConn.Close skal være:

st = dbRS(\"UserNumber\").Value
Avatar billede larsomania Nybegynder
27. september 2000 - 16:04 #9
Det giver samme fejl - jeg tror faktisk .value er underforstået, for de andre steder jeg henter værdier ud - angiver jeg den ikke.
Avatar billede lthrane Nybegynder
27. september 2000 - 16:12 #10
Se dette spm.: http://www.eksperten.dk/spm/26896

lthrane
Avatar billede larsomania Nybegynder
27. september 2000 - 16:55 #11
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\'.

Help?!?
Avatar billede lthrane Nybegynder
28. september 2000 - 09:49 #12
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
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
Computerworld tilbyder specialiserede kurser i database-management

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