webForumDet fria alternativet

Problem med att lägga till i Datbas!

ASP

30 svar · 776 visningar · startad av Coccozz

Medlem sedan apr. 20032 072 inlägg
Frågan#1

Hej!
Jag har lite problem med en sak jag sitter och filar på.
Det är nämligen såhär. Jag håller på att fixa till ett gammalt adminscript till en sida där jag visar vad som går på bio. För att lägga till alla de här filmerna känns det dock lite värdelöst att sitta och lägga in samma filmer femton gånger (efetrsom den visas just femton gånger). Istället har jag löst det så att man i ett fält väljer antal visningar och sedan bara fyller i vecka, dag och tid femton gånger. Titel, beskrivning, bild och pris behöver bara fyllas i en gång.
För exempel: http://81.230.36.24/bio/admin_copy(1).asp
Egen server, uppe temporärt. Skall försöka hitta annan plats inom det snaraste ;)
Problemet är som följer. Jag har inte en aning om hur jag skall få detta att fungera när jag skall lägga in det i databasen. Dagens kodsnutt ser ut såhär:

If Request.QueryString("do") = "add" Then

	titel	= Request.Form("titel")
	text	= Request.Form("text")
	vecka	= Request.Form("vecka")
	dag		= Request.Form("dag")
	bild	= Request.Form("bild")
	starttid= Request.Form("tid")
	pris	= Request.Form("pris")
	
'	SQL = "Insert Into bio(titel) Values('" & titel & "')"

	SQL = "Insert Into bio(titel, [text], vecka, dag, bild, starttid, pris) Values('" & titel & "', '" & text & "',"_
		& vecka & ", " & dag & ", '" & bild & "', '" & starttid &"', '" & pris & "')"
		
	Con.Execute(SQL)
	
	Session("mess") = "Händelsen är nu inlagd i databasen"
	Con.Close
	Set Con = nothing
	
	Response.Redirect "admin.asp"
End If

Denna snutten är dock från tiden innan jag gjorde om så att man inte behövde skriva om allt igen. Därför ber jag er hjälpa mig rätta till den så den funkar med exemplet jag bifogade.
Tack//

Medlem sedan juni 2004533 inlägg
#2

Loopa igenom raderna och hämta ut veckan för varje med Request.Form("vecka" & rad) och dagen med Request.Form("dag" & rad).

Medlem sedan apr. 20032 072 inlägg
#3

Det kommer inte att fungera att bara göra så. Jag ber om ursäkt om jag var otydlig men vad jag behöver är att sätta in allt i databas en gång per "visning". Alltså, väljer jag femton visningar (se exemplet inlägg #1) så måste jag lägga til först:
vecka1, dag1, tid1, titel, text, bild, pris
sedan:
vecka2, dag2, tid2, titel, text, bild, pris
osv till vecka 15, dag15 osv. är insatta i dbn...

Medlem sedan juni 200032 967 inlägg
#4

Vad är då problemet med Guffas förslag?
Precis så förstår jag det också...

Medlem sedan apr. 20032 072 inlägg
#5

Problemet kallas tankefel :r
Anyhow, nu har jag loopat runt lite men har nog gjort något gravt fel. Allting fungerar toppen, får inga felmeddelanden men den lägger inte till i databasen :q. Titta i exemplet i inlägg #1.
Koden ser ut:

<%
valtantal = request.form("antal")

Set Con = Server.CreateObject("ADODB.Connection") 
	Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db/bio.mdb")&";"

If Request.QueryString("do") = "add" Then
	addloop=1
	do until addloop = valtantal +1

	titel	= Request.Form("titel")
	text	= Request.Form("text")
	vecka	= Request.Form("vecka'&=intloop&'")
	dag	= Request.Form("dag'&=intloop&'")
	bild	= Request.Form("bild'&=intloop&'")
	starttid= Request.Form("tid")
	pris	= Request.Form("pris")
	
'	SQL = "Insert Into bio(titel) Values('" & titel & "')"

	SQL = "Insert Into bio(titel, [text], vecka, dag, bild, starttid, pris) Values('" & titel & "', '" & text & "',"_
		& vecka & ", " & dag & ", '" & bild & "', '" & starttid &"', '" & pris & "')"
		
	Con.Execute(SQL)

	addloop = addloop+1
	loop
	
	Con.Close
	Set Con = nothing

	Session("mess") = "Händelsen är nu inlagd i databasen"
	
	Response.Redirect "admin_copy(1).asp"
End If
%>
Medlem sedan juni 200032 967 inlägg
#6
valtantal = Cint(request.form("antal"))
  1. Gör testutskrifter. Till exempel, innehåller valtantal det du förväntar dig?
  2. Skriv ut SQL-frågorna och se om de ser ok ut.
  3. Blir du redirectad?
  4. Fundera också på att byta till OLEDB-drivern. http://www.connectionstrings.com/
Medlem sedan apr. 20032 072 inlägg
#7

Jaha, numera ser det ut som följer:

<%
valtantal = Cint(request.querystring("antal"))

' Kopplingen till databasen
	Set Conn = Server.CreateObject("ADODB.Connection")
	Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/bio.mdb")

If Request.QueryString("do") = "add" Then
	addloop=1
	do until addloop = valtantal +1

	titel	= Request.Form("titel")
	text	= Request.Form("text")
	vecka	= Request.Form("vecka'&=intloop&'")
	dag		= Request.Form("dag'&=intloop&'")
	bild	= Request.Form("bild'&=intloop&'")
	starttid= Request.Form("tid")
	pris	= Request.Form("pris")
	
'	SQL = "Insert Into bio(titel) Values('" & titel & "')"

	SQL = "Insert Into bio(titel, [text], vecka, dag, bild, starttid, pris) Values('" & titel & "', '" & text & "',"_
		& vecka & ", " & dag & ", '" & bild & "', '" & starttid &"', '" & pris & "')"
	
	Con.Execute(SQL)
	
	Con.Close
	Set Con = nothing

	addloop = addloop+1
	loop

	Session("mess") = "Händelsen är nu inlagd i databasen"
	
	Response.Redirect "admin_copy(1).asp"
End If
%>

Jag redirectas precis som jag skall, SQLfrågorna ser fina ut, de innehåller den informationen som jag vill att de skall...
Drivern är bytt till OLEDB... Valtantal fixad så den ger precis rätt.
WTF är fel. Ingenting landar i databasen ju =(.

Medlem sedan jan. 2003438 inlägg
#8

Som jag ser det är det ett litet skriv fel.

	Con.Execute(SQL)
	
	Con.Close
	Set Con = nothing

Skall ändra till:

	Conn.Execute(SQL)
	
	Conn.Close
	Set Conn = nothing

Blir det sedan fortsatt fel så koppla bort redirect och skriv ut sql med Respone.Write för att se där finns några fel.

Medlem sedan juni 200032 967 inlägg
#9

Konstigt att du inte får några felmeddelanden. Du har inte on error resume next i koden?
Du kan inte stänga connectionobjektet i loopen heller. Lägg utanför, tillsammans med redirect.

Medlem sedan apr. 20032 072 inlägg
#10

Inget on error resume next i den här koden inte.
Däremot får jag felmeddelande när jag lägger alla connectionobjekten utanför loopen.
Meddelandet lyder:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A01A8)
Objekt krävs.: 'Con'
/bio/admin_copy(1).asp, line 42

Line 42 ligger i den här biten:

	addloop = addloop+1
	loop
	
	Conn.Execute(SQL)
	
	Conn.Close
	Set Conn = nothing

Vad är det som är fel med det här?

Medlem sedan juni 2004533 inlägg
#11

Ändra Con till Conn, som SannyW visade.

Du har inget värde i Request.Form("antal") eller Request.Querystring("antal"). Fältet "antal" ligger inte i det formulär du postar, så det värdet får du aldrig med, och du lägger inte in någon querystring som heter antal.

Medlem sedan apr. 20032 072 inlägg
#12

Missade visst SannyWs inlägg helt :r
Jo, det har jag visst. Jag skriver ut värdet <%=valtantal%> i koden och får beroende på valt antal i formulärfältet "antal" ett tal mellan 1-15 ;). Så den biten stämmer.
Jag ändrade som SannyW skrev och får numera:

