Avatar billede jnissen Nybegynder
30. september 2001 - 11:59 Der er 60 kommentarer og
1 løsning

Søgning i Access

Hej

Jeg mangler et søgescript, som kan søge i en Access database.

Der skal være nogle afkrydsningsfelter, som man kan afkrydse, for hvilke kolonner der skal søges i.

Fx. hvis man har afkrydset \"emne\" og \"vedr\", så skal der kun søges i disse to kolonner i databasen.

Det skal også være muligt at bruge, \"og\", \"eller\" \"ikke\".

Er der nogen der vil lave dette for mig?

Jeg giver gerne flere point, hvis det er nødvendigt?

Mvh. Jacob
Avatar billede keysersoze Ekspert
30. september 2001 - 12:01 #1
jeg har ikke et script til præcis det du søger - men det burde være forholdsvis simplet at modificere dette:

http://www.activeserverpages.dk/aspdigital/kapitel2/search.asp
Avatar billede jnissen Nybegynder
30. september 2001 - 12:03 #2
Jeg har prøvet, men det er ikke lykkes mig. Så derfor prøvet jeg dette:-)

Men tak alligevel.
Avatar billede eagleeye Praktikant
01. oktober 2001 - 16:03 #3
Har du lavet en side med en FORM hvor man indtaster søgeord og vælge kolonner der skal søges i?
Avatar billede jnissen Nybegynder
01. oktober 2001 - 16:11 #4
Nej, jeg har ikke lavet det med afkrydsningsfelterne.
Jeg har en form men et søgefelt, og en anden side med søgeresultatet.
Dette er lavet ud fra den artikel, der er nævnt længere oppe.

Mere har jeg desværre ikke.

Mvh. Jacob
Avatar billede eagleeye Praktikant
01. oktober 2001 - 18:40 #5
Jeg ville bygge FORM siden op i den her stil:

<head>
<title></title>
</head>
<body>
<center>
<table border=1>
<form method=\"post\" action=\"result.asp\">
  <tr><td>Søg:</td><td><input name=\"keyword\"></td></tr>
  <tr><td>Vælg felter:</td><td><input type=\"checkbox\" name=\"felter\" value=\"vedr\">Vedr</td></tr>
  <tr><td>&nbsp;</td><td><input type=\"checkbox\" name=\"felter\" value=\"emne\">Emne</td></tr>
<!-- Indsæt flere sæge felter her --> 
  <tr><td colspan=2 align=\"center\"><input type=\"submit\" value=\"Søg\" name=\"Action\"></td></tr>
</form>
</table>
</form>
</center>
</body>
</html>


Skal søgningen være med LIKE eller =  ?

Hvad mener du med IKKE ?  Altså hvordan havde du tænkt IKKE skulle laves ret SQL messigt? Der findes vist ikke en UNLIKE men der er mulighed for <>.
Avatar billede jnissen Nybegynder
01. oktober 2001 - 19:00 #6
Hej

Ja, det må godt være med LIKE.

Det jeg mener med IKKE er, at du kan søge sådan \"hund IKKE kat\", hvor den viser de poster hvor hund indgår uden ordet kat.

Det er heller ikke nødvendigt med ikke. Hvis der bare er \"og\" og \"eller\", så er det helt fint.

Men det vigtigste er at du kan søge i de felter du krydser af.
Avatar billede eagleeye Praktikant
01. oktober 2001 - 20:04 #7
Jeg tror det bliver lidt svært med IKKE men jeg kan lige gøre koden klar/færdi så du kan se den.
Det bliver så kun med OG / ELLER
Avatar billede eagleeye Praktikant
01. oktober 2001 - 20:37 #8
Hvis jeg har forstået det rigtigt er det noget i denne stil:


<% Response.Buffer = True %>
<html>
<head>
<title>Søgeresultat</title>
</head>
<body>

