Avatar billede mskjoldp Novice
16. december 2004 - 06:03 Der er 12 kommentarer og
1 løsning

for mange db'udtræk i søgning

Morg'n E

Hvorfor udtrækker denne søgekode, lige meget hvad jeg søger efter, alle 19 rækker i db'en?

kode:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body>
<% Response.Buffer = true %>
<html>
<head>
<title>Resultat af søgning</title>
</head>
<body BGCOLOR="#808080" TEXT="#ffffff" VLINK="#Ffffff" LINK="#Ffffff" ALINK="#06438A" leftmargin="130">





<p align="center">

<b>

<font size=6 color="#000000">Resultat af søgning</font>

</b>

<font size=2 color="#ffffff">
<br>



<%
Dim Strfritekst
Dim Strarbet
Dim Strtom
Dim Strogsimpel


strfritekst = Request.querystring("fritekst")
strarbet = Request.querystring("arbet")
strogsimpel = Request.querystring("ogsimpel")

strtom = Strfritekst + strarbet

If Len(strtom) = 0 Then

Response.Clear
Response.Redirect("default.asp")

Else

strfritekst = Replace(strfritekst,"'","''")
strarbet = Replace(strarbet,"'","''")
strsimpel = Replace(strogsimpel,"'","''")

End If



strSQL = "SELECT * FROM status"

If Len(strfritekst) > 0 THEN

strSQL = strSQL & " WHERE ((S_lokation LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_stelnr LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_enhed LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_bem LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_plan_dato LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_ind_dato LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_ud_dato LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_FCF LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_Egress LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_Vaaben LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_Dinghy LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_stel LIKE '%" & strfritekst & "%'))"
End if

If Len(strarbet) > 0 Then
If strogsimpel = "og" then
strSQL = strSQL & " AND (S_stelnr LIKE '%" & strarbet & "%')"
End if
If strogsimpel = "eller" then
strSQL = strSQL & " OR (S_stelnr LIKE '%" & strarbet & "%')"
End if
If strogsimpe = "ikke" then
strSQL = strSQL & " AND NOT (S_stelnr LIKE '%" & strarbet & "%')"
End if

End if

strSQL = strSQL & " ORDER BY S_stelnr"

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + Server.MapPath("/data/f16.mdb") + ";" )
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open strSQL, Conn, 1
If Not (rs.BOF Or rs.EOF) Then
rs.PageSize = 20
intRecCount = rs.PageSize
intPageCount = rs.PageCount
intPage = Request.querystring("page")
If isNumeric(intPage) = False Or intPage < 1 Then
count = 1
intPage = 1
else
count = ((intPage - 1) * rs.PageSize) + 1
End If
rs.AbsolutePage = intPage
AntalP = rs.RecordCount
Response.write "<p><b>Din søgning resulterede i " & AntalP & " afonds<br></b></p>"


Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p><br>"






Response.Write "<table border='5' "
Response.Write " cellPadding='0' "
Response.Write " cellSpacing='0'>"
Response.Write "<tr><th>Nr.</th><th>A-fond</th><th>Arkivbetegnelse</th></tr>"

Do While Not rs.EOF And intRecCount > 0

Response.Write "<tr><td><font face='arial' size='2'>" & count & ".</font></td>"
REsponse.write "<td><a href='fuldpost.asp?id=" & rs("StatusID") & "' target='_blank'><font face='arial' size='2'>" & rs("S_stelnr") & "</font></a></td>"
Response.Write "<td><a href='fuldpost.asp?id=" & rs("StatusID") & "' target='_blank'><font face='arial' size='2'>" & rs("S_lokation") & "</font></a></td></tr>"


intRecCount = intRecCount - 1
rs.MoveNext

count=count+1
Loop
response.write "</table>"


End if
If rs.recordcount = 0 then
Response.Write "<br><br><br><br><b><font size=3>Der er ikke fundet nogle afonds, prøv igen</b><br><br>"
%>
<p align="center"><a href="java script:history.go(-1)"><font color="#000000"><b>Tilbage</b></font></a></p>
<%
else
rs.Close
Set rs = Nothing
Dim PrevPage, NextPage
PrevPage = intPage - 1
NextPage = intPage + 1

Response.Write "<p>Gå til side "
For intNum = 1 To intPageCount

Response.Write "<a href=sog1.asp?ogsimpel=" & strogsimpel &"&fritekst=" & strfritekst & "&arbet=" & strarbet &"&page=" & intNum & ">" & intNum & "</a> "
Next
Response.Write "<p>"
If Clng(intPage) > 1 Then
Response.Write "<a href=sog1.asp?ogsimpel=" & strogsimpel &"&fritekst=" & strfritekst & "&arbet=" & strarbet &"&page=" & PrevPage & ">&lt;&lt;</a>"
Else
Response.Write "&lt;&lt;"
End If
Response.Write "&nbsp;"
If Clng(intPage) < Clng(intPageCount) Then
Response.Write "<a href=sog1.asp?ogsimpel=" & strogsimpel &"&fritekst=" & strfritekst & "&arbet=" & strarbet &"&page=" & NextPage & ">&gt;&gt;</a>"
Else
Response.Write "&gt;&gt;"
End If
End if
%>
</font>
</body></html>
Avatar billede anhansen Nybegynder
16. december 2004 - 09:06 #1
for overskuelighedens skyld kan du så ikke lave en Response.Write(strSql)  inden du lave r rs.open og så poste hvad den indeholder.

Så er det lidt nemmere at se - også med indhold af variabler osv.
Avatar billede ldanielsen Nybegynder
16. december 2004 - 11:47 #2
ja nemlig ja
Avatar billede mskjoldp Novice
17. december 2004 - 12:38 #3
Response.write (srtSQL) giver: SELECT * FROM status ORDER BY S_stelnr....
så dvs at WHERE mangler i sætningen... men lige meget hvad jeg skriver i søge formen, får jeg samme response... Hvad gør jeg galt i opbygningen af søgningen?
:/ jeg har efterhånden stirret mig blind på koden...
Avatar billede anhansen Nybegynder
17. december 2004 - 12:51 #4
Du skal jo nok huske at sætte where sætningen ind - da det er den der sætter kravene.
Avatar billede anhansen Nybegynder
17. december 2004 - 12:52 #5
Så du kunne se ud som om du ikke får gemt din søgestreng ordentligt...
Avatar billede mskjoldp Novice
17. december 2004 - 14:32 #6
WHERE sætingen burde da komme ind her:
If Len(strfritekst) > 0 THEN

strSQL = strSQL & " WHERE ((S_lokation LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_stelnr LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_enhed LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_bem LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_plan_dato LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_ind_dato LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_ud_dato LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_FCF LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_Egress LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_Vaaben LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_Dinghy LIKE '%" & strfritekst & "%')"
strSQL = strSQL & " OR (S_V_NT_stel LIKE '%" & strfritekst & "%'))"
End if


eller hvad?
Avatar billede ldanielsen Nybegynder
17. december 2004 - 22:53 #7
strfritekst = Request.querystring("fritekst")

siger du

Er der noget i Request.querystring("fritekst")?
Avatar billede mskjoldp Novice
18. december 2004 - 03:49 #8
yes.. det hjalp at anden end mig kiggede på kode.. jeg var blevet blind.. men efter Idanielsen havde givet mig synet tilbage, kunne jeg se at den 1. fejl var at:
strfritekst = Request.querystring("fritekst")
ikke var en querystring men en request.form... DOH!! hvor blind kan man være her... :/

OK, der kommer et output nu :)

nu skal det så bare tilpasses.... så der kommer lige et spg til...
Avatar billede mskjoldp Novice
18. december 2004 - 04:33 #9
Denne kode skaber, som jeg ser det, selve søge strengen... ok.. men jeg får ikke de 3 muligheder: AND, OR og NOT til at virker...

    If Len(strfritekst) > 0 THEN
        strSQL = strSQL & " WHERE ((S_lokation LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_stelnr LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_enhed LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_bem LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_plan_dato LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_ind_dato LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_ud_dato LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_FCF LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_V_NT_Egress LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_V_NT_Vaaben LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_V_NT_Dinghy LIKE '%" & strfritekst & "%')"
        strSQL = strSQL & " OR (S_V_NT_stel LIKE '%" & strfritekst & "%'))"
   
        If Len(strarbet) > 0 Then
            If strogsimpel = "og" then
            strSQL = strSQL & " AND (S_stelnr LIKE '%" & strarbet & "%')"
            End if
            If strogsimpel = "eller" then
            strSQL = strSQL & " OR (S_stelnr LIKE '%" & strarbet & "%')"
            End if
            If strogsimpe = "ikke" then
            strSQL = strSQL & " AND NOT (S_stelnr LIKE '%" & strarbet & "%')"
            End if
        End if
   
    End if

.. nogen bud
Avatar billede mskjoldp Novice
18. december 2004 - 04:47 #10
tekstsøgningen kommer herfra:
<table cellpadding="1" cellspacing="0"><tr>
<td><form action="default.asp?mode=sog" method="POST"></td>
<td><input type="text" name="fritekst" size="5"></td>
<td><input type="text" name="arbet" size="5"></td>
<td><input type="text" name="ogsimpel" size="5"></td>
<td><input type="submit" name="Action" value="Søg status"></td>
<td></form></td>
</tr></table>
Avatar billede mskjoldp Novice
18. december 2004 - 09:07 #11
jeg har nogen flere spg .. men der kommer hen af vejen som jeg finder ud af koden...

Men Idanielsen lig du bare et svar så for du points...

Skjold
Avatar billede ldanielsen Nybegynder
18. december 2004 - 11:00 #12
Tak for det.

anhansen's råd med at udskrive sqlsætningen er i vireligheden det der giver løsningen.

Ang. det næste: Du kan måske starte med at planlægge hvordan du vil have SQL'en til at se ud i de forskellige situationer. Det giver dig måske en ide til at lave koden.
Avatar billede mskjoldp Novice
19. december 2004 - 00:06 #13
tak for rådet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester