|
| 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
| |
|
|