/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
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

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste