Avatar billede ravnkilde Nybegynder
02. oktober 2007 - 14:50 Der er 12 kommentarer og
1 løsning

Udtræk fra database med session / SQL

Hej!

Jeg har en database, hvorfra jeg skal have trukket data ud. Den enkelte bruger skal kun se sine egne data, han har indtastet via en form, hvor der samtidigt et startet en Session op:
Session("RegID") = Session.SessionID. Databasen genererer automatisk et unikt brugernr. (ParticipantID).

Mit spørgsmål er hvordan jeg får lavet SQL forespørgslen rigtigt, således at den kun trækker de relevante data for den pågældende bruger. Jeg forestiller mig noget med at session'en sammenlignes med det tilhørende brugernr. (ParticipantID)?

--- start på kode ---

strSQL= "SELECT Participants.RegID, Participants.ParticipantID, Participants.Firstname, Participants.Familyname, Participants.Function, Participants.Department, Participants.Country, Participants.Mobilephone, Participants.Email, Participants.Registrationdate, ArrivalDetails.ArrivalDate, ArrivalDetails.ArrivalMonth, ArrivalDetails.ArrivalHour, ArrivalDetails.ArrivalMinute, ArrivalDetails.ArrivalBy, ArrivalDetails.ArrivalFlightNo, ArrivalDetails.TransferToHotel, DepartureDetails.DepartureDate, DepartureDetails.DepartureMonth, DepartureDetails.DepartureHour, DepartureDetails.DepartureMinute, DepartureDetails.DepartureBy, DepartureDetails.DepartureFlightNo, DepartureDetails.TransferToAirport, RoomReservation.RoomRequired, RoomReservation.CheckinDate, RoomReservation.CheckinMonth, RoomReservation.CheckoutDate, RoomReservation.CheckoutMonth, RoomReservation.RoomPreference, RoomReservation.DiateryRemarks, RoomReservation.DiateryPreferences FROM ((Participants INNER JOIN DepartureDetails ON Participants.ParticipantID = DepartureDetails.ParticipantID) INNER JOIN RoomReservation ON Participants.ParticipantID = RoomReservation.ParticipantID) INNER JOIN ArrivalDetails ON Participants.ParticipantID = ArrivalDetails.ParticipantID;"

--- slut kode ---
Avatar billede snakeeye Nybegynder
02. oktober 2007 - 14:57 #1
nu ved jeg ikke lige om din sql sætning er rigtigt, men kan du ikke bare smide
"WHERE Participants.ParticipantID = brugerID"
?
Avatar billede sherlock Nybegynder
02. oktober 2007 - 15:03 #2
jeg forstår ikke denne her: Session("RegID") = Session.SessionID

