|  | 		    
					
        
         
          
         
	
          | |  | Problemer med søgning i database Fra : Aspen
 | 
 Dato :  02-10-03 12:47
 | 
 |  | Følgende kode udskriver alle poster i tabellen.
 Hvor udskriver den  ikke kun de poster, der indeholder søgeordet
 indeholdt i ("soeg")?
 
 Kan nogen hjælpe vil jeg være dybt taknemmelig.
 
 Aspen
 
 <%Option Explicit
 
 
 'Åbn forbindelsen til databasen
 dim cn, cnstr
 set cn = server.createobject("adodb.connection")
 cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;"
 cnstr = cnstr & "Data Source=c:\inetpub\wwwroot\base\oplysninger.mdb;"
 cn.connectionstring = cnstr
 cn.open
 
 'Åbn recordset
 dim sql, rs
 set rs = server.createobject("adodb.recordset")
 
 sql = "SELECT * FROM tblOplysninger WHERE
 (((tblOplysninger.Overskrift) Like '" & Request.Form("soeg") & "%')"
 sql = sql & "OR ((tblOplysninger.Beskrivelse) Like '" &
 Request.Form("soeg") & "%')"
 sql = sql & "OR ((tblOplysninger.www) Like '" & Request.Form("soeg") &
 "%'));"
 
 rs.open sql, cn ', adOpenForwardOnly, adLockReadOnly, adCmdText
 %>
 
 <html>
 <head>
 <title>Søg oplysning</title>
 </head>
 
 <Body>
 <h1>Resultat af søgning på <i><%response.write request.QueryString
 ("soeg")%></i></h1>
 
 <%
 do until rs.eof
 response.write "<u><b><h3>" & rs.fields("Overskrift") &
 "</h3></b></u>"
 response.write rs.fields("beskrivelse")
 response.write "<br>"
 rs.movenext
 loop
 
 'ryd op
 rs.close
 set rs = nothing
 cn.close
 set cn = nothing
 %>
 
 </body>
 </html>
 
 
 
 |  |  | 
  Chrisser (02-10-2003) 
 
	
          | |  | Kommentar Fra : Chrisser
 | 
 Dato :  02-10-03 12:52
 | 
 |  | 
 
            Aspen wrote:
 > Følgende kode udskriver alle poster i tabellen.
 > Hvor udskriver den  ikke kun de poster, der indeholder søgeordet
 > indeholdt i ("soeg")?
 >
 > Kan nogen hjælpe vil jeg være dybt taknemmelig.
 Ok    Prøv at udskrive din sqlstreng umiddelbart før du åbner dit recordset:
 Response.write "sql: " & sql
 Response.flush
 Og post den så til os, så er det meget lettere at se hvad der kan være galt.
 Men et gæt kunne være at din variabel er tom - det ville give dig alle
 resultater    Chrisser
            
             |  |  | 
  Aspen (02-10-2003) 
 
	
          | |  | Kommentar Fra : Aspen
 | 
 Dato :  02-10-03 14:28
 | 
 |  | On Thu, 2 Oct 2003 13:51:43 +0200, "Chrisser"
 <cbjDetteFjernes@egdatainform.dk> wrote:
 
 >Response.write "sql: " & sql
 >Response.flush
 
 sql: SELECT * FROM tblOplysninger WHERE (((tblOplysninger.Overskrift)
 Like '%')OR ((tblOplysninger.Beskrivelse) Like '%')OR
 ((tblOplysninger.www) Like '%'));
 
 Du har ret. Variablen er tom.
 Jeg har brugt en formular med metoden GET. Derfor udskriver
 <%response.write request.QueryString ("soeg")%> søgeordet, men
 Querystring accepteres ikke i Sql-sætningen.
 
 Aspen
 
 
 |  |  | 
   Chrisser (02-10-2003) 
 
	
          | |  | Kommentar Fra : Chrisser
 | 
 Dato :  02-10-03 14:40
 | 
 |  | 
 
            Aspen wrote:
 >> Response.write "sql: " & sql
 >> Response.flush
 >
 > sql: SELECT * FROM tblOplysninger WHERE
 > (((tblOplysninger.Overskrift) Like '%')OR
 > ((tblOplysninger.Beskrivelse) Like '%')OR ((tblOplysninger.www)
 > Like '%'));
 >
 > Du har ret. Variablen er tom.
 > Jeg har brugt en formular med metoden GET. Derfor udskriver
 > <%response.write request.QueryString ("soeg")%> søgeordet, men
 > Querystring accepteres ikke i Sql-sætningen.
 Du kan bruge den nøjagtig som med Request.Form, men:
 Jeg synes du skal læse OueryString ind i en variabel først, og så teste på
 indholdet af den inden du opbygger din sql:
 <%
 Dim sogStr
 sogStr = request.QueryString ("soeg")
 If Len(sogStr) > 0 Then
     ' lav sql
 Else
     response.write "Du har ikke indtastet søgeord"
 End If
 %>
   Chrisser
            
             |  |  | 
    Aspen (02-10-2003) 
 
	
          | |  | Kommentar Fra : Aspen
 | 
 Dato :  02-10-03 17:59
 | 
 |  | Dim sogStr
 sogStr = request.QueryString ("soeg")
 
 If Len(sogStr) > 0 Then
 ' lav sql
 sql = "SELECT * FROM tblOplysninger WHERE
 (((tblOplysninger.Overskrift) Like 'SogStr' & '%')"
 sql = sql & "OR ((tblOplysninger.Beskrivelse) Like 'SogStr' & '%')"
 sql = sql & "OR ((tblOplysninger.www) Like 'SogStr' & '%'));"
 
 
 Else
 response.write "Du har ikke indtastet søgeord"
 End If
 
 Response.write "sql: " & sql
 Response.flush
 
 Nu har jeg prøvet at indsætte ovenstående kode.
 Det giver følgende resultat:
 
 sql: SELECT * FROM tblOplysninger WHERE (((tblOplysninger.Overskrift)
 Like 'SogStr' & '%')OR ((tblOplysninger.Beskrivelse) Like 'SogStr' &
 '%')OR ((tblOplysninger.www) Like 'SogStr' & '%'));
 Resultat af søgning på computer
 
 Jeg søger på ordet: computer, som jeg findes i flere af posterne i min
 Acces-database.
 
 Aspen
 
 
 |  |  | 
     Chrisser (03-10-2003) 
 
	
          | |  | Kommentar Fra : Chrisser
 | 
 Dato :  03-10-03 07:03
 | 
 |  | Aspen wrote:
 > sql = "SELECT * FROM tblOplysninger WHERE
 > (((tblOplysninger.Overskrift) Like 'SogStr' & '%')"
 > sql = sql & "OR ((tblOplysninger.Beskrivelse) Like 'SogStr' & '%')"
 > sql = sql & "OR ((tblOplysninger.www) Like 'SogStr' & '%'));"
 
 > Nu har jeg prøvet at indsætte ovenstående kode.
 > Det giver følgende resultat:
 >
 > sql: SELECT * FROM tblOplysninger WHERE
 > (((tblOplysninger.Overskrift) Like 'SogStr' & '%')OR
 > ((tblOplysninger.Beskrivelse) Like 'SogStr' & '%')OR
 > ((tblOplysninger.www) Like 'SogStr' & '%'));
 
 Du får din streng bygget forkert op. Du skal indsætte variablen SogStr i
 stedet for ordet 'SogStr'.
 Det gør du på følgende måde:
 
 sql = "SELECT * FROM tblOplysninger WHERE (((tblOplysninger.Overskrift) Like
 '" & SogStr & "%') "
 sql = sql & "OR ((tblOplysninger.Beskrivelse) Like '" & SogStr & "%') "
 sql = sql & "OR ((tblOplysninger.www) Like '" & SogStr  & "%'));"
 
 Mvh
 Chrisser
 
 
 
 
 |  |  | 
    Aspen (04-10-2003) 
 
	
          | |  | Kommentar Fra : Aspen
 | 
 Dato :  04-10-03 11:11
 | 
 |  | 
 
            sql: SELECT * FROM tblOplysninger WHERE (((tblOplysninger.Overskrift)
 Like 'computer%') OR ((tblOplysninger.Beskrivelse) Like 'computer%')
 OR ((tblOplysninger.www) Like 'computer%')); 
 
 Hej Chrisser
 Dit forslag til sql-sætning fanger nu søgeordet, men nu udskrives kun
 overskriften og ikke data fra databasen.    Koden ser sådan ud efter sql-sætningen:
 set rs = server.createobject("adodb.recordset")
 'Åbn recordset
 rs.open sql, cn
 %>
 <html>
 <head>
 <title>Søg oplysning</title>
 </head>
 <Body>
 <h1>Resultat af søgning på <i><%response.write SogStr%></i></h1>
 <%
 do until rs.eof
    response.write "<u><b><h3>" & rs.fields("Overskrift") &
 "</h3></b></u>"
    response.write rs.fields("beskrivelse")
    response.write "<br>"
    rs.movenext
 loop
 'ryd op
 rs.close
 set rs = nothing
 cn.close
 set cn = nothing
 %>
 </body>
 </html>
 Aspen
            
             |  |  | 
     Chrisser (06-10-2003) 
 
	
          | |  | Kommentar Fra : Chrisser
 | 
 Dato :  06-10-03 07:27
 | 
 |  | 
 
            Aspen wrote:
 > Dit forslag til sql-sætning fanger nu søgeordet, men nu udskrives
 > kun overskriften og ikke data fra databasen.    >
 > Koden ser sådan ud efter sql-sætningen:
 [snip]
 > <%
 > do until rs.eof
 > response.write "<u><b><h3>" & rs.fields("Overskrift") &
 > "</h3></b></u>"
 > response.write rs.fields("beskrivelse")
 > response.write "<br>"
 > rs.movenext
 > loop
 Overskriften henter du jo fra databasen
 - og du er sikker på at dit felt hedder "beskrivelse" ?
 Chrisser
            
             |  |  | 
      Aspen (06-10-2003) 
 
	
          | |  | Kommentar Fra : Aspen
 | 
 Dato :  06-10-03 12:35
 | 
 |  | 
 >Overskriften henter du jo fra databasen
 >- og du er sikker på at dit felt hedder "beskrivelse" ?
 Undskyld. Jeg udtrykte mig vist ikke klart.    Den overskrift, der udskrives er:
 <h1>Resultat af søgning på <i><%response.write SogStr%></i></h1>
 Databasefelterne Overskrift og Beskrivelse udskrives ikke.
 Jeg fik på et tidspunkt en fejlmeddelelse, der sagde noget i retning
 af, at: Databaseformatet er ukendt.
 Jeg bruger Acces fra MSOffice 2000 og IIS fra Windows XP Pro. Kan de
 to ikke forenes?
 Jeg har dog tidligere fået udskrevet samtlige poster.
 Aspen
            
             |  |  | 
       Chrisser (06-10-2003) 
 
	
          | |  | Kommentar Fra : Chrisser
 | 
 Dato :  06-10-03 13:15
 | 
 |  | 
 
            Aspen wrote:
 > Den overskrift, der udskrives er:
 >
 > <h1>Resultat af søgning på <i><%response.write SogStr%></i></h1>
 >
 > Databasefelterne Overskrift og Beskrivelse udskrives ikke.
 Nå på den måde    > Jeg fik på et tidspunkt en fejlmeddelelse, der sagde noget i retning
 > af, at: Databaseformatet er ukendt.
 Siger mig ikke noget
 > Jeg bruger Acces fra MSOffice 2000 og IIS fra Windows XP Pro. Kan de
 > to ikke forenes?
 Ved det ikke..
 Men: Prøv lige istedet for din "do until rs.EOF" at sige
 If Not rs.EOF Then
     Do While Not rs.EOF
         response.write rs("Overskrift") & "<br>"
         response.write rs("beskrivelse") & "<br>"
         rs.MoveNext
     Loop
 Else
     response.write "recordset er tomt"
 End If
 Hvad får du ud af det ?
 Chrisser
            
             |  |  | 
        Aspen (06-10-2003) 
 
	
          | |  | Kommentar Fra : Aspen
 | 
 Dato :  06-10-03 16:46
 | 
 |  | On Mon, 6 Oct 2003 14:14:45 +0200, "Chrisser"
 <cbjDetteFjernes@egdatainform.dk> wrote:
 
 >If Not rs.EOF Then
 >    Do While Not rs.EOF
 >        response.write rs("Overskrift") & "<br>"
 >        response.write rs("beskrivelse") & "<br>"
 >        rs.MoveNext
 >    Loop
 >Else
 >    response.write "recordset er tomt"
 >End If
 
 Det gav følgende resultet:
 sql: SELECT * FROM tblOplysninger WHERE (((tblOplysninger.Overskrift)
 Like 'computer%') OR ((tblOplysninger.Beskrivelse) Like 'computer%')
 OR ((tblOplysninger.www) Like 'computer%'));
 
 Resultat af søgning på computer
 
 recordset er tomt
 
 
 Her kommer hele koden for overblikkets skyld:
 
 <%Option Explicit
 
 dim cn, cnstr, sql, rs, SogStr
 
 sogStr = request.QueryString ("soeg")
 
 'Åbn forbindelsen til databasen
 
 set cn = server.createobject("adodb.connection")
 cnstr = "Provider=Microsoft.Jet.OLEDB.4.0;"
 cnstr = cnstr & "Data Source=d:\database\base\oplysninger.mdb;"
 cn.connectionstring = cnstr
 cn.open
 
 set rs = server.createobject("adodb.recordset")
 
 If Len(sogStr) > 0 Then
 ' lav sql
 
 sql = "SELECT * FROM tblOplysninger WHERE
 (((tblOplysninger.Overskrift) Like '" & SogStr & "%') "
 sql = sql & "OR ((tblOplysninger.Beskrivelse) Like '" & SogStr & "%')
 "
 sql = sql & "OR ((tblOplysninger.www) Like '" & SogStr  & "%'));"
 
 Else
 response.write "Du har ikke indtastet søgeord"
 End If
 
 Response.write "sql: " & sql
 Response.flush
 
 'Åbn recordset
 rs.open sql, cn
 %>
 
 <html>
 
 <head>
 <title>Søg oplysning</title>
 </head>
 
 <Body>
 <h1>Resultat af søgning på <i><%response.write SogStr%></i></h1>
 
 <%
 If Not rs.EOF Then
 Do While Not rs.EOF
 response.write rs("Overskrift") & "<br>"
 response.write rs("beskrivelse") & "<br>"
 rs.MoveNext
 Loop
 Else
 response.write "recordset er tomt"
 End If
 
 'ryd op
 rs.close
 set rs = nothing
 cn.close
 set cn = nothing
 %>
 
 </body>
 
 </html>
 
 Aspen
 
 
 |  |  | 
         Chrisser (07-10-2003) 
 
	
          | |  | Kommentar Fra : Chrisser
 | 
 Dato :  07-10-03 07:13
 | 
 |  | 
 
            Aspen wrote:
 > Det gav følgende resultet:
 > sql: SELECT * FROM tblOplysninger WHERE
 > (((tblOplysninger.Overskrift) Like 'computer%') OR
 > ((tblOplysninger.Beskrivelse) Like 'computer%') OR
 > ((tblOplysninger.www) Like 'computer%'));
 Syntaksen er ok
 > Resultat af søgning på computer
 >
 > recordset er tomt
 Jamen så virker det jo fint - du har bare ikke nogle poster hvor et af de
 tre felter starter med 'computer'
 Hvis du alligevel mener der burde være nogle poster, hvilken database bruger
 du ?
   Chrisser
            
             |  |  | 
          Aspen (07-10-2003) 
 
	
          | |  | Kommentar Fra : Aspen
 | 
 Dato :  07-10-03 12:44
 | 
 |  | 
 
            Hej Chrisser
 Du skrev, at jeg ikke havde en post, der "begyndte" med ordet:
 computer. Det er korrekt.Ordet står inde i teksten.
 Nu har jeg indsat et ekstra %  i sql-sætningen, og så virker det hele
 fint.
 sql = "SELECT * FROM tblOplysninger WHERE
 (((tblOplysninger.Overskrift) Like '%" & SogStr & "%') "
 sql = sql & "OR ((tblOplysninger.Beskrivelse) Like '%" & SogStr & "%')
 "
 sql = sql & "OR ((tblOplysninger.www) Like '%" & SogStr  & "%'));"
 I øvrigt bruger jeg Access 2000.
 Tak for hjælpen. Jeg er meget glad.       Aspen
            
             |  |  | 
           Chrisser (07-10-2003) 
 
	
          | |  | Kommentar Fra : Chrisser
 | 
 Dato :  07-10-03 13:00
 | 
 |  | 
 
            Aspen wrote:
 > Du skrev, at jeg ikke havde en post, der "begyndte" med ordet:
 > computer. Det er korrekt.Ordet står inde i teksten.
 > Nu har jeg indsat et ekstra %  i sql-sætningen, og så virker det
 > hele fint.
 Nå der var der den lå begravet    Hvis dit søgeord kan være i midten af en tekst skal du have '%' både før og
 efter dit søgeord. Hvis du vil søge på et match på første del af en tekst
 bruger du søgeord + '%', hvis du vil søge på sidste del bruger du '%' +
 søgeord.
 Man skal dog tænke sig om inden du laver en søgning der starter med '%'.
 Grunden er at hvis din tabel bliver meget stor, kan du risikere at det tager
 meget lang tid at foretage en sådan søgning, da et wildcard forrest vil
 hindre søgning via index ( hvis du har sat index på din tabel ).
 > Tak for hjælpen. Jeg er meget glad.       Velbekomme
   Chrisser
            
             |  |  | 
  Jens Gyldenkærne Cla~ (02-10-2003) 
 
	
          | |  | Kommentar Fra : Jens Gyldenkærne Cla~
 | 
 Dato :  02-10-03 12:53
 | 
 |  | 
 
            Aspen skrev:
 > Følgende kode udskriver alle poster i tabellen.
 > Hvor udskriver den  ikke kun de poster, der indeholder
 > søgeordet indeholdt i ("soeg")?
 Prøv at udskrive din sql-sætning - så er det lettere at overskue
 hvad du egentlig søger på.
 Se hvordan det gøres her: <http://asp-faq.dk/article/?id=41>. -- 
 Jens Gyldenkærne Clausen
 Svar venligst under det du citerer, og citer kun det der er
 nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
 hvordan på http://usenet.dk/netikette/citatteknik.html |  |  | 
 |  |