/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Mssql, addNew returnerer ikke ID
Fra : Leif Neland


Dato : 05-12-07 12:55

Jeg har en kundetabel, hvor jeg indsætter ny på denne måde, men siden i går,
bliver "id" (Identity med increment 1) ikke returneret i mit recordset. Jeg
mener ikke jeg har lavet noget som helst om, der kan være relevant.
Jeg benytter dette fragment i asp:

Set Rs2 = server.createObject("ADODB.RecordSet")
Rs2.CursorLocation = 3
Rs2.open "kunder", Record, 3, 3
Rs2.addNew
Rs2("navn") = strNavn
Rs2("adresse") = strAdresse
' tilsvarende med de andre felter
Rs2("land") = strLand
Rs2.Update
KundeId = Rs2("id")

Rs2("id") er bare nul, selvom id ved direkte inspektion i databasen korrekt
har værdien 1 mere end den forrige record.

Hvad kan der være gået galt?
Seneste opdatering jfr update.microsoft.com "Review your update history"
viser 14. november.

Jeg må vel lave et hack med at hvis KundeId er 0, så returneres højeste
record, hvor navn, adresse er lig de indtastede.

Leif




 
 
Christian R. Larsen (05-12-2007)
Kommentar
Fra : Christian R. Larsen


Dato : 05-12-07 14:31

"Leif Neland" <leif@neland.dk> wrote in message
news:47569179$0$2111$edfadb0f@dtext02.news.tele.dk...
> Jeg har en kundetabel, hvor jeg indsætter ny på denne måde, men siden i
> går,
> bliver "id" (Identity med increment 1) ikke returneret i mit recordset.
> Jeg
> mener ikke jeg har lavet noget som helst om, der kan være relevant.
> Jeg benytter dette fragment i asp:
>
> Set Rs2 = server.createObject("ADODB.RecordSet")
> Rs2.CursorLocation = 3
> Rs2.open "kunder", Record, 3, 3
> Rs2.addNew
> Rs2("navn") = strNavn
> Rs2("adresse") = strAdresse
> ' tilsvarende med de andre felter
> Rs2("land") = strLand
> Rs2.Update
> KundeId = Rs2("id")
>
> Rs2("id") er bare nul, selvom id ved direkte inspektion i databasen
> korrekt
> har værdien 1 mere end den forrige record.