Så længe din Session er aktiv har du jo i forvejen Session.SessionID og når sessionen dør, forsvinder begge værdier.
Avatar billede ravnkilde Nybegynder
02. oktober 2007 - 15:13 #3
snakeeye: denne her "WHERE Participants.ParticipantID = RegID" melder fejl: [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression

sherlock: Session dør ikke før dette udtræk er gennemført. Derefter føres brugeren til en "farvel-side" med Session.Abandon
Avatar billede sherlock Nybegynder
02. oktober 2007 - 15:16 #4
Det ændre da ikke på at Session("RegID") og Session.SessionID er ens og ophører med at eksistere samtidig. Alle steder hvor du bruger Session("RegID"), kan du ligesågodt bruge Session.SessionID .
Avatar billede ravnkilde Nybegynder
02. oktober 2007 - 15:19 #5
sherlock: OK, men hvordan kommer jeg videre med min SQL?
Avatar billede sherlock Nybegynder
02. oktober 2007 - 15:29 #6
På den side hvor du opretter brugeren skal du gemme den automatisk genererede ParticipantID evt. i Session("ParticipantID").

På din forespørgelses-side skal du så have en   

  "where Participants.ParticipantID = " & Session("ParticipantID")

Bedre kan jeg ikke gennemskue det lige nu og skal ud at køre.
Avatar billede ravnkilde Nybegynder
02. oktober 2007 - 15:39 #7
prøver og takker!
Avatar billede ravnkilde Nybegynder
03. oktober 2007 - 11:35 #8
sherlock:

Jeg er simpelthen bare kørt fast! Måske du kan give et råd til hvordan jeg løser opgaven. Brugeren indtaster data i en form på side A. Disse data skrive ned i databasen (side B). Brugeren modtager en e-mail (side C) med en bekræftelse på sine indtastning (alle indtastede data vises i mailen og e-mail'en indeholder samtidigt en URL til side D, hvor brugeren skal have mulighed for at rette sine indtastede oplysninger.

Jeg har styr på side A og B, men mangler altså at få løst problemet med URL'en i mailen og side D, der skal hente den pågældende brugers data ind en i form.

Hjælp mig venligst - jeg er ved at gå sur i opgaven!

PS: Det unikke brugernr. genereres i databasen (aut.nr.), når data skrives ned.
Avatar billede sherlock Nybegynder
03. oktober 2007 - 12:53 #9
Din link i mailen skal se ca. sån ud:

http://dit.dmoain.dk/redigerbruger.asp?brugernr=1213

så kan du finde vedkommende frem igen med:
"where Participants.ParticipantID = " & Request("brugernr")
Avatar billede ravnkilde Nybegynder
03. oktober 2007 - 14:50 #10
Ja, sherlock. Den er jeg med på. Men hvordan får jeg hentet brugernr.?

Nedenstående koder fra side B, der skriver de indtastede data ned i databasen. Nu vil jeg umiddelbart efter at have skrevet til databasen, lave et udtræk der binder den pågældende session med brugernr., men når jeg kører siden, kaster den bare det samme brugernr. ud hver gang (136).

Hvordan får jeg fat på den sidste brugers brugernr. (ParticipantID)?

--- start kode ---

<%

'Skriv til database
'Database forbindelse
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("../../../../database/new.mdb")

strSQL = "" &_
"INSERT INTO participants " &_
"(RegID, Firstname, Familyname, Function, Department, Country, Mobilephone, Email, Registrationdate) VALUES (" &_
"'7896','" & Request.Form("Firstname") & "','" & Request.Form("Familyname") & "','" & Request.Form("Function") & "','" & Request.Form("Department") & "','" & Request.Form("Country") & "','" & Request.Form("Mobilephone") & "','" & Request.Form("Email") & "', '"&Now&"') "
ObjConn.Execute(strSQL)

set rs = objConn.execute("select @@identity as thisID")
ID1 = rs("thisID")

strSQL = "" &_
"INSERT INTO ArrivalDetails " &_
"(ParticipantID, ArrivalDate, ArrivalMonth, ArrivalHour, ArrivalMinute, ArrivalBy, ArrivalFlightNo, TransferToHotel) VALUES (" &_
""& ID1 &",'" & Request.Form("ArrivalDate") & "','" & Request.Form("ArrivalMonth") &"','" & Request.Form("ArrivalHour") &"','" & Request.Form("ArrivalMinute") &"','" & Request.Form("ArrivalBy") &"','" & Request.Form("ArrivalFlightNo") &"','" & Request.Form("TransferToHotel") &"') "
ObjConn.Execute(strSQL)

strSQL = "" &_
"INSERT INTO DepartureDetails " &_
"(ParticipantID, DepartureDate, DepartureMonth, DepartureHour, DepartureMinute, DepartureBy, DepartureFlightNo, TransferToAirport) VALUES (" &_
"" & ID1 & ",'" & Request.Form("DepartureDate") & "','" & Request.Form("DepartureMonth") &"','" & Request.Form("DepartureHour") &"','" & Request.Form("DepartureMinute") &"','" & Request.Form("DepartureBy") &"','" & Request.Form("DepartureFlightNo") &"','" & Request.Form("TransferToAirport") &"') "
ObjConn.Execute(strSQL)

strSQL = "" &_
"INSERT INTO RoomReservation " &_
"(ParticipantID, RoomRequired, CheckinDate, CheckinMonth, CheckoutDate, CheckoutMonth, RoomPreference, DiateryRemarks, DiateryPreferences) VALUES (" &_
"" & ID1 & ",'" & Request.Form("RoomRequired") & "','" & Request.Form("CheckinDate") & "','" & Request.Form("CheckinMonth") &"','" & Request.Form("CheckoutDate") &"','" & Request.Form("CheckoutMonth") &"','" & Request.Form("RoomPreference") &"','" & Request.Form("DiateryRemarks") &"','" & Request.Form("DiateryPreferences") &"') "
ObjConn.Execute(strSQL)

'Traek fra database
sSQL ="Select ParticipantID from Participants"
set rs = ObjConn.Execute(sSQL)

'Start session
Session("ParticipantID") = rs("ParticipantID")

'Luk databaseforbindelse
objConn.Close
Set objConn = Nothing

Response.Write Session("ParticipantID")

%>
Avatar billede sherlock Nybegynder
03. oktober 2007 - 15:41 #11
Den har du jo i ID1
Avatar billede ravnkilde Nybegynder
03. oktober 2007 - 16:07 #12
sherlock: Ja, selvfølgelige. Det ser ud til at jeg nu er kommet lidt videre... Smid et svar for din tålmodighed og hjælp!
Avatar billede sherlock Nybegynder
03. oktober 2007 - 19:17 #13
:)
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