Avatar billede jerving Nybegynder
13. maj 2003 - 00:02 Der er 6 kommentarer og
1 løsning

Mystisk problem med @@IDENTITY

Hej begavede hoveder.

@@IDENTITY har nu voldt mig store problemer i dagevis i forbindelse med nedenstående kode.

Jeg vil med nedenstående kode betingelsesvist gemme forskellige oplysninger i min MS-SQL database.

Kort fortalt gemmer den et event, som kan være enkelt, ugentligt, månedligt eller årligt.

I tabellen ”Mile” gemmes en overordnet ”samling” af understående events for et projektID. Er det, det første event til et givent projektID, skal der derfor oprettes en post Mile. (dette afgøres med variablen ”Stored”).

Er der allerede oprettet en post i ”Mile”, til underliggende events, skal ID’et fra denne hentes og lægges ind som fremmednøgle i de underliggende evets (tabellen ”MileEvents”).

De underliggende ”mønstre” (ugentlig, månedlig eller årlig – tabellerne ” WeeklyPattern”, ”monthlyPattern” og ”YearlyPattern”) skal så have tilknyttet en fremmed nøgle, som er id’et fra det underliggende event(”MileEvents”), der netop blev tilføjet.

Dette virker helt fint så længe, det er det første event af flere – altså så længe ”Stored = false”

Her tildeles fremmednøglerne korrekt i både de underliggende events og til deres mønstre.

Men er Stored = ”true” fungerer SELECT @@IDENTITY- sætningerne af en eller anden grund ikke længere???

Er der nogen, der kan forklare mig hvorfor??

Dette må være dagens længste spørgsmål.


Stored = Request.QueryString("Stored")

If Stored = "true" Then

findStatuSQL = "SELECT * FROM Mile WHERE projektID =" & prj

fns = Conn.Execute(findStatuSQL)

MileID = fns("ID")
Response.Write "MileID=" & fns("ID")

Else

'IndsætEvent
eventSQL1 = "INSERT INTO Mile (ProjektID, startDate,endDate)"
eventSQL1 = eventSQL1 & " VALUES ('" & prj & "','2003-01-01','2005-01-01')"

Conn.ExeCute(eventSQL1)

'Fang det netop indasatte ID
tempSQL = "SELECT @@IDENTITY AS NewID"

Set tempRs = Conn.Execute(tempSQL)

'Sæte mileID til at være denne værdi
MileID = tempRs.Fields("NewID").Value

tempRs.Close

End If

eventSQL2 = "INSERT INTO MileEvents (MileID,MileEventTitel,MileEventBeskrivelse,StartDate,EndDate,allDay,eventTypeID)"
eventSQL2 = eventSQL2 & " Values ('" & MileID & "','" & eventTitle & "','" & eventDescription & "','" & startDate & " " & eventStartTime & "','" & endDate & " " & eventEndTime & "','" & allDay & "','" & eventTypeID & "')"

Conn.Execute(eventSQL2)

'Fang det netop indasatte ID
tempSQL2 = "SELECT @@IDENTITY AS NewID2"

Set tempRs2 = Conn.Execute(tempSQL2)

'Sæte mileEventID til at være denne værdi
MileEventID = tempRs2.Fields("NewID2").Value

Response.Write "MileEventID=" & MileEventID

tempRs2.Close

If eventTypeID = 1 Then

weeklySQL = "INSERT INTO WeeklyPattern (MileEventID,sun,sat,fri,thu,wed,tue,mon,recur)"
weeklySQL = weeklySQL & "VALUES ('" & MileEventID & "','" & sun & "','" & sat & "','" & fri & "','" & thu & "','" & wed & "','" & tue & "','" & mon & "','" & recur &"')"

Conn.Execute(weeklySQL)

ElseIf  eventTypeID = 2 Then

monthlySQL = "INSERT INTO MonthlyPattern (MileEventID,day,week,recur)"
monthlySQL = monthlySQL  & " VALUES ('" & MileEventID & "','" & evDay & "','" & week & "','" & recur & "')"

Conn.Execute(monthlySQL)

ElseIf eventTypeID = 3 Then

yearlySQL = "INSERT INTO YearlyPattern (MileEventID,day,week,month)"
yearlySQL = yearlySQL  & " VALUES ('" & MileEventID & "','" & evDay & "','" & week & "','" & eventMonth & "')"

Conn.Execute(yearlySQL)

End If
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 00:14 #1
Hvad udskriver
Response.Write "MileID=" & fns("ID")
??
Avatar billede jerving Nybegynder
13. maj 2003 - 00:28 #2
Den skriver korrekt nok ID'en fra den eksisterende Mile post, hvor projektID'et svarer til Prj-variablen. Denne udførers korrekt, problemerne starter ved MileID = tempRs.Fields("NewID").Value, den er tom?
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 00:33 #3
Ok - dumt spørgsmål, men ID er et autonummereret felt i MSSQL (jeg kan
ikke lige huske den korrekte betegnelse)

Man plejer at nøjes med MileID = tempRs("NewID") i stsdet for
MileID = tempRs.Fields("NewID").Value, men det er jo ikke lige problemet
Avatar billede jerving Nybegynder
13. maj 2003 - 00:41 #4
Nej, det var faktisk slet ikke så dumt, for det løste rent faktisk problemet!!!!  Helt kanon! Læg et svar :o)
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 00:43 #5
;) Hvad er det nu betegnelsen for autonummerede felter er i MSSQL ?
Avatar billede jerving Nybegynder
13. maj 2003 - 00:49 #6
incr?
Avatar billede erikjacobsen Ekspert
13. maj 2003 - 00:55 #7
Nej, det vaar ikke det jeg tænkte på. Det var ordet IDENTITY, som går igen her

CREATE TABLE new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
)

Det er en af de ting, der er forskellig i mange databasesystemer
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