Er problemet ikke, at RS2("ID) ikke har en værdi på det tidspunkt, hvor du
creater dit ADODB.recordset? Umiddelbart ville jeg forvente, at du er nødt
til at lave dit hack for at få det til at virke.

Jeg kan ikke lige give dig den teoretiske forklaring på det dog.




Jens Gyldenkærne Cla~ (05-12-2007)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 05-12-07 15:14

Christian R. Larsen skrev:

>> Rs2.Update
>> KundeId = Rs2("id")

> Er problemet ikke, at RS2("ID) ikke har en værdi på det
> tidspunkt, hvor du creater dit ADODB.recordset?

Det burde ikke betyde noget når han bruger Update inden id-værdien
afslæses.


> Umiddelbart ville jeg forvente, at du er nødt til at lave dit
> hack for at få det til at virke.

Jeg ville gå en anden vej - lav en lagret procedure i MSSQL der
håndterer indsættelsen og returnerer id-værdien (enten via en
output-parameter eller via et postsæt


--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jan Bachman (05-12-2007)
Kommentar
Fra : Jan Bachman


Dato : 05-12-07 19:55

On Wed, 5 Dec 2007 12:54:31 +0100, "Leif Neland" <leif@neland.dk>
wrote:

>Jeg har en kundetabel, hvor jeg indsætter ny på denne måde, men siden i går,
>bliver "id" (Identity med increment 1) ikke returneret i mit recordset. Jeg
>mener ikke jeg har lavet noget som helst om, der kan være relevant.
>Jeg benytter dette fragment i asp:

Rs2.Update
Rs2.MoveLast
KundeId = Rs2("id")

/Jan

Peter Lykkegaard (05-12-2007)
Kommentar
Fra : Peter Lykkegaard


Dato : 05-12-07 23:23

Jan Bachman wrote:
>
> Rs2.Update
> Rs2.MoveLast
> KundeId = Rs2("id")
>
Det giver nogle interessante "muligheder" i et flerbruger miljø

Den eneste (og rigtige) vej er at bruge @@identity
... a system function that returns the last-inserted identity value.

http://msdn2.microsoft.com/en-us/library/ms187342.aspx

- Peter

--
Hi! I'm a .signature *virus*!
Copy me into your ~/.signature to help me spread!



Jan Bachman (07-12-2007)
Kommentar
Fra : Jan Bachman


Dato : 07-12-07 08:59

On Wed, 5 Dec 2007 23:23:25 +0100, "Peter Lykkegaard"
<plykkegaard@gmail.com> wrote:

>Det giver nogle interessante "muligheder" i et flerbruger miljø

God pointe. Det har jeg testet i sin tid al.la dette:

RS.update
' pause start
' bruger 2 indsætter ny post
' pause stop
RS.movelast
id = RS("ID")

Hvis ens RS er en type, der ikke viser andre brugeres tilføjelser, er
der ikke problemer (dvs. typen Keyset).

>Den eneste (og rigtige) vej er at bruge @@identity
> ... a system function that returns the last-inserted identity value.
>
>http://msdn2.microsoft.com/en-us/library/ms187342.aspx

DEN vil jeg kigge nærmere på. Takker

/Jan

Christian R. Larsen (07-12-2007)
Kommentar
Fra : Christian R. Larsen


Dato : 07-12-07 11:57

"Leif Neland" <leif@neland.dk> wrote in message
news:47569179$0$2111$edfadb0f@dtext02.news.tele.dk...
> Jeg har en kundetabel, hvor jeg indsætter ny på denne måde, men siden i
> går,
> bliver "id" (Identity med increment 1) ikke returneret i mit recordset.
> Jeg
> mener ikke jeg har lavet noget som helst om, der kan være relevant.
> Jeg benytter dette fragment i asp:
>
> Set Rs2 = server.createObject("ADODB.RecordSet")
> Rs2.CursorLocation = 3
> Rs2.open "kunder", Record, 3, 3
> Rs2.addNew
> Rs2("navn") = strNavn
> Rs2("adresse") = strAdresse
> ' tilsvarende med de andre felter
> Rs2("land") = strLand
> Rs2.Update
> KundeId = Rs2("id")
>
> Rs2("id") er bare nul, selvom id ved direkte inspektion i databasen
> korrekt
> har værdien 1 mere end den forrige record.
>
> Hvad kan der være gået galt?
> Seneste opdatering jfr update.microsoft.com "Review your update history"
> viser 14. november.
>
> Jeg må vel lave et hack med at hvis KundeId er 0, så returneres højeste
> record, hvor navn, adresse er lig de indtastede.

Jeg ville løse problemet ved at tilføje to felter i tabellen - (1) brugerens
SessionID of (2) et timestamp.

Når tabellen er opdateret, ville jeg hente kundeID'et ud ved at lave en
select som denne:

SELECT TOP 1 ID from Kunder where SessionID = currentsessionID order by
timestamp desc

(jeg ved ikke lige, om syntaxen er korrekt)



Peter Lykkegaard (07-12-2007)
Kommentar
Fra : Peter Lykkegaard


Dato : 07-12-07 23:34

Christian R. Larsen wrote:

> Jeg ville løse problemet ved at tilføje to felter i tabellen - (1)
> brugerens SessionID of (2) et timestamp.
>
Jeg ville nu stadig bruge @@Identity i stedet for at gå over åen efter vand

- Peter

--
Hi! I'm a .signature *virus*!
Copy me into your ~/.signature to help me spread!



Jan Bachman (07-12-2007)
Kommentar
Fra : Jan Bachman


Dato : 07-12-07 08:49

On Wed, 5 Dec 2007 12:54:31 +0100, "Leif Neland" <leif@neland.dk>
wrote:

> Set Rs2 = server.createObject("ADODB.RecordSet")
> Rs2.CursorLocation = 3
> Rs2.open "kunder", Record, 3, 3
> Rs2.addNew
> Rs2("navn") = strNavn
> Rs2("adresse") = strAdresse
>' tilsvarende med de andre felter
> Rs2("land") = strLand
> Rs2.Update
> KundeId = Rs2("id")
>
Rs2.Update
Rs2.MoveLast
KundeId = Rs2("id")

/Jan

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408918
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste