webForumDet fria alternativet

Problem med Access databaskoppling

ASP

14 svar · 946 visningar · startad av lbs129

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

Hej!

Jag har problem med min Access databaskoppling i ASP. Jag får följande felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/af/index.asp, line 54

Jag är nybörjare på ASP, men har provat allt jag kommer på. Så här ser koden för databaskopplingen ut:

	<%
		Set Connect = Server.CreateObject("ADODB.Connection") 
		Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")
		Set RecSet = Server.CreateObject("ADODB.Recordset")
		
		SQL = "SELECT * FROM sidor WHERE namn = " & Request.Querystring("sida")
		RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic
	%>

Mvh Johan

Medlem sedan sep. 2003448 inlägg
#2

Testa att ändra:

WHERE namn = " & Request.Querystring("sida")

till

WHERE namn = ' " & Request.Querystring("sida") &" ' "
Medlem sedan okt. 20041 556 inlägg
#3

...testa (inte) det här:
WHERE namn = ' " & Request.Querystring("sida") &" '; DROP TABLE sidor"

Medlem sedan dec. 20014 239 inlägg
#4

Och så ser du till att säkra upp din kod.
Sök efter SQL-injections så förstår du vad jag menar.

Så till sist. Välkommen till wF

Medlem sedan juni 200032 967 inlägg
#5

... och ha absolut inte mellanslag mellan apostrofer och citationstecken.

Medlem sedan apr. 200899 inlägg
#6

Melitta skrev:

Testa att ändra:

WHERE namn = " & Request.Querystring("sida")

till

WHERE namn = ' " & Request.Querystring("sida") &" ' "

Tack!

Det löste ett problem! Men nu har jag istället fått ett annat!

Jag får detta felmeddelande:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/af/index.asp, line 0

Mvh Johan

Medlem sedan juni 200032 967 inlägg
#7

Då får du ingen träff med SQL-frågan.

Medlem sedan apr. 200899 inlägg
#8

@nders skrev:

Då får du ingen träff med SQL-frågan.

Jo, det har jag förstått, men jag förstår inte varför?

Jag kan lägga upp en länk till databasen så att ni kan kolla om det är något fel. Sidan är helt ny så den innehåller nästan ingen information.

http://www12.asphost4free.com/lbs129/databas.mdb

Detta är den databaskopplingen jag använder:

	<%
		Set Connect = Server.CreateObject("ADODB.Connection") 
		Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")
		Set RecSet = Server.CreateObject("ADODB.Recordset")
		
		SQL = "SELECT * FROM sidor WHERE namn = ' " & Request.Querystring("sida") &" ' "
		RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic
	%>

Mvh Johan

Medlem sedan juni 20006 022 inlägg
#9

Vad har "sida" för värde? Finns det värdet i databasen?

Medlem sedan apr. 200899 inlägg
#10

Quid skrev:

Vad har "sida" för värde? Finns det värdet i databasen?

Sida har värdet start.

index.asp?sida=start

Mvh Johan

Medlem sedan juni 200032 967 inlägg
#11

Missade du mitt inlägg ovan? Eller har du verkligen mellanslag runt värdena i fältet namn?

@nders skrev:

... och ha absolut inte mellanslag mellan apostrofer och citationstecken.

Medlem sedan apr. 200899 inlägg
#12

@nders skrev:

Missade du mitt inlägg ovan? Eller har du verkligen mellanslag runt värdena i fältet namn?

Tack! Nu fungerar det! :D

Medlem sedan apr. 200899 inlägg
#13

Zaiman skrev:

Och så ser du till att säkra upp din kod.
Sök efter SQL-injections så förstår du vad jag menar.

Så till sist. Välkommen till wF

Nu förstår jag vad det innebär, men jag vet inte vad man ska göra åt det! Kan någon ge mig ett tips?

Medlem sedan feb. 200112 078 inlägg
#14

lbs129 skrev:

Nu förstår jag vad det innebär, men jag vet inte vad man ska göra åt det! Kan någon ge mig ett tips?

När det gäller querystrings som är tal så skall du *alltid* använda en talkonvertering på dem;

.. WHERE id = " & clng(request("id")) & " AND ..

Vid strängar skall du först och främst ersätta enkla apostrofer ( ' ) med dubbla;

.. WHERE name = '" & sqlsafestr(request("name")) & "' AND ..
function sqlsafestr(str)
   sqlsafestr = replace(str, "'","''")
end function
Medlem sedan apr. 200899 inlägg
#15

OveRRidE skrev:

När det gäller querystrings som är tal så skall du *alltid* använda en talkonvertering på dem;

.. WHERE id = " & clng(request("id")) & " AND ..

Vid strängar skall du först och främst ersätta enkla apostrofer ( ' ) med dubbla;

.. WHERE name = '" & sqlsafestr(request("name")) & "' AND ..
function sqlsafestr(str)
   sqlsafestr = replace(str, "'","''")
end function

Tack! Jag ska titta på det om jag får tid!

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