<%
\' Henter værdien fra sidste side
strKeywordForm = Trim(Request.Form(\"Keyword\"))
If Len(strKeywordForm) = 0 Then
  \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
Else
  \' Hvis der er skrevet i feltet
  strKeywordForm = Replace(strKeywordForm,\"\'\",\"\'\'\")
End If

nFeltItems = Request.Form(\"felter\").Count
If nFeltItems = 0 then
  \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End If

for i = 1 to nFeltItems
  strKeyword = strKeywordForm
  indexToFirstWord = inStr (1,strKeyword, \" \")
  if indexToFirstWord > 0 then \'More then one search word
    FirstWord = mid(strKeyword,1,indexToFirstWord-1)
    strKeyword = Trim(mid(strKeyword,indexToFirstWord+1,len(strKeyword)-indexToFirstWord+1))

    strToSQL = Request.Form(\"felter\")(i) & \" LIKE \'%\" & FirstWord & \"%\'\"
   
    do 
      startPos = Instr(1,strKeyword,\" \",1)
      slutPos = InStr (Cint(startPos)+1,strKeyword,\" \",1)
      if startPos > 0 then
        if slutPos = 0 then
          kopierTil = len(strKeyword)+1
        else
          kopierTil = slutPos
        end if
        functionWord = mid(strKeyword,1,startPos-1)
        if slutPos=0 then
          searchWord = mid(strKeyword,startPos+1,len(strKeyword)-startPos)
        else
          searchWord = mid(strKeyword,startPos+1,slutPos-startPos)
        end if
        strKeyword = mid(strKeyword,kopierTil+1,len(strKeyword)-kopierTil+1)
        select case functionWord
          case \"OG\"
            strToSQL = strToSQL & \" AND \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & searchWord & \"%\'\"
          case \"ELLER\"
            strToSQL = strToSQL & \" OR \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & searchWord & \"%\'\"
          case \"IKKE\"
            \'?? hvordan
        end select
      else
        Response.Write (\"FEJL I INDTASTNING\")
      end if
    loop until (startPos = 0) or (slutPos = 0)
  else \'kun 1 søge ord.
    strToSQL = Request.Form(\"felter\")(i) & \" LIKE \'%\" & strKeyword & \"%\'\"
  end if
 
  if i = 1 then
    strSQLWhere = \"(\" & strToSQL & \")\"
  else
    strSQLWhere = strSQLWhere & \" OR (\" & strToSQL & \")\"
  end if
next 

strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\".\\db\\db5.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere
Set rs = myConn.Execute(strSQL)
if not (rs.BOF and rs.EOF) then
  Response.Write \"<table>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"ID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if

myConn.Close
Set myConn = Nothing
%>
</body>
</html>
Avatar billede jnissen Nybegynder
01. oktober 2001 - 20:46 #9
Hej

Tak for hjælpen. Jeg har ikke lige tid til at kigge på det nu, da jeg ser robinson :-)

Men jeg ser på det bagefter.

Det er simpelthen kanon hvis det virker.

Forløbig mange tak.
Avatar billede jnissen Nybegynder
01. oktober 2001 - 22:25 #10
Hej igen

Så har jeg leget lidt med det.
Det med felterne virker kanon, men det med \"og\", \"eller\" virker desværre ikke.

Har du mod på at hjæple mig med at få det til at virke?

Mvh. Jacob
Avatar billede eagleeye Praktikant
01. oktober 2001 - 22:26 #11
ja ok i øjeblikekt skal du skrive og og eller med store OG ELLER. hmm måske det lige skal laves om.
Avatar billede eagleeye Praktikant
01. oktober 2001 - 22:31 #12
Linien:
select case functionWord

skal laves til:
select case Ucase(functionWord)
Avatar billede jnissen Nybegynder
01. oktober 2001 - 22:42 #13
Det virker nu med \"eller\", men ikke med \"og\" :-(
Avatar billede eagleeye Praktikant
01. oktober 2001 - 22:50 #14
Søgeningen virker ikke på tværs af kolonnerne var det meningen?
Den sørge efter søgeordne i samme kolonne.
Avatar billede jnissen Nybegynder
01. oktober 2001 - 22:54 #15
Ja meningen var at den skulle kunne søge på tværs af kolonnerne.
Er dette ikke muligt??

Avatar billede eagleeye Praktikant
01. oktober 2001 - 22:56 #16
jeg kikker i øjeblikket på det.
Avatar billede eagleeye Praktikant
01. oktober 2001 - 23:02 #17
Jeg er lidt i tvivl omkring \"og\" og så 2 kolonner?

Hvis du skriv Bil og Hus

Skal det være
(felt1 LIKE \'bil\' OR felt2 LIKE \'bil\') AND (felt1 LIKE \'hus\' OR felt2 LIKE \'HUS\')

Eller hvordan havde du tænkt OG skulle virke ?
Avatar billede jnissen Nybegynder
01. oktober 2001 - 23:06 #18
Jeg havde tænkt mig det sådan, at hvis du søgte på \"bil og hus\", så fandt den alle de poster, hvor både ordene bil og hus indgik på tværs af kolonnerne, men stadig i samme post.

Kan du følge mig??
Avatar billede eagleeye Praktikant
01. oktober 2001 - 23:09 #19
ja det tror jeg nok men OG skal både bil og hus i i recorden. Med eller skal enten bil eller hus være med i recorden.

Hvad hvis man blander OG og ELLER ?
Avatar billede eagleeye Praktikant
01. oktober 2001 - 23:24 #20
ok det bliver en større omgang:
for med bil og hus og 2 felter giver det (LIKE er erstattet med =):

((felt1=bil OR felt1=hus) AND (felt2=bil OR felt2=hus)) OR (felt1=bil AND felt1=hus) OR (felt2=bil AND felt2=hus)



Skal man kunne skrive: bil og hus eller båd og ski?

Jeg er nød til at smutte i seng nu.
Avatar billede eagleeye Praktikant
02. oktober 2001 - 00:04 #21
hehe jeg fik lige en ide så computeren vandt over senge i første omgang, test lige dette:


<% Response.Buffer = True %>
<html>
<head>
<title>Søgeresultat</title>
</head>
<body>

<%
\' Henter værdien fra sidste side
strKeywordForm = Trim(Request.Form(\"Keyword\"))
If Len(strKeywordForm) = 0 Then
  \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
Else
  \' Hvis der er skrevet i feltet
  strKeywordForm = Replace(strKeywordForm,\"\'\",\"\'\'\")
  strKeywordForm = Replace(strKeywordForm,\"  \",\" \")
End If

nFeltItems = Request.Form(\"felter\").Count
If nFeltItems = 0 then
  \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End If

wordArray = Split(strKeywordForm,\" \",-1)

i = 1
firstTime = true
lastFunctionWord = \"\"
for wc = LBound(wordArray) to UBound(wordArray)
  if firstTime = true then
    firstTime = false
    strSQL = \"((\" & Request.Form(\"felter\")(1) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    for i = 2 to nFeltItems
      strSQL = strSQL & \" OR \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    next
    strSQL = strSQL & \")\"
  else
    if Ucase(wordArray(wc)) = \"OG\" then
      if lastFunctionWord = \"\" then
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \" AND \"
      elseif lastFunctionWord = \"ELLER\" then
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \") AND (\"
      else
        strSQL = strSQL & \" AND \"
      end if
    elseif Ucase(wordArray(wc)) = \"ELLER\" then
      if lastFunctionWord = \"\" then
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \" OR \"
      elseif lastFunctionWord = \"OG\" then
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \") OR (\"
      else
        strSQL = strSQL & \" OR \"
      end if
    else
      strSQL = strSQL & \"(\" & Request.Form(\"felter\")(1) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      for i = 2 to nFeltItems
        strSQL = strSQL & \" OR \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      next
      strSQL = strSQL & \")\"
    end if
  end if
next
strSQL = strSQL & \")\"

strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\".\\db\\db5.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

strSQLWhere = strSQL
strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere
Response.Write \"<br>\" & strSQL & \"<br>\"
Set rs = myConn.Execute(strSQL)
if not (rs.BOF and rs.EOF) then
  Response.Write \"<table>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"ID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if

myConn.Close
Set myConn = Nothing
%>

</body>
</html>

nu smutter jeg i seng :)
Avatar billede jnissen Nybegynder
02. oktober 2001 - 06:52 #22
Godmorgen.

Jeg er meget taknemlig for din store hjælp. Det er dejligt at se, at der er nogen som har så meget energi :-)

Jeg har desværre ikke tid til at kigge på det nu, men jeg ser på det når jeg kommer hjem i eftermiddag.

Mange tak for hjælpen.

Mvh. Jacob
Avatar billede eagleeye Praktikant
02. oktober 2001 - 10:26 #23
Jeg kom lige til at tænke på om man evt kunnne lave en NOT foran feltnavnet så IKKE kunne virke:

felt LIKE \'hus\' AND NOT felt LIKE \'is\'

Jeg vil lige kikke vidre på det når jeg kommer hjem i eftermiddag/aften.
Avatar billede eagleeye Praktikant
02. oktober 2001 - 16:51 #24
jeg har en ny version hvor IKKE virker... hehe IKKE virker
Avatar billede jnissen Nybegynder
02. oktober 2001 - 17:03 #25
Hej igen

Det lyder sku godt. Du må meget gerne sende mig den.
Jeg er meget taknemlig for din hjælp.
Hvis det virker synes jeg bare vi skal stoppe her, for så er jeg meget tilfreds.

Hvad siger du til 300 point - er det nok for dit store arbejde??

Mvh. Jacob
Avatar billede eagleeye Praktikant
02. oktober 2001 - 17:10 #26
300 ja tak det lyder fint :)
Test lige og sig hvis der skal rettes noget jeg vil lige kikke vidre på den. Det er nogle problmmer hvis man blander for mange og/eller i samme linie (3 eller flere..bil og hus eller båd og ski), jeg ved ikke om det let kan løses men jeg tror det kan løses:

<% Response.Buffer = True %>
<html>
<head>
<title>Søgeresultat</title>
</head>
<body>

<%
\' Henter værdien fra sidste side
strKeywordForm = Trim(Request.Form(\"Keyword\"))
If Len(strKeywordForm) = 0 Then
  \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
Else
  \' Hvis der er skrevet i feltet
  strKeywordForm = Replace(strKeywordForm,\"\'\",\"\'\'\")
  strKeywordForm = Replace(strKeywordForm,\"  \",\" \")
End If

nFeltItems = Request.Form(\"felter\").Count
If nFeltItems = 0 then
  \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End If

wordArray = Split(strKeywordForm,\" \",-1)

i = 1
firstTime = true
lastFunctionWord = \"\"
for wc = LBound(wordArray) to UBound(wordArray)
  if firstTime = true then
    firstTime = false
    strSQL = \"((\" & Request.Form(\"felter\")(1) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    for i = 2 to nFeltItems
      strSQL = strSQL & \" OR \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    next
    strSQL = strSQL & \")\"
  else
    if Ucase(wordArray(wc)) = \"OG\" then
      if lastFunctionWord = \"\" then
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \" AND \"
      elseif lastFunctionWord = \"ELLER\" then
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \") AND (\"
      else
        strSQL = strSQL & \" AND \"
      end if
    elseif Ucase(wordArray(wc)) = \"ELLER\" then
      if lastFunctionWord = \"\" then
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \" OR \"
      elseif lastFunctionWord = \"OG\" then
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \") OR (\"
      else
        strSQL = strSQL & \" OR \"
      end if
    elseif Ucase(wordArray(wc)) = \"IKKE\" then
      strSQL = strSQL & \") AND (\"
      lastFunctionWord = \"IKKE\"
    else
      if lastFunctionWord = \"IKKE\" then
        str_NOT = \" NOT \"
        function_Word = \" AND \"
      else
        str_NOT = \"\"
        function_Word = \" OR \"
      end if
      strSQL = strSQL & \"(\" & Request.Form(\"felter\")(1) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      for i = 2 to nFeltItems
        strSQL = strSQL & function_Word & Request.Form(\"felter\")(i) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      next
      strSQL = strSQL & \")\"
    end if
  end if
next
strSQL = strSQL & \")\"

strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\".\\db\\db5.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

strSQLWhere = strSQL
strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere
Response.Write \"<br>\" & strSQL & \"<br>\"
Set rs = myConn.Execute(strSQL)
if not (rs.BOF and rs.EOF) then
  Response.Write \"<table>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"ID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if

myConn.Close
Set myConn = Nothing
%>

</body>
</html>
Avatar billede jnissen Nybegynder
02. oktober 2001 - 17:15 #27
Det lyder godt.
Jeg har desværre først mulighed for at test det i aften. Men jeg regner med det virker :-)
Det plejer det jo.....
Avatar billede eagleeye Praktikant
02. oktober 2001 - 20:07 #28
Hej igen. Jeg har lige rydet lidt op og fundet en fejl/uheldihed med IKKE som er rettet:


<% Response.Buffer = True %>
<html>
<head>
<title>Søgeresultat</title>
</head>
<body>

<%
\' Henter værdien fra sidste side
strKeywordForm = Trim(Request.Form(\"Keyword\"))
If Len(strKeywordForm) = 0 Then \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End if 
strKeywordForm = Replace(strKeywordForm,\"\'\",\"\'\'\")
strKeywordForm = Replace(strKeywordForm,\"  \",\" \")

nFeltItems = Request.Form(\"felter\").Count
If nFeltItems = 0 then \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End If
wordArray = Split(strKeywordForm,\" \",-1)

firstTime = true
lastFunctionWord = \"\"
changeFunction = false
for wc = LBound(wordArray) to UBound(wordArray)
  if firstTime = true then
    firstTime = false
    strSQL = \"((\" & Request.Form(\"felter\")(1) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    for i = 2 to nFeltItems
      strSQL = strSQL & \" OR \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    next
    strSQL = strSQL & \")\"
  else
    if Ucase(wordArray(wc)) = \"OG\" then
      if (lastFunctionWord = \"ELLER\") and (changeFunction = false) then
        lastFunctionWord = \"OG\" : strSQL = strSQL & \") AND (\"
        changeFunction = true
      else
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \" AND \"
        changeFunction = false
      end if
    elseif Ucase(wordArray(wc)) = \"ELLER\" then
      if lastFunctionWord = \"OG\" and changeFunction = false then
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \") OR (\"
        changeFunction = true
      else
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \" OR \"
        changeFunction = false
      end if
    elseif Ucase(wordArray(wc)) = \"IKKE\" then
      strSQL = \"(\" & strSQL & \")\"
      strSQL = strSQL & \") AND (\"
      lastFunctionWord = \"IKKE\"
    else
      if lastFunctionWord = \"IKKE\" then
        str_NOT = \" NOT \"
        function_Word = \" AND \"
      else
        str_NOT = \"\"
        function_Word = \" OR \"
      end if
      strSQL = strSQL & \"(\" & Request.Form(\"felter\")(1) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      for i = 2 to nFeltItems
        strSQL = strSQL & function_Word & Request.Form(\"felter\")(i) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      next
      strSQL = strSQL & \")\"
    end if
  end if
next
strSQL = strSQL & \")\"

strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\".\\db\\db5.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

strSQLWhere = strSQL
strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere
\'Response.Write \"<br>\" & strSQL & \"<br>\"
Set rs = myConn.Execute(strSQL)
if not (rs.BOF and rs.EOF) then
  Response.Write \"<table>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"ID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if

myConn.Close
Set myConn = Nothing
%>

</body>
</html>
Avatar billede jnissen Nybegynder
03. oktober 2001 - 17:33 #29
Hej igen

Jeg beklager jeg først svarer nu, men der er jo så meget.

Det se nu ud til det virker perfekt. Så der er jo kanon.

Jeg takker mange gang for din store hjælp. Det har sku været dejligt :-)

Du har dine velfortjente point.

En sidste lille ting - Er det muligt at den skriver hvor mange poster der er fundet??

Mvh. Jacob
Avatar billede eagleeye Praktikant
03. oktober 2001 - 17:49 #30
hvis du vil havde antal record skal du enten lave  to SQL-sætninger  eller åbne recordsetet på en anden måde:

To SQL sætninger:

countSQL = \"SELECT count(*) as antalFundet FROM tabel_navn WHERE \" & strSQLWhere
strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere

Set rs = myConn.Execute(countSQL)
Response.Write \"Antal fundet : \" & rs(\"antalFundet\")

Set rs = myConn.Execute(strSQL)
if not (rs.BOF and rs.EOF) then
  Response.Write \"<table>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"ID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if
myConn.Close
Set myConn = Nothing



Åben recordset på anden måde:

strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere

rs.Open strSQL, myConn, 1, 3
Response.write \"Antal fundet : \" & rs.RecordCount

if not (rs.BOF and rs.EOF) then
  Response.Write \"<table>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"ID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if
rs.Close
myConn.Close
Set myConn = Nothing


det skal sættes ind her efter:

strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\".\\db\\db5.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

strSQLWhere = strSQL
Avatar billede jnissen Nybegynder
03. oktober 2001 - 18:16 #31
Jep, det virker helt kanon. Mange tak.

Vil du tjene 100 point ekstra??

Jeg har nemlig udbygget min database men en tabel ekstra, og den vil jeg også gerne kunne søge i.

Der er en ralation mellem de 2 tabeller.

Så hvis den finder noget i den nye tabel, så skal posten fra en gamle tabel kommer frem.

Kan du forstå det?

Mvh. Jacob
Avatar billede eagleeye Praktikant
03. oktober 2001 - 18:29 #32
Jeg tror jeg er med på det.

Hvordan er relationen?
gammel_table 1->mange Nytabel
gammel_table mange->1 Nytabel
gammel_table 1->1 Nytabel

Hvis du forstår?
Avatar billede jnissen Nybegynder
03. oktober 2001 - 18:33 #33
gammel_table 1->mange Nytabel

Altså i den gamle er der kun én post - den post, kan så have flere poster i relations-tabllen.

Er du med?
Avatar billede eagleeye Praktikant
03. oktober 2001 - 18:34 #34
jeps
Avatar billede jnissen Nybegynder
03. oktober 2001 - 18:35 #35
okay - vil du lave det??
Avatar billede eagleeye Praktikant
03. oktober 2001 - 18:35 #36
hvad hedder felt navnet i den nye tabel?
Avatar billede eagleeye Praktikant
03. oktober 2001 - 18:36 #37
Ja,
Hvd hedder tabellen og feltet?
Avatar billede jnissen Nybegynder
03. oktober 2001 - 18:37 #38
feltet hedder \"tekst\"

og der er så en ralation, mellem \"cpr\" og \"cpr\"
Avatar billede eagleeye Praktikant
03. oktober 2001 - 18:38 #39
For det er nødvendigt at lave en JOIN på de to tabeller:

SELECT FROM tabel_navn LEFT JOIN ny_tabel ON tabel_navn.ID = ny_tabel.tabel_navn_ID;
Avatar billede jnissen Nybegynder
03. oktober 2001 - 18:39 #40
Tabellen hedder \"Handelsetekst\"
Avatar billede eagleeye Praktikant
03. oktober 2001 - 18:41 #41
Skal der være mulighed for at afkrydse Handelsetekst?
Avatar billede jnissen Nybegynder
03. oktober 2001 - 18:41 #42
Ja tak
Avatar billede eagleeye Praktikant
03. oktober 2001 - 19:21 #43
hvis den nu finder en i den gamle tabel så kommer alle posterne fra den nye tabel med:

Filen som vælger tabel:

<html>
<head>
<title></title>
</head>
<body>
<center>
<table border=1>
<form method=\"post\" action=\"result.asp\">
  <tr><td>Søg:</td><td><input name=\"keyword\"></td></tr>
  <tr><td>Vælg felter:</td><td><input type=\"checkbox\" name=\"felter\" value=\"vedr\">Vedr</td></tr>
  <tr><td>&nbsp;</td><td><input type=\"checkbox\" name=\"felter\" value=\"emne\">Emne</td></tr>
  <tr><td>&nbsp;</td><td><input type=\"checkbox\" name=\"felter\" value=\"handelsetekst.tekst\">Handelsetekst</td></tr> 
<!-- Indsæt flere sæge felter her --> 
  <tr><td colspan=2 align=\"center\"><input type=\"submit\" value=\"Søg\" name=\"Action\"></td></tr>
</form>
</table>
</form>
</center>
</body>
</html>


------result.asp----

<% Response.Buffer = True %>
<html>
<head>
<title>Søgeresultat</title>
</head>
<body>

<%
\' Henter værdien fra sidste side
strKeywordForm = Trim(Request.Form(\"Keyword\"))
If Len(strKeywordForm) = 0 Then \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End if 
strKeywordForm = Replace(strKeywordForm,\"\'\",\"\'\'\")
strKeywordForm = Replace(strKeywordForm,\"  \",\" \")

nFeltItems = Request.Form(\"felter\").Count
If nFeltItems = 0 then \' Hvis der ikke er skrevet i feltet
  Response.Clear
  Response.Redirect(\"default.asp\")
End If
wordArray = Split(strKeywordForm,\" \",-1)

firstTime = true
lastFunctionWord = \"\"
changeFunction = false
for wc = LBound(wordArray) to UBound(wordArray)
  if firstTime = true then
    firstTime = false
    strSQL = \"((\" & Request.Form(\"felter\")(1) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    for i = 2 to nFeltItems
      strSQL = strSQL & \" OR \" & Request.Form(\"felter\")(i) & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
    next
    strSQL = strSQL & \")\"
  else
    if Ucase(wordArray(wc)) = \"OG\" then
      if (lastFunctionWord = \"ELLER\") and (changeFunction = false) then
        lastFunctionWord = \"OG\" : strSQL = strSQL & \") AND (\"
        changeFunction = true
      else
        lastFunctionWord = \"OG\"
        strSQL = strSQL & \" AND \"
        changeFunction = false
      end if
    elseif Ucase(wordArray(wc)) = \"ELLER\" then
      if lastFunctionWord = \"OG\" and changeFunction = false then
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \") OR (\"
        changeFunction = true
      else
        lastFunctionWord = \"ELLER\"
        strSQL = strSQL & \" OR \"
        changeFunction = false
      end if
    elseif Ucase(wordArray(wc)) = \"IKKE\" then
      strSQL = \"(\" & strSQL & \")\"
      strSQL = strSQL & \") AND (\"
      lastFunctionWord = \"IKKE\"
    else
      if lastFunctionWord = \"IKKE\" then
        str_NOT = \" NOT \"
        function_Word = \" AND \"
      else
        str_NOT = \"\"
        function_Word = \" OR \"
      end if
      strSQL = strSQL & \"(\" & Request.Form(\"felter\")(1) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      for i = 2 to nFeltItems
        strSQL = strSQL & function_Word & Request.Form(\"felter\")(i) & str_NOT & \" LIKE \'%\" & wordArray(wc) & \"%\'\"
      next
      strSQL = strSQL & \")\"
    end if
  end if
next
strSQL = strSQL & \")\"

strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\".\\db\\db5.mdb\")
Set myConn = Server.CreateObject(\"ADODB.Connection\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
myConn.Open strDSN

strSQLWhere = strSQL

\'\'\'\'countSQL = \"SELECT count(*) as antalFundet FROM tabel_navn WHERE \" & strSQLWhere
\'strSQL = \"SELECT * FROM tabel_navn WHERE \" & strSQLWhere  \'VIRKER

strSQL = \"SELECT *, tabel_navn.ID as tabelID \"
strSQL = strSQL & \"FROM tabel_navn LEFT JOIN Handelsetekst ON tabel_navn.cpr = Handelsetekst.cpr\"
strSQL = strSQL & \" WHERE \" & strSQLWhere

\'Set rs = myConn.Execute(countSQL)
\'Response.Write \"Antal fundet : \" & rs(\"antalFundet\")

\'Response.Write \"<br>\" & strSQL & \"<br>\"
\'Set rs = myConn.Execute(strSQL)

rs.Open strSQL, myConn, 1, 3
Response.write \"Antal fundet : \" & rs.RecordCount

if not (rs.BOF and rs.EOF) then
  Response.Write \"<table>\"
  Response.Write \"<tr><td>ID</td><td>Emne</td><td>Vedr</td><td>Handelsetekst</td></tr>\"
  do while not rs.EOF
    Response.Write \"<tr>\"
    Response.Write \"<td>\" & rs(\"tabelID\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Emne\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"Vedr\") & \"</td>\"
    Response.Write \"<td>\" & rs(\"tekst\") & \"</td>\"
    Response.Write \"</tr>\"
    rs.MoveNext
  loop
  Response.Write \"</table>\"
end if

rs.Close

myConn.Close
Set myConn = Nothing
%>

</body>
</html>
Avatar billede jnissen Nybegynder
03. oktober 2001 - 19:35 #44
Nu får jeg denne fejl:

Too few parameters. Expected 1.

Avatar billede eagleeye Praktikant
03. oktober 2001 - 19:38 #45
Er kolonne og tabele navne rigtige ?
Avatar billede jnissen Nybegynder
03. oktober 2001 - 19:44 #46
Jeg er lidt i tvivl med denne:

strSQL = \"SELECT *, tabel_navn.ID as tabelID \"

Hvordan skal den være?
Avatar billede eagleeye Praktikant
03. oktober 2001 - 19:46 #47
Den her
tabel_navn.ID as tabelID
kan fjernes
hvis den her også bliver fjernet
Response.Write \"<td>\" & rs(\"tabelID\") & \"</td>\"

Jeg har brugt den til at tjekket at recorden der bliver udskrevet har rigtig ID fra den gamle tabel (tabel_navn).
Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:00 #48
Det virker nu, hvis jeg ikke krydser Handelsetekst af. Men den også skal søge i den kommer stadid denne fejl:

Too few parameters. Expected 1.

Det er i denne linje:
rs.Open strSQL, myConn, 1, 3

Avatar billede eagleeye Praktikant
03. oktober 2001 - 20:01 #49
helt feltet ikke tekst?
og tabellen Handelsetekst ?
Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:02 #50
Hvordan skal denne de ud:
strSQL = \"SELECT *, tabel_navn.ID as tabelID \"

For den kan vel ikke fjernes helt?
Avatar billede eagleeye Praktikant
03. oktober 2001 - 20:03 #51
strSQL = \"SELECT *, tabel_navn.ID as tabelID \"

Til:

strSQL = \"SELECT * \"



Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:04 #52
Hvad mener du med dette: helt feltet ikke tekst?

Ja, det er i Handelsetekst.
Avatar billede eagleeye Praktikant
03. oktober 2001 - 20:04 #53
Hedder feltet i Handelsetekst ikke tekst?
Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:05 #54
Det har jeg prøvet, og det hjalp ikke.
Avatar billede eagleeye Praktikant
03. oktober 2001 - 20:09 #55
Hedder kolonnen i Handelsetekst ikke tekst?
Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:11 #56
Nu virker det sku.

Mange tak for hjælpen.

Mht. dine point, så kan du vel ikke få dem i dette spørgsmål?

Kan du hjælpe mig med http://www.eksperten.dk/spm/116784, så kan du jo få dine point der?

Tak endnu engang.
Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:13 #57
Nej, den hed ikke tekst, men det gør du nu :-)
Det var mig der havde lavet en fejl. Det beklager jeg naturligvis meget.

Hvis den skal hedder noget andet, hvor ændre jeg så det i koden??
Avatar billede eagleeye Praktikant
03. oktober 2001 - 20:14 #58
ja. Er søgningen rigtgit?
Avatar billede eagleeye Praktikant
03. oktober 2001 - 20:17 #59
På den side du vælger felter i checkboksen kan du ændre value til at passe med kolonne navnet.

<tr><td>&nbsp;</td><td><input type=\"checkbox\" name=\"felter\" value=\"handelsetekst.tekst\">Handelsetekst</td></tr> 
Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:19 #60
Aaha - mange tak.
Avatar billede jnissen Nybegynder
03. oktober 2001 - 20:19 #61
Ja det ser ud til at den søger rigtigt
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