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
11 svar · 382 visningar · startad av Galifante
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
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
Vilken datatyp har kolumnen Antal_Platser ? Den borde vara numerisk.
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... :(
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).
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.
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.
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>
<%=rs("Antal_platser")%>
</TD>
</TR>
<TR>
<TD>
<B>Rum</B>
<A HREF="ruminfo.asp?RumID=<%=rs("RumID")%>"><%=rs("RumNamn")%></A>
</TD>
</TR>
<%
rs.Close
MinCon.Close
Set rs = nothing
Set MinCon = nothing
%>
</TABLE>
Byt ut
sSQL="SELECT * FROM rum WHERE Antal_Platser >= " & request.form("platsantal")
mot
sSQL="SELECT * FROM rum WHERE Antal_Platser >= " & int(request.form("platsantal"))
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(
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?
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.
Så Tusen tack LarsG, Ekström & Eitraz !!! :bire :)