webForumDet fria alternativet

INSERT i två tabeller?

ASPur ASP

5 svar · 293 visningar · startad av Mattias

Medlem sedan mars 2000205 inlägg
Frågan#1

Skall lägga in värden från ett antal formulärfält i en databas med två olika tabeller ihopkopplade med fältet "StugID". Får dock inte koden att fungera och undrar därför om ni snabbt kan kolla över den? Jag är ganska ny på ASP, så frågan är säkert trivial för merparten.

<%
StugID = Request.Form("StugID")
omrade= Request.Form("omrade")
kategori =  Request.Form("kategori")
rum = Request.Form("rum")
	  
xbaddar = Request.Form("xbaddar")
pris_ls = Request.Form("pris_ls")
pris_ms = Request.Form("pris_ms")

Set Connection = Server.CreateObject("ADODB.Connection")
cnpath="DBQ=" & server.mappath("\mapp\databas.mdb")
connection.open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
 
 
SQL = "INSERT INTO TblStuginfo_1 (StugID, Område, Kategori, Rum) VALUES ('stugID', 'omrade', 'kategori', 'rum')"

Connection.Execute(SQL)
	
SQL2 = "INSERT INTO TblStuginfo_2 (StugID, Extra bäddar, Pris Lågsäsong) VALUES ('StugID', 'xbaddar', 'pris_ls')"

Connection.Execute(SQL2)

Connection.Close
%>

Jag får följande felmeddelande:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/test/add.asp, line 53

Rad 53 är den första "Connection.Execute(SQL)"-raden.

Tacksam för svar!

// Mattias

Medlem sedan juni 200032 969 inlägg
#2

enligt din kod försöker du stoppa in ordet StugID i kolumnen StugID, osv. det är inte helt rätt.

nu vet jag inte vad du har för typer på dina fält, men jag gissar att stugID och rum är av typen tal. Extra bäddar och Pris lågsäsong bör också vara av typen tal? Dessutom måste dessa klamras, då du har mellanslag i fältnamnen (vilket jag inte rekommenderar.)

pröva med följande så får vi se om vi kommer vidare:

SQL = "INSERT INTO TblStuginfo_1 (StugID, Område, Kategori, Rum) VALUES (" & stugID & ", '" & omrade & "', '" & kategori & "', " & rum & ")"

Connection.Execute(SQL)

SQL2 = "INSERT INTO TblStuginfo_2 (StugID, [Extra bäddar], [Pris Lågsäsong]) VALUES (" & StugID & ", " & xbaddar & ", " & pris_ls & ")"

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan dec. 200012 464 inlägg
#3

Felet beror nog på att någon av kolumnerna, t.ex stugId, är av typen tal och inte text.

Om du vill ha in värdena från ditt formulär i SQL-satsen så får du skriva


SQL = "INSERT INTO TblStuginfo_1 (StugID, Område, Kategori, Rum) VALUES (" & stugID & ",'" & omrade " &"','" & kategori & "','" & rum & "')"

Nu tog jag bort apostroferna kring stugId.

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 2000205 inlägg
#4

Tack för svaren! Jag håller på o mata in ytterligare en del fält som måste infogas från formuläret till databasen så jag kan inte svara på om det fungerar ännu. Jag tänkte dock ställa en fråga till dig @nders. Varför använder du hakparenteser på ett par av fälten i tblStuginfo_2 ("Extra bäddar" och "Pris Lågsäsong") när sådana ej används till fälten i tblStuginfo_1?

SQL2 = "INSERT INTO TblStuginfo_2 (StugID, [Extra bäddar], [Pris Lågsäsong]) VALUES (" & StugID & ", " & xbaddar & ", " & pris_ls & ")"

// Mattias

Medlem sedan juni 200032 969 inlägg
#5

Extra bäddar och Pris lågsäsong bör också vara av typen tal? dessutom måste dessa klamras, då du har mellanslag i fältnamnen

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
can i borrow your goat?
</A>

Medlem sedan mars 2000205 inlägg
#6

Jag missade att du redan förklarat anlendingen till hakparanteserna. Slarvigt av mig! Angående att det figurerar mellanslag (och åäö) i databasen så försvarar jag mig med att det inte är jag som gjort den. :)

Hur som helst så fungerar det fortfarandet inte. Här är min nuvarande kod:

<%
Set Connection = Server.CreateObject("ADODB.Connection")
cnpath="DBQ=" & server.mappath("\stugbilder\stugcentralen.mdb")
connection.open "DRIVER={Microsoft Access Driver (*.mdb)}; " & cnpath
 
SQL = "INSERT INTO tblStuginfo_1 (StugID, Område, Kategori, Rum, Bäddar, Hav, Boyta, Golf) VALUES ('" & stugID & "', '" & omrade & "', '" & kategori & "', " & rum & ", " & baddar &", " & hav & ", " & boyta & ", " & golf &")"

Connection.Execute(SQL)
	
SQL2 = "INSERT INTO tblStuginfo_2 (StugID, [Extra bäddar], [Pris Lågsäsong], [Pris Mellansäsong], [Pris Högsäsong], Kyl, Frys, Spis, Wc, Dusch, [Öppen spis], TV, Restaurang, Affär, Cykel, Husdjur, Kaffebryggare, Tvättmaskin, Diskmaskin, Grill, Bastu, [Avstånd Centrum], Övrigt, Engelska)) VALUES ('" & StugID & "', " & xbaddar & ", " & pris_ls & ", " & pris_ms &", " & pris_hs & ", " '& kyl & "', '" & frys & "', '" & spis & "', '" & wc & "', '" & dusch & "', '" & oppenspis & "', '" & tv & "', " & rest & ", " & affar & ", '" & cykel & "', '" & husdjur & "', '" & kaffe & "', '" & tvatt & "', '" & disk & "', '" & grill & "', '" & bastu & "', " & centrum & ", '" & ovrigt & "', '" & engelska &"')"	

Connection.Execute(SQL2)
	
Connection.Close
%>

Jag får följande felmeddelande:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] You cannot add or change a record because a related record is required in table 'tblStuginfo_2'.
/test/add.asp, line 51

Beträffande fältet "stugID" som binder ihop de båda tabellerna i databasen, så är de faktikst inte "tal" utan av typen "X-123". Därför har jag lagt till apostrofer vid dessa fält. Rad 51 är fortfarande "Connection.Execute(SQL)". Jag undrar förresten oxå om det är rätt att hämta upp ALLA fältnamn från forumlärsidan genom:

stugID = Request.Form("stugID")

Antar alltså att man inte behöver tänka på apostrofer här, lr?

// Mattias

148 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)