Feltyp:
Microsoft JET Database Engine (0x80040E0C)
Det angavs inte någon kommandotext för kommandoobjektet.
/bio/admin_copy(1).asp, line 42

Kodsnutten med Line42 i ligger i mitt tidigare inlägg...

Medlem sedan juni 200032 967 inlägg
#13

Det tyder på att du angett fel namn på variabeln som innehåller SQL-frågan. Dubbelkolla.

Medlem sedan apr. 20032 072 inlägg
#14

Variabelnamnen seems to be allright. ?do=add står det på bägge två så det känns rätt reko...
Vad sjutton har jag missat :q

Medlem sedan juni 200032 967 inlägg
#15

Visa koden fram till c:a rad 45.

mvh

Medlem sedan apr. 20032 072 inlägg
#16

Here we go then:

<%
intantaltider=15
valtantal = Cint(request.querystring("antal"))

' Kopplingen till databasen
	Set Conn = Server.CreateObject("ADODB.Connection")
	Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/bio.mdb")

If Request.QueryString("delete") <> "" Then
	SQL = "Delete From bio Where id = " & Request.QueryString("delete")
	Con.Execute(SQL)
	Response.Redirect "admin.asp"
End If

If Request.QueryString("do") = "add" Then
	addloop=1
	do until addloop = valtantal +1

	titel	= Request.Form("titel")
	text	= Request.Form("text")
	vecka	= Request.Form("vecka'&=intloop&'")
	dag		= Request.Form("dag'&=intloop&'")
	bild	= Request.Form("bild'&=intloop&'")
	starttid= Request.Form("tid")
	pris	= Request.Form("pris")
	
'	SQL = "Insert Into bio(titel) Values('" & titel & "')"

	SQL = "Insert Into bio(titel, [text], vecka, dag, bild, starttid, pris) Values('" & titel & "', '" & text & "',"_
		& vecka & ", " & dag & ", '" & bild & "', '" & starttid &"', '" & pris & "')"
	
	addloop = addloop+1
	loop
	
	Conn.Execute(SQL)
	
	Conn.Close
	Set Conn = nothing
	
	Session("mess") = "Händelsen är nu inlagd i databasen"
	
	Response.Redirect "admin_copy(1).asp"
	
	End If
	%>
Medlem sedan juni 200032 967 inlägg
#17
  1. byt:
	vecka	= Request.Form("vecka'&=intloop&'")
	dag		= Request.Form("dag'&=intloop&'")
	bild	= Request.Form("bild'&=intloop&'")

till:

	vecka	= Request.Form("vecka" & intloop)
	dag	= Request.Form("dag" & intloop)
	bild	= Request.Form("bild" & intloop)
  1. lägg in exekvering av SQL-frågan i loopen, annars körs ju bara den sista.

Delete-delen kommer inte heller fungera, du har fortfarande fel namn på connectionobjektet där.

Mv

Medlem sedan apr. 20032 072 inlägg
#18

Kod byt och slutet på loopen ser nu ut såhär:

	Conn.Execute(SQL)
	
	addloop = addloop+1
	loop

Lik förbannat envisas det med att inte lägga till något och ändå inte visa felmeddelande... Jag fattar absolut ingenting längre.
R// Deletegrejjen fixad

Medlem sedan juni 200032 967 inlägg
#19

Och utskriften av alla SQL-frågor ser OK ut?

Medlem sedan apr. 20032 072 inlägg
#20

Nu funkar ingenting? Har tagit bort response.redirect satsen men fortfarande redirectas jag efter att jag har skickat in formuläret? Även prövat att uppdatera med CTRL + F5.
Nu går jag och lägger mig. Orkar inte med...

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)