webForumDet fria alternativet

Data type mismatch in criteria expression.

ASPur ASP

11 svar · 382 visningar · startad av Galifante

Medlem sedan sep. 200246 inlägg
Frågan#1

Hejsan!

Försöker hämta ett värde från ett formulär på sid 1 som ska jämföras med ett tal från databasen på sid 2. Jag vill att allt som motsvarar sökvärdet och/eller är större än detta tal ska visas.

Talet som ska jämföras kommer som sträng och måste alltså konverteras till tal först.

Så här ser min icke-fungerade kod ut:

dim platser
platser = Request.Form("platsantal")
platsantal=cInt(platser)

sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & platsantal

Felmeddelandet jag får är Data type mismatch in criteria expression. och pekar på SQL-koden.

Har aldrig använt CInt förrut så jag är inte säker på hur man gör. Lite tips på det skulle säkert också förbättra mitt humör... :e

/Galifante :q

Medlem sedan sep. 2002366 inlägg
#2

Du kan kontrollera om platser är ett nummer med IsNumeric.
Blir väll nåt sånt här då

If NOT IsNumeric(platser) Then
platser = 0 'Eller något bra värde som "default"
End If
platserantal = CInt(platser)

-Eitraz

Medlem sedan dec. 200012 464 inlägg
#3

Vilken datatyp har kolumnen Antal_Platser ? Den borde vara numerisk.

Medlem sedan sep. 200246 inlägg
#4

Hejsan!

Jag testade detta:

dim platser
platser = Request.Form("platsantal")
If IsNumeric(platser) Then
	Response.write "Det är ett tal"
Else
	platser = CInt(platser)
End If

Iom att det skriver ut "Det är ett tal" så borde variabeln alltså vara ett tal, eller hur? :q

Men vad är det då för fel med SQL-satsen???? Jag får ju fortfarande samma scriptfel.... :x

Är lite trött idag men måste få detta klart innan kvällen... :(

Medlem sedan sep. 200246 inlägg
#5

LarsG skrev:

Vilken datatyp har kolumnen Antal_Platser ? Den borde vara numerisk.

Antal_Platser är ett tal, de övriga kolumnerna har olika datatyper (ifall att det har nån betydelse).

Medlem sedan dec. 200012 464 inlägg
#6

Ok, då är det ok.

Är det ett VB-scriptfel du får eller ett databasfel?

Kan du visa lite mer kod?

Kan du lägga till någon testutskrift?

sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & platsantal
response.write sSql

Koden med cint är inte nödvändig, men däremot så bör du ha med kontroll med isNumeric

if not isNumeric(request.form("platsAntal") then
   response.write "Ogiltigt antal, försök igen "
   response.redirect ...
end if
sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & request.form("platsAntal")

Det som händer när du gör cint är att du konverterar värdet till ett heltal men sedan när du använder det värdet när du tilldelar sSQL så kommer värdet att konverteras tillbaka till en sträng.

Medlem sedan sep. 200246 inlägg
#7

LarsG skrev:

Är det ett VB-scriptfel du får eller ett databasfel?

Databasfel.

Microsoft JET Database Engine error '80040e07' 

Data type mismatch in criteria expression. 

/modern/studios/sok_koll.asp, line 43

Rad 43 är denna: ]rs.Open SQL, MinCon Databaskopplingen fungerar, har använt samma koppling på flera ställen, så det är inte det som är problemet...

Kan du visa lite mer kod?

Tror inte det får plats i detta inlägg så det kommer i nästa.

Kan du lägga till någon testutskrift?

Utskriften av SQL ger: ]SELECT * FROM rum WHERE Antal_Platser >= 3

if not isNumeric(request.form("platsAntal") then
   response.write "Ogiltigt antal, försök igen "
   response.redirect ...
end if
sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & request.form("platsAntal")

Testade men det ger fortfarande samma scriptfel. :( Återkommer med mer kod.

Medlem sedan sep. 200246 inlägg
#8

Koden

Här kommer koden, så som den ser ut just nu...

<%
dim platser
platser = Request.Form("platsantal")
if not isNumeric(request.form("platsAntal")) then
   response.write "Ogiltigt antal, försök igen "
   response.redirect sok.asp
end if
sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & request.form("platsantal")

Set MinCon = Server.CreateObject("ADODB.Connection")
	Set rs = Server.CreateObject("ADODB.Recordset")
	MinCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("studios.mdb")&""
	SQL = sSQL
	Response.Write SQL
	rs.Open SQL, MinCon

%>

<P>
	<TABLE>
	<TR>
	<TD>
		<B>Antal platser:</B> &nbsp;
		<%=rs("Antal_platser")%>
	</TD>
	</TR>
<TR>
	<TD>
		<B>Rum</B> &nbsp;
		<A HREF="ruminfo.asp?RumID=<%=rs("RumID")%>"><%=rs("RumNamn")%></A>
	</TD>

		</TR>

	<%
		rs.Close
		MinCon.Close
		Set rs = nothing
		Set MinCon = nothing
	%>

	</TABLE>
Medlem sedan feb. 20022 594 inlägg
#9

Byt ut

sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & request.form("platsantal")

mot

sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & int(request.form("platsantal"))
Medlem sedan sep. 200246 inlägg
#10

Ekström skrev:

Byt ut

sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & request.form("platsantal")

mot

sSQL="SELECT * FROM rum WHERE Antal_Platser >=  " & int(request.form("platsantal"))

Nope. Funkar inte..... :( :( Blir samma scriptfel i alla fall! x(

Medlem sedan dec. 200012 464 inlägg
#11

Då måste det vara något problem med kolumnen antal_platser. Är det rätt version av databasen du kopplar upp dig mot?
T.ex. att du inte har laddat upp den senaste versionen till servern?

Medlem sedan sep. 200246 inlägg
#12

Fattar inget men det funkar!

LarsG skrev:

Då måste det vara något problem med kolumnen antal_platser. Är det rätt version av databasen du kopplar upp dig mot?
T.ex. att du inte har laddat upp den senaste versionen till servern?

Hejsan! Vet du, jag har inte varit i databasen och pillat idag, men jag har haft den öppen för att dubbelkolla att kolumnnamnen var rätt. Jag testade det du sa, att skicka upp den igen (trots att jag inte ändrat nått) och helt plösligt funkar koden. :q Fattar absolut inte hur det ska ha kunnat påverka koden, men tydligen gjorde det det. Eller så var det nått annat som blivit fixat nu med era förslag.

Tusen tack LarsG, Ekström & Eitraz !!! :bire :)

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