|
| 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
| |
|
|