Hejsan Jag kan inte se något fel på din fråga, felet måste ligga nån annanstans i din kod. Kanske det inte är rätt värde i dina variabler? <form method=post action="resultatsokning.asp"> LIKE är nog bättre att söka med. Men du har bytt från OR till AND såg jag, kanske sökningen bara genererar en träff då? Skippa mellanslagen. Det är det som strula upp sökningen: ok nu har jag följande string: Testa med: Hej Jag glömde den första And. Den ska inte var med. Hej igen :-) Jobbig mäniska. ;o) Ja jag vet att jag är jobbig :-S sorry !!! Funkar datepart i access ?? isf: är inte namnet på variablen strfodelsedatum och inte fodelsedatum. Som nämnts är det att jag glömt str i variabelnamnet. ok nu funkar det om man skriver in 1784... MEN (he he) skriv ut sql strängen så att vi får se hur den ser ut <code> Hejsan jag fösöker igen... :-) Felet var att jag inte slog samman tidigare vikor. Testa med:Vad är det för fel på den här sökstränge
Skulle vilja att någon hjälper mig...
Jag håller på och lägger in min släktforskning i en databas (access) och
användare skall via en enkel sökformulär kunna söka på förnamn, efternamn och födelseårtal.
Vad är det för fel på den här söksträngen?
Den funkar inte. Jag får inget felmeddelande utan jag får bara upp: "du fick inga träffar... " fast jag sökte på Anders och jag har 2 st i db som heter Anders.....
SQL = "SELECT * FROM tabellen WHERE fnamn = ' " & strfnamn & " ' OR enamn = ' " & strenamn & " ' OR fodelsedatum = ' " & strfodelsedatum & " ' order by fnamn desc"
//NinaSv: Vad är det för fel på den här söksträ
Sv: Vad är det för fel på den här söksträ
<table border=0>
<tr><td>Sök på förnamn<br>
<input type=text name=fnamn size=15>
</td>
<td>Sök på efternamn<br>
<input type=text name=enamn size=15>
</td>
<td>Sök på födelsedatum<br>
<input type=text name=fodelsedatum size=15>
</td>
</tr>
</table>
<input type=submit value="Visa">
</form>
--------------------------------------------------------------------------------
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\Inetpub\wwwroot\snowcat\forskning.mdb"
Dim strfnamn, strenamn, strfodelsedatum
strfnamn = Request.Form("fnamn")
strenamn = Request.Form("enamn")
strfodelsedatum = Request.Form("fodelsedatum")
SQL = "SELECT * FROM tabellen WHERE fnamn = ' " & strfnamn & " ' OR enamn = ' " & strenamn & " ' OR fodelsedatum = ' " & strfodelsedatum & " ' order by fnamn desc"
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open SQL, Connect
If RecSet.EOF then %>
<Table border=0 cellspacing=2 width=300>
<tr><td colspan=2>Du sökte på: <p></td></tr>
<tr><td>Förnamn:</td> <td><% =strfnamn%></td></tr>
<tr><td>Efternamn: </td> <td><% =strenamn%></td></tr>
<tr><td>Födelsedatum: </td> <td><% =strfodelsedatum%></td></tr>
</table><p>
och fick inga träffar... <br>
Du får försöka med några andra söksträngar.<p>
<% Else %>
<Table border=0 cellspacing=2>
<tr><td colspan=2>Du sökte på: </td></tr>
<tr><td>Förnamn:</td> <td><% =strfnamn%></td></tr>
<tr><td>Efternamn: </td> <td><% =strenamn%></td></tr>
<tr><td>Födelsedatum: </td> <td><% =strfodelsedatum%></td></tr>
</table>
och fick följande träffar... <p>
<% Do While Not RecSet.EOF %>
<table border=0 width="550">
<TR><TD ID=dd COLSPAN=4 valign="top"><B>Förnamn:</B></TD> <TD ID=dd valign="top" COLSPAN=3 ><%=RecSet("fnamn")%> </TD></TR>
<TR><TD ID=dd COLSPAN=4 valign="top"><B>Efternamn:</B> </TD> <TD ID=dd valign="top" COLSPAN=3 ><%=RecSet("enamn")%> </TD></TR>
--------------------------------------------------------------------------------
Testade sedan med den här:
SQL = "SELECT * FROM tabellen WHERE fnamn like '%"&strfnamn&"%' AND enamn like '%"&strenamn&"%' AND fodelsedatum LIKE '%"&strfodelsedatum&"%' order by enamn desc"
och den funkar men jag får då bara upp en Anders fast jag har 2 st Anders i databasen....????Sv: Vad är det för fel på den här söksträ
Sv: Vad är det för fel på den här söksträ
SQL = "SELECT * FROM tabellen WHERE fnamn = '" & strfnamn & "' OR enamn = '" & strenamn & "' OR fodelsedatum = '" & strfodelsedatum & "' order by fnamn desc"Sv: Vad är det för fel på den här söksträ
SQL = "SELECT * FROM tabellen WHERE fnamn = '"&strfnamn&"' OR enamn = '"&strenamn&"' OR fodelsedatum = '"&strfodelsedatum&"' order by fnamn desc"
och den funkar bra FAST INTE födelsedatumet. Det kan ju vara att de bara skriver in tex. 1795 och då får jag ingen träff. I databasen ligger det 1795-01-25. Skriver jag in hela det så funkar det, men det är ju inte säker att de vet hela... bara året.... Har försökt med:
fodelsedatum LIKE '%"&strfodelsedatum&"%' med % alltså men det funkar inte heller....
OCH en sak till: skriver jag in tex Anders Johansson får jag Ander Johansson och även Anders Bengtsson.....Sv: Vad är det för fel på den här söksträ
<code>
<%
Dim strSQL
Dim strWhere
If Len(strfnamn) > 0 Then
strWhere = "AND fnamn = '" & strfnamn & "'"
End If
If Len(strenamn) > 0 Then
strWhere = "AND enamn = '" & strenamn & "'"
End If
If Len(strfodelsedatum) > 0 Then
strWhere = "AND (fodelsedatum >= #" & fodelsedatum & "-01-01# AND fodelsedatum < #" & fodelsedatum + 1 & "-01-01#)"
End If
If Len(strWhere) Then
strSQL = "SELECT * FROM tabellen WHERE " & strWhere & " ORDER BY fnamn DESC"
Else
strSQL = "SELECT * FROM tabellen ORDER BY fnamn DESC"
End If
%>
</code>Sv: Vad är det för fel på den här söksträ
Testade det du skrev och fick följande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'AND (fodelsedatum >= #-01-01# AND fodelsedatum < #1-01-01#)'.
/resultatsokning.asp, line 50
På line 50 står det: RecSet.Open strSQL, Connect
-----------------------------------------------------------------------------
om jag istället på line 50 har: RecSet.Open SQL, Connect
så får jag följande felmeddelande:
ADODB.Recordset error '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
/resultatsokning.asp, line 50 Sv: Vad är det för fel på den här söksträ
Testa med:
<code>
<%
Dim strSQL
Dim strWhere
If Len(strfnamn) > 0 Then
strWhere = "AND fnamn = '" & strfnamn & "'"
End If
If Len(strenamn) > 0 Then
strWhere = "AND enamn = '" & strenamn & "'"
End If
If Len(strfodelsedatum) > 0 Then
strWhere = "AND (fodelsedatum >= #" & fodelsedatum & "-01-01# AND fodelsedatum < #" & fodelsedatum + 1 & "-01-01#)"
End If
If Len(strWhere) Then
strSQL = "SELECT * FROM tabellen WHERE " & Mid(strWhere, 5) & " ORDER BY fnamn DESC"
Else
strSQL = "SELECT * FROM tabellen ORDER BY fnamn DESC"
End If
%>
</code>Sv: Vad är det för fel på den här söksträ
Om man skriver in datum 1795 funkar det men om man skriver in 1795-01-25 så får jag följande:
----------------------------------------------------
Microsoft VBScript runtime error '800a000d'
Type mismatch: '[string: "1795-01-25"]'
----------------------------------------------------
Om man sedan söker på tex Nina Jönsson 1795 så får jag
Berta Hansson 1795.......
//NinaSv: Vad är det för fel på den här söksträ
Testa med:
<code>
<%
Dim strSQL
Dim strWhere
If Len(strfnamn) > 0 Then
strWhere = "AND fnamn = '" & strfnamn & "'"
End If
If Len(strenamn) > 0 Then
strWhere = "AND enamn = '" & strenamn & "'"
End If
If Len(strfodelsedatum) > 0 Then
If IsNumeric(strfodelsedatum) Then
strWhere = "AND (fodelsedatum >= #" & fodelsedatum & "-01-01# AND fodelsedatum < #" & fodelsedatum + 1 & "-01-01#)"
ElseIf IsDate(strfodelsedatum) Then
strWhere = "AND fodelsedatum = #" & fodelsedatum & "#"
End If
End If
If Len(strWhere) Then
strSQL = "SELECT * FROM tabellen WHERE " & Mid(strWhere, 5) & " ORDER BY fnamn DESC"
Else
strSQL = "SELECT * FROM tabellen ORDER BY fnamn DESC"
End If
%
</code>Sv: Vad är det för fel på den här söksträ
Men det funkar inte och jag ger snart upp
Provade din kod och fick:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in date in query expression '(fodelsedatum >= #-01-01# AND fodelsedatum < #1-01-01#)'. Sv: Vad är det för fel på den här söksträ
"where Datapart(year, fodelse) = " & yearSv: Vad är det för fel på den här söksträ
strWhere = "AND (fodelsedatum >= #" & strfodelsedatum & "-01-01# AND fodelsedatum < #" & strfodelsedatum + 1 & "-01-01#)"
skall det nog vara.
//Putte
Sv: Vad är det för fel på den här söksträ
Försök med:
<code>
<%
Dim strSQL
Dim strWhere
If Len(strfnamn) > 0 Then
strWhere = "AND fnamn = '" & strfnamn & "'"
End If
If Len(strenamn) > 0 Then
strWhere = "AND enamn = '" & strenamn & "'"
End If
If Len(strfodelsedatum) > 0 Then
If IsNumeric(strfodelsedatum) Then
strWhere = "AND (fodelsedatum >= #" & strfodelsedatum & "-01-01# AND fodelsedatum < #" & strfodelsedatum + 1 & "-01-01#)"
ElseIf IsDate(strfodelsedatum) Then
strWhere = "AND fodelsedatum = #" & strfodelsedatum & "#"
End If
End If
If Len(strWhere) Then
strSQL = "SELECT * FROM tabellen WHERE " & Mid(strWhere, 5) & " ORDER BY fnamn DESC"
Else
strSQL = "SELECT * FROM tabellen ORDER BY fnamn DESC"
End If
%>
</code>Sv: Vad är det för fel på den här söksträ
om man skriver in (förnamn) LARS (födelseår) 1784 (som inte finns i db så får jag ANNA 1784 (som finns)
Och skriver jag HANSSON 1784 så får jag ANNA 1784...
//Jobbiga NinaSv: Vad är det för fel på den här söksträ
Response.Write strSQL
//PutteSv: Vad är det för fel på den här söksträ
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)}; DBQ=D:\Inetpub\wwwroot\snowcat\forskning.mdb"
Dim strfnamn, strenamn, strfodelsedatum
strfnamn = Request.Form("fnamn")
strenamn = Request.Form("enamn")
strfodelsedatum = Request.Form("fodelsedatum")
Dim strSQL
Dim strWhere
IF strfnamn = "" and strenamn = "" and strfodelsedatum = "" then
response.write "Du måste fylla i något fält !"
end if
If Len(strfnamn) > 0 Then
strWhere = "AND fnamn = '" & strfnamn & "'"
End If
If Len(strenamn) > 0 Then
strWhere = "AND enamn = '" & strenamn & "'"
End If
If Len(strfodelsedatum) > 0 Then
If IsNumeric(strfodelsedatum) Then
strWhere = "AND (fodelsedatum >= #" & strfodelsedatum & "-01-01# AND fodelsedatum < #" & strfodelsedatum + 1 & "-01-01#)"
ElseIf IsDate(strfodelsedatum) Then
strWhere = "AND fodelsedatum = #" & strfodelsedatum & "#"
End If
End If
If Len(strWhere) Then
strSQL = "SELECT * FROM tabellen WHERE " & Mid(strWhere, 5) & " ORDER BY fnamn DESC"
Else
strSQL = "SELECT * FROM tabellen ORDER BY fnamn DESC"
End If
Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open strSQL, Connect
If RecSet.EOF then %>
<!-- #INCLUDE FILE = "sokning.asp" -->
<Table border=0 cellspacing="2">
<tr><td ID=dd colspan="2" align=left><nobr><b>Du sökte på:</b></td></tr>
<tr><td ID=dd>Förnamn:</td> <td align="left" id=a><% =strfnamn%><% =strfnamn2%> </td></tr>
<tr><td ID=dd>Efternamn:</td> <td id=a><% =strenamn%> </td></tr>
<tr><td ID=dd>Födelsedatum:</td> <td id="a"><% =strfodelsedatum%> </td></tr>
<tr><td ID=dd colspan="2"> <b>och fick inga träffar...</b><br> Du får försöka med några andra söksträngar.</td></tr>
</table>
<% Else %>
<!-- #INCLUDE FILE = "sokning.asp" -->
<% Do While Not RecSet.EOF %>
<table border=0 width="500">
<TR><TD width="70" ID=dd valign="top" align="left" ><B>Förnamn:</B></TD> <TD ID=dd valign="top" align="left" COLSPAN="3"><%=RecSet("fnamn")%> <%=RecSet("fnamn2")%> </TD></TR>
<TR><TD ID=dd valign="top" align="left" ><B>Efternamn:</B> </TD> <TD ID=dd valign="top" align="left" COLSPAN="3"><%=RecSet("enamn")%>  </TD></TR>
<TR><TD ID=dd valign="top" align="left" ><B>Yrke:</B></TD> <TD ID=dd valign="top" align="left" COLSPAN="3"><%=RecSet("yrke")%>  </TD></TR>
<TR><TD HEIGHT=20 COLSPAN="4"> </TD></TR>
osv
osv
<% RecSet.MoveNext
Loop
End if
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
%>
testa här:
http://snowcat.no-ip.info/sokning.aspSv: Vad är det för fel på den här söksträ
Jag har ändrat en hel massa i koden. Nu ser den ut så här.
Det som inte funkar är att man kan inte söka på tex ANNA och 1897.
Då får man även CARL 1897.
Och söker man på efternamn= ADOLFSDOTTER och datum=1807 så får
jag även träff på CARLSSON 1807.
Alla andra sökvarianter går bra.
<code>
If strfnamn = "" and strenamn = "" then
strSQL = "SELECT * FROM tabellen WHERE fodelsedatum LIKE '"&strfodelsedatum&"' order by enamn desc"
elseIf strenamn = "" and strfodelsedatum = "" then
strSQL = "SELECT * FROM tabellen WHERE fnamn = '"&strfnamn&"' order by enamn desc"
elseIf strfodelsedatum = "" and strfnamn = "" then
strSQL = "SELECT * FROM tabellen WHERE enamn = '"&strenamn&"' order by enamn desc"
elseIf strenamn = "" then
strSQL = "SELECT * FROM tabellen WHERE fnamn = '"&strfnamn&"' AND fodelsedatum = '"&strfodelsedatum&"' order by enamn desc"
elseIf strfodelsedatum = "" then
strSQL = "SELECT * FROM tabellen WHERE fnamn = '"&strfnamn&"' AND enamn = '"&strenamn&"' order by enamn desc"
elseIf strfnamn = "" then
strSQL = "SELECT * FROM tabellen WHERE enamn = '"&strenamn&"' AND fodelsedatum = '"&strfodelsedatum&"' order by enamn desc"
else
strSQL = "SELECT * FROM tabellen WHERE fnamn = '"&strfnamn&"' AND enamn = '"&strenamn&"' AND fodelsedatum = '"&strfodelsedatum&"' order by enamn desc"
end if
If Len(strfodelsedatum) > 0 Then
If IsNumeric(strfodelsedatum) Then
strWhere = "AND (fodelsedatum >= #" &strfodelsedatum& "-01-01# AND fodelsedatum < #" &strfodelsedatum + 1 & "-01-01#)"
ElseIf IsDate(strfodelsedatum) Then
strWhere = "AND fodelsedatum = #" &strfodelsedatum& "#"
End If
End If
If Len(strWhere) Then
strSQL = "SELECT * FROM tabellen WHERE " & Mid(strWhere, 5) & " ORDER BY enamn asc"
End If
</code>Sv: Vad är det för fel på den här söksträ
<code>
<%
Dim strSQL
Dim strWhere
If Len(strfnamn) > 0 Then
strWhere = strWhere & " AND fnamn = '" & strfnamn & "'"
End If
If Len(strenamn) > 0 Then
strWhere = strWhere & " AND enamn = '" & strenamn & "'"
End If
If Len(strfodelsedatum) > 0 Then
If IsNumeric(strfodelsedatum) Then
strWhere = strWhere & " AND (fodelsedatum >= #" & strfodelsedatum & "-01-01# AND fodelsedatum < #" & strfodelsedatum + 1 & "-01-01#)"
ElseIf IsDate(strfodelsedatum) Then
strWhere = strWhere & " AND fodelsedatum = #" & strfodelsedatum & "#"
End If
End If
If Len(strWhere) Then
strSQL = "SELECT * FROM tabellen WHERE " & Mid(strWhere, 5) & " ORDER BY fnamn DESC"
Else
strSQL = "SELECT * FROM tabellen ORDER BY fnamn DESC"
End If
%>
</code>