16. januar 2001 - 09:27Der er
37 kommentarer og 1 løsning
Søgemaskine til Access database
Jeg har et ASP-script, som udfører en søgning i en accessdb. Mit problem er nu, at efter jeg har sat basen op til at sætte mit søgeresultat ind i en tabel, opstår der en lille sjov ting. Det er, at der nu fremkommer et blankt område, der fylder ca. 20-30 linier før resultatet fremvises. Ydermere vises mine paging-knapper før selve resultatet vises, hvad ikke skal ske. (de skal først vises efter resultatlisten/tabellen. Response.buffer er sat til true
Den problematiske del af scriptet ser således ud:
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"test.mdb\") rs.Open strSQL, strDSN, 1 If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 20 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount
count=count+1 Loop 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 Response.Write \"<p>Gå til side \" For intNum = 1 To intPageCount
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Har du prøvet at lægge alle dine resultater fra DBog din tekst, i variable før du udskriver dem på siden, altså at du propper al tekst i variable, når du så har loop\'et færdigt udskriver dine variable...
intPage = Request(\"page\") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If Set rs = Server.CreateObject(\"ADODB.RecordSet\")
strSQL = \"SELECT * FROM afond WHERE\"
If Len(strfritekst) > 0 THEN
strSQL = strSQL & \" ((afond LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (saer LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (arbet LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (fodt LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (dod LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (sted LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (yde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (pakket LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (hylde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indsig LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (bem LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indhold LIKE \'%\" & strfritekst & \"%\'))\" End if
If Len(strarbet) > 0 Then If strogsimpel = \"og\" then strSQL = strSQL & \" AND (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpel = \"eller\" then strSQL = strSQL & \" OR (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpe = \"ikke\" then strSQL = strSQL & \" AND NOT (arbet LIKE \'%\" & strarbet & \"%\')\" End if
End if
strSQL = strSQL & \"ORDER BY afond\"
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"test.mdb\") rs.Open strSQL, strDSN, 1 If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 20 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount
count=count+1 Loop 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 Response.Write \"<p>Gå til side \" For intNum = 1 To intPageCount
Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & intNum & \">\" & intNum & \"</a> \" Next Response.Write \"<p>\" If Clng(intPage) > 1 Then Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & intPage - 1 & \"><<</a>\" Else Response.Write \"<<\" End If Response.Write \" \" If Clng(intPage) < Clng(intPageCount) Then Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & intPage + 1 & \">>></a>\" Else Response.Write \">>\" End If End if %> </font> </body></html>
Du svarede ikke på mit spg. Jeg kan se at du udskriver i dit Do While LOOP, har du prøvet at lægge de linier i en variabel og udskrive det til sidst....?
Et eksempel : *************************** Som du gør idag : *************************** var count count = 0 Do While count < 100 response.write \"Jeg har nu talt til :\" & count & \"<br>\" count = count + 1 LOOP -------------------------------------------- *************************** Som du kan gøre : *************************** Dim count count = 0 Dim Total_string Total_string = \"\" Do While count < 100 Total_string = Total_string & \"<br>Nu har jeg talt til : \" & count count = count + 1 LOOP response.write Total_string ---------------------------------------------
Humlen er at du lægger det som du vil have vist når alt er hentet fra basen i en variabel... Den skriver du så først ud når du har været igennem alle poster... Nu skriver du jo ud løbende i dit loop...
Kasseper. Idet jeg er en nybegynder i asp-verdenen, kan jeg da ikke få dig til at sætte dit forslag ind i min kode. Jeg har lidt svært ved at se, hvordan jeg selv sætter dit forslag ind.
Hvis dit forslag virker tildeler jeg dig 200 point mere
intPage = Request(\"page\") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If Set rs = Server.CreateObject(\"ADODB.RecordSet\")
strSQL = \"SELECT * FROM afond WHERE\"
If Len(strfritekst) > 0 THEN
strSQL = strSQL & \" ((afond LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (saer LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (arbet LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (fodt LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (dod LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (sted LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (yde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (pakket LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (hylde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indsig LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (bem LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indhold LIKE \'%\" & strfritekst & \"%\'))\" End if
If Len(strarbet) > 0 Then If strogsimpel = \"og\" then strSQL = strSQL & \" AND (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpel = \"eller\" then strSQL = strSQL & \" OR (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpe = \"ikke\" then strSQL = strSQL & \" AND NOT (arbet LIKE \'%\" & strarbet & \"%\')\" End if
End if
strSQL = strSQL & \"ORDER BY afond\"
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"test.mdb\") rs.Open strSQL, strDSN, 1 Dim MyString Dim MyEmpty If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 20 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount
Den er helt gal, med disse linier : ******************* Response.Write \"<tr><td><font face= Arial><font size=2>\" & count & \". <a href=\'fuldpost.asp?id=\" & \"</td>\" Response.Write \"<td><font face= Arial><font size=2>\" & rs(\"ID\") & \"\' target=\'_blank\'><font color=#000000>\" & \"</td>\" Response.Write \"<td><font face= Arial><font size=2><font face= Arial><size=5>\" & \"<a href=\'fuldpost.asp?id=\" & rs(\"ID\") & \"\' target=\'_blank\'><font color=#000000>\" & rs(\"afond\") & \" </td>\" Response.Write \"<td><font face= Arial><font size=2>\" & \"<a href=\'fuldpost.asp?id=\" & rs(\"ID\") & \"\' target=\'_blank\'><font color=#000000>\" & rs(\"arbet\") & \"</td></tr></b></font></a><br>\" ******************* f.eks. den første linie afbryder et link tag og putter et <td> ind i. Der er hverken hoved eller hale i disse sætninger. Ret dem og jeg vil æde min gamle hat det vil virke... Skal jeg hjælpe dig ? Hvis så så forklar venligst hvordan det skal se ud !
Scriptet skal tælle posterne op og nummerere dem med løbe nr., som skal stå i tabellens \"felt 1\" . I felt 2 skal rs.afond vises. Mens felt 3 skal bestå af rs.arbet. Indholdet i felt 2 og 3 skal være links til filen fuldpost.asp, hvor resten af felterne som hører til den respektive post vises.
Jeg har lidt svært ved at lurer hvordan dine font tags skal fordeles : hvilken farve og størelse skal felt 1 ha ? hvilken farve og størelse skal felt 2 ha ? hvilken farve og størelse skal felt 3 ha ?
Der er desværre 2 problemer ved dit script. Det ene er, at det første løbenummer i felt1 (Nr.) er et punktum \".\", og herefter starter nummereringen fra 1 til 19.
Det næste problem er, at scriptet starter med at nummerere forfra, hvis man går til side 2 af søgeresultatet, dvs. de næste 20 poster.
strSQL = strSQL & \" ((afond LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (saer LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (arbet LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (fodt LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (dod LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (sted LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (yde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (pakket LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (hylde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indsig LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (bem LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indhold LIKE \'%\" & strfritekst & \"%\'))\" End if
If Len(strarbet) > 0 Then If strogsimpel = \"og\" then strSQL = strSQL & \" AND (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpel = \"eller\" then strSQL = strSQL & \" OR (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpe = \"ikke\" then strSQL = strSQL & \" AND NOT (arbet LIKE \'%\" & strarbet & \"%\')\" End if
End if
strSQL = strSQL & \"ORDER BY afond\"
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"test.mdb\") rs.Open strSQL, strDSN, 1 If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 20 intRecCount = rs.PageSize intPageCount = rs.PageCount intPage = Request(\"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>\"
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 NexPage = intPage + 1 Response.Write \"<p>Gå til side \" For intNum = 1 To intPageCount
Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & intNum & \">\" & intNum & \"</a> \" Next Response.Write \"<p>\" If Clng(intPage) > 1 Then Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & PrevPage & \"><<</a>\" Else Response.Write \"<<\" End If Response.Write \" \" If Clng(intPage) < Clng(intPageCount) Then Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & NextPage & \">>></a>\" Else Response.Write \">>\" End If End if %> </font> </body></html>
Den første side af søgeresultatet ser nu fin ud. Den første post nummereres ikke med et punktum mere.
På side 2 nummereres posterne nu fra -17 til 2 og på side 3 fra -16 til 3 osv. Ydermere får jeg følgende fejlmeddelelse, hvis jeg nu bruger >> -tegnet til at bladre en side fremad med:
Der opstod en Microsoft VBScript-kørselsfejl fejl \'800a000d\'
Er der en mulighed for at du kan sende mig Basen, og filen, så kunne jeg teste det selv inden jeg smider løsningen ind, det er lidt svært skal jeg sige dig at fejlrette på denne måde ;)
Ja, jeg har sendt den før middag. Jeg har endda ikke fået til den retur. Jeg kan sende den igen, og du kanmaile tilbage, når du har fået den. Mit db fylder ca. 3.5 MB. Kan hotmail.com have problemer med at modtage filer af den størrelse. Hvis ja, har du en anden emailaccount??
Joh, nu har jeg fået den, men jeg har til gengæld også fået 2 .vbs filer, som bliver lagt i karantæne, er det noget du kender noget til, de kommer nemli fra din adresse.....!??????
Joh, det kender jeg godt til, men det skal du ikke tage dig - det er firewall´en, og jeg har fikset det. Hvis du vælger, at sende din løsning via email. Send den da til flg. adressse: nih-jac@mail.tele.dk
firewall\'en ??? sender bare potientielle vira ud ??? Lyder ikke som en særlig pålidelig firewall, anyway, så kigger jeg videre på skidtet, men kan nok ikke være tilbage med et svar f\'r imorgen...!
strSQL = strSQL & \" ((afond LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (saer LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (arbet LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (fodt LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (dod LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (sted LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (yde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (pakket LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (hylde LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indsig LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (bem LIKE \'%\" & strfritekst & \"%\')\" strSQL = strSQL & \" OR (indhold LIKE \'%\" & strfritekst & \"%\'))\" End if
If Len(strarbet) > 0 Then If strogsimpel = \"og\" then strSQL = strSQL & \" AND (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpel = \"eller\" then strSQL = strSQL & \" OR (arbet LIKE \'%\" & strarbet & \"%\')\" End if If strogsimpe = \"ikke\" then strSQL = strSQL & \" AND NOT (arbet LIKE \'%\" & strarbet & \"%\')\" End if
End if
strSQL = strSQL & \"ORDER BY afond\"
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"test.mdb\") rs.Open strSQL, strDSN, 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>\"
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=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & intNum & \">\" & intNum & \"</a> \" Next Response.Write \"<p>\" If Clng(intPage) > 1 Then Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & PrevPage & \"><<</a>\" Else Response.Write \"<<\" End If Response.Write \" \" If Clng(intPage) < Clng(intPageCount) Then Response.Write \"<a href=simpel.asp?ogsimpel=\" & strogsimpel &\"&fritekst=\" & strfritekst & \"&arbet=\" & strarbet &\"&page=\" & NextPage & \">>></a>\" Else Response.Write \">>\" End If End if %> </font> </body></html> **********************************************************
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.