Avatar billede ravnkilde Nybegynder
21. august 2007 - 10:05 Der er 14 kommentarer og
2 løsninger

INSERT INTO - flere tabeller

Hej!

Jeg har en database med p.t. to tabeller, h.h.v. Participants og
ArrivalDetails. Jeg har lavet en relation mellem de to databaser,
således at ParticipantsID fra første tabel går med i den anden
tabel.

Fra en en form skal jeg have skrevet brugernes input ned i
databasen.

Jeg har lavet flg. kode, som dog melder fejl om manglende ";" i
den SQL-sætningen.

Kan nogen hjælpe med med problemet? Pft.

<%
'Dim variabler
Dim objConn
Dim strFirstname, strFamilyname, strArrivalDate, strArrivalMonth

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

'SQL
strSQL = "Insert into Participants (Firstname, Familyname)
values('" & Request.Form("Firstname") & "', '" &
Request.Form("Familyname") & "')"
Set objRs = objConn.Execute(strSQL)
strSQL = "Insert into ArrivalDetails (ArrivalDate, ArrivalMonth)
values('" & Request.Form("ArrivalDate") & "', '" &
Request.Form("ArrivalMonth") & "') INNER JOIN ArrivalDetails ON
Participants.ParticipantID=ArrivalDetails.ParticipantID"
Set objRs = objConn.Execute(strSQL)
%>
Avatar billede fennec Nybegynder
21. august 2007 - 10:11 #1
Du skal have fat i @@identity:

strSQL = "Insert into Participants (Firstname, Familyname)
values('" & Request.Form("Firstname") & "', '" &
Request.Form("Familyname") & "')"
objConn.Execute(strSQL)
Set objRs = objConn.Execute("select @@identity as thisID")
parID = objRs("thisID")
strSQL = "Insert into ArrivalDetails (ParticipantID, ArrivalDate, ArrivalMonth)
values("& parID &",'" & Request.Form("ArrivalDate") & "', '" &
Request.Form("ArrivalMonth") & "')"
objConn.Execute(strSQL)
Avatar billede fennec Nybegynder
21. august 2007 - 10:12 #2
... Og som du kan se behøver du ikke et recordset for at lave en insert. Det klares fint bare med connection objektet.
Avatar billede ravnkilde Nybegynder
21. august 2007 - 12:39 #3
fennec: Super. Hvis jeg skal have endnu en eller to tabeller med, hvad gør jeg så. Skal jeg indsætte flg. linie igen?:

Set objRs = objConn.Execute("select @@identity as thisID")
parID = objRs("thisID")

Eks. på endnu en tabel jeg skal skrive til:

strSQL = "Insert into DepartureDetails (ParticipantID, DepartureDate, DepartureMonth) values("& parID &",'" & Request.Form("DepartureDate") & "', '" & Request.Form("DepartureMonth") & "')"
objConn.Execute(strSQL)
Avatar billede fennec Nybegynder
21. august 2007 - 12:54 #4
@@identity henter det sidste genereret ID ud. Hvis du f.eks skal indsætte i 3 tabeller men ID'et fra to af dem skal bruges i den 3., vil det se sådan ud:

conn.execute("insert into tabel1(navn) values('Fennec')")
set rs = conn.execute("select @@identity as thisID")
ID1 = rs("thisID")
conn.execute("insert into tabel2(navn) values('Ravnkilde')")
set rs = conn.execute("select @@identity as thisID")
ID2 = rs("thisID")
conn.execute("insert into tabel3(ID1, ID2) values("& ID1 &","& ID2 &")")

Bemærk at @@Identity selecten er ens, men den henter id fra den netop indsatte række.

Håber det var det du søgte...
Avatar billede ravnkilde Nybegynder
21. august 2007 - 13:29 #5
fennec, tak for dit input:

Jeg har lavet denne med et miks af din og min kode:

conn.execute("insert into Participants(Firstname, Familyname) values('" & Request.Form("Firstname") & "', '" & Request.Form("Familyname")")
set rs = conn.execute("select @@identity as thisID")
ID1 = rs("thisID")
conn.execute("insert into ArrivalDetails(ParticipantID, ArrivalDate, ArrivalMonth) values("& ID1 &",'" & Request.Form("ArrivalDate") & "', '" & Request.Form("ArrivalMonth")")
set rs = conn.execute("select @@identity as thisID")
ID2 = rs("thisID")
conn.execute("insert into DepartureDetails(ParticipantID, DepartureDate, DepartureMonth) values("& ID1 &","& ID2 &",'" & Request.Form("DepartureDate") & "', '" & Request.Form("DepartureMonth")")

men den giver fejlen "Unterminated string constant". Bemærk at i den 3. tabel er der kun ét felt til ID-nr. (du har ID1 og ID2 med, men det er nok OK?)
Avatar billede fennec Nybegynder
21. august 2007 - 13:41 #6
Du har ikke fået afsluttet rigtigt:
...& "', '" & Request.Form("DepartureMonth")")

Skal være:
...& "', '" & Request.Form("DepartureMonth") &"'")
Avatar billede fennec Nybegynder
21. august 2007 - 13:43 #7
Du får lige den fulde, for du skal ikke have begge ID'er med:

conn.execute("insert into Participants(Firstname, Familyname) values('" & Request.Form("Firstname") & "', '" & Request.Form("Familyname")")
set rs = conn.execute("select @@identity as thisID")
ID1 = rs("thisID")
conn.execute("insert into ArrivalDetails(ParticipantID, ArrivalDate, ArrivalMonth) values("& ID1 &",'" & Request.Form("ArrivalDate") & "', '" & Request.Form("ArrivalMonth")")
conn.execute("insert into DepartureDetails(ParticipantID, DepartureDate, DepartureMonth) values("& ID1 &",'" & Request.Form("DepartureDate") & "', '" & Request.Form("DepartureMonth") &"'")
Avatar billede ravnkilde Nybegynder
21. august 2007 - 14:14 #8
fennec:

Tak, jeg har prøvet din kode, men får fejlen

Unterminated string constant
/data.asp, line 25, column 139
Avatar billede fennec Nybegynder
21. august 2007 - 14:18 #9
Ahhh du havde samme problem i de andre sql (manglede &"'" til sidste)

conn.execute("insert into Participants(Firstname, Familyname) values('" & Request.Form("Firstname") & "', '" & Request.Form("Familyname") &"'")
set rs = conn.execute("select @@identity as thisID")
ID1 = rs("thisID")
conn.execute("insert into ArrivalDetails(ParticipantID, ArrivalDate, ArrivalMonth) values("& ID1 &",'" & Request.Form("ArrivalDate") & "', '" & Request.Form("ArrivalMonth") &"'")
conn.execute("insert into DepartureDetails(ParticipantID, DepartureDate, DepartureMonth) values("& ID1 &",'" & Request.Form("DepartureDate") & "', '" & Request.Form("DepartureMonth") &"'")
Avatar billede fennec Nybegynder
21. august 2007 - 14:20 #10
Hvad sidder du og skriver kode'en i?? Notepad??

Må jeg anbefale en editor ala HomeSite. De har farve koder inde, så sådan en fejl nemt kan undgåes.
Avatar billede ravnkilde Nybegynder
21. august 2007 - 14:38 #11
jeg bruger dreamweaver ;-)

Denne kode

objConn.execute("Insert into Participants(Firstname, Familyname) values('" & Request.Form("Firstname") & "', '" & Request.Form("Familyname") &"'")
set rs = objConn.execute("select @@identity as thisID")
ID1 = rs("thisID")
objConn.execute("Insert into ArrivalDetails(ParticipantID, ArrivalDate, ArrivalMonth) values("& ID1 &",'" & Request.Form("ArrivalDate") & "', '" & Request.Form("ArrivalMonth") &"'")
objConn.execute("Insert into DepartureDetails(ParticipantID, DepartureDate, DepartureMonth) values("& ID1 &",'" & Request.Form("DepartureDate") & "', '" & Request.Form("DepartureMonth") &"'")

giver mig nu flg. fejl:

Syntax error in INSERT INTO statement.
data.asp, line 25

Jeg kan simpelthen ikke gennemskue placeringen af ' og ". Det må være dem, det er galt med.
Avatar billede madeindk Nybegynder
21. august 2007 - 22:55 #12
<%
strSQL = "" &_
"INSERT INTO participants " &_
"(firstname, familyname) VALUES (" &_
"'" & Request.Form("Firstname") & "','" & Request.Form("Familyname") & "') "
ObjConn.Execute(strSQL


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

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

strSQL = "" &_
"INSERT INTO ArrivalDetails " &_
"(ParticipantID, DepartureDate, DepartureMonth) VALUES (" &_
"" & ID1 & ",'" & Request.Form("DepartureDate") & "','" & Request.Form("DepartureMonth") &"') "
ObjConn.Execute(strSQL)
%>
Avatar billede fennec Nybegynder
22. august 2007 - 09:41 #13
Ahh ja, der manglede også ) til sidst, som madeindk så fint så :o)

Du kan se at han har smidt ) ind efter det sidste ' tegn.

Hvis du har problemer med en SQL sætning, hjælper det altid at udskrive den til skærmen. Så ville du også havde opdaget at der manglede et ) til sidst.
Avatar billede ravnkilde Nybegynder
22. august 2007 - 14:02 #14
fennec og madeindk: Tak for jeres hjælp begge to. Det virker nu. Jeg vil gerne give points til jer begge, så madeindk må lige smide et svar.
Avatar billede madeindk Nybegynder
23. august 2007 - 22:20 #15
Her er mit svar, det var cool du fik det til at virke :)
Avatar billede ravnkilde Nybegynder
24. august 2007 - 08:44 #16
fennec får lidt flere points for sin "tålmodighed". Håber I begge er tilfredse. Tak for jeres hjælp! God weekend!
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