/ 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
Hente 1 linie fra kolonnen, hvor søgeordet~
Fra : Henning Habor


Dato : 04-10-03 06:24

Hej,

Nu har jeg siddet og knoklet hele natten for at få et pladearkiv
op at køre, men nu mangler jeg så bare lige at få det sidste ifm.
søgemaskinen til at fungere.

I en Access database har jeg en tabel der hedder "albums". I
"albums" har jeg flg. kolonner: "ID", "album_titel",
"album_kunstner" og "album_indhold".
Den sidste kolonne er et memo, hvor alle numrene på de enkelte
albums skal stå.
Man kan søge på "album_indhold" og det virker til dels.
Mit problem er at jeg vil have, at på det resultat der bliver
trukket ud, skal linien hvor søgeordet stemmer overens med det
der er blevet søgt på stå som en del af resultatet.
Som det er nu, er resultatet titlen og kunstneren, men for at
gøre det mere overskueligt, skal selve den linie hvori søgeordet
er også skrives.

Har du ikke en god ide til hvordan dette skal løses?
Jeg har søgt og søgt efter en kilde, der indeholdte løsningen
bare nogenlunde, men desværre uden resultat.

På forhånd tak.

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Torben Brandt (04-10-2003)
Kommentar
Fra : Torben Brandt


Dato : 04-10-03 11:42

Henning Habor skrev:
> Nu har jeg siddet og knoklet hele natten for at få et pladearkiv
> op at køre, men nu mangler jeg så bare lige at få det sidste ifm.
> søgemaskinen til at fungere.
>
> I en Access database har jeg en tabel der hedder "albums". I
> "albums" har jeg flg. kolonner: "ID", "album_titel",
> "album_kunstner" og "album_indhold".
> Den sidste kolonne er et memo, hvor alle numrene på de enkelte
> albums skal stå.
> Man kan søge på "album_indhold" og det virker til dels.
> Mit problem er at jeg vil have, at på det resultat der bliver
> trukket ud, skal linien hvor søgeordet stemmer overens med det
> der er blevet søgt på stå som en del af resultatet.
> Som det er nu, er resultatet titlen og kunstneren, men for at
> gøre det mere overskueligt, skal selve den linie hvori søgeordet
> er også skrives.
>
> Har du ikke en god ide til hvordan dette skal løses?
> Jeg har søgt og søgt efter en kilde, der indeholdte løsningen
> bare nogenlunde, men desværre uden resultat.

En måde kunne være:
Antag at album_indhold ligger i rs("album_indhold").
Antag at søgeordet ligger i sKeyword

' Opdel i linier, dvs del-strenge adskilt af linieskift
asLines = Split(rs("album_indhold"), vbCrLf)

' Nu er asLines et array med en linie på hver plads
' Vi løber arrayet igennem for at finde
' det der er søgt på
For i = LBound(asLines) To UBound(asLines)
If CBool(InStr(asLines(i), sKeyword)) Then
' asLines(i) indeholder sKeyword
sLine = asLines(i)
Exit For
End If
Next

' sLine indeholder nu den første linie fra rs("album_indhold"),
' der indeholder søgeordet sKeyword

Håber det giver mening (og virker...),
Torben


Henning Habor (04-10-2003)
Kommentar
Fra : Henning Habor


Dato : 04-10-03 15:40

Hej Torben,

Nu har jeg prøvet at indsætte din kode, men jeg kan desværre ikke få
det til at virke. Jeg skriver lige hele min kode:

strSearch = request("T1")
strCategory = request("C1")
strSearch = replace(strSearch, "'", "''")
strCategory = replace(strCategory, ",", " +")

response.write _
"<p>You searched for:&nbsp;<strong>" & strSearch &
"</strong>&nbsp;and the result is:</p>" & VbCrLf
if strSearch = "" then
response.write _
"<p><strong>You forgot to type a search word.</strong></p>"
elseif strCategory = "" then
response.write _
"<p><strong>You forgot to select a category.</strong></p>"
else

strSQL = "SELECT * FROM albums " & _
"WHERE " & strCategory & " LIKE '%" & strSearch & "%'" & _
"ORDER BY ID"

set objRS = server.createobject("ADODB.recordset")
objRS.open strSQL, strConnect, adOpenForwardOnly, adLockReadOnly,
adCmdText
do while not objRS.EOF
asLines = Split(objRS("album_indhold"), vbCrLf)
For i = LBound(asLines) To UBound(asLines)
If CBool(InStr(asLines(i), strSearch)) Then
' asLines(i) indeholder strSearch
sLine = asLines(i)
exit for
end if
Next
response.write _
"<p><a href=""album.asp?action=album&amp;ID=" & objRS("ID") &
""">" & objRS("album_kunstner") & VbCrLf & _
" &middot;&nbsp;" & objRS("album_titel") & "<br>" & VbCrLf & _
" <i>" & sLine & "</i></a></p>" & VbCrLf
objRS.movenext
loop
objRS.close
set objRS = nothing

end if

Den skriver resultatet ud, bare ikke sLine.

Har jeg overhovedet indsat din kode det rigtige sted? Eller hvad gør
jeg forkert?

På forhånd tak.

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jørn Andersen (07-10-2003)
Kommentar
Fra : Jørn Andersen


Dato : 07-10-03 23:24

On Sat, 4 Oct 2003 14:40:29 +0000 (UTC), Henning Habor
<henninghabor@hotmail.com> wrote:

>Nu har jeg prøvet at indsætte din kode, men jeg kan desværre ikke få
>det til at virke. Jeg skriver lige hele min kode:
<snip en masse kode>
> do while not objRS.EOF
> asLines = Split(objRS("album_indhold"), vbCrLf)
> For i = LBound(asLines) To UBound(asLines)
> If CBool(InStr(asLines(i), strSearch)) Then
> ' asLines(i) indeholder strSearch
> sLine = asLines(i)
> exit for
> end if
> Next
> response.write _
> "<p><a href=""album.asp?action=album&amp;ID=" & objRS("ID") &
>""">" & objRS("album_kunstner") & VbCrLf & _
> " &middot;&nbsp;" & objRS("album_titel") & "<br>" & VbCrLf & _
> " <i>" & sLine & "</i></a></p>" & VbCrLf
> objRS.movenext
> loop
<snip>
>Den skriver resultatet ud, bare ikke sLine.
>
>Har jeg overhovedet indsat din kode det rigtige sted? Eller hvad gør
>jeg forkert?

Jeg kan ikke umiddelbart finde nogen fejl i koden, men du må i gang
med lidt systematisk fejlfinding:
(Måske du får brug for:
<url: http://www.asp-faq.dk/article/?id=41>)

1) Findes søgeordet rent faktisk i objRs("album_indhold")?
Hvis nej, har du formentlig en SQL-fejl.
Hvis ja, gå videre.

2) Ser dit array rigtigt ud - altså spiltter det rent faktisk
memo-feltet i linier?
Hvis nej, kig på Split-funktionen.
Hvis ja, gå videre.

3) Fanger If'en rent faktisk den linie, som indeholder søgeordet?
(Udskriv i og find ud af om den svarer til linien med søgeordet
(0-nummereret).)
osv. etc. ...

Som regel går der en prås op for én, når man går lidt systematisk til
værks - hvis ikke, så skriv igen.

Men som Jens skriver, så er det en højst uhensigtsmæssig datastruktur,
så hvis det er en database, du bruger meget, så vil jeg klart foreslå
at omstrukturere. Du ligger, som du har redt

Good luck!

--
Jørn Andersen,
Brønshøj

Jens Gyldenkærne Cla~ (04-10-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-10-03 22:04

Henning Habor skrev:

> I en Access database har jeg en tabel der hedder "albums". I
> "albums" har jeg flg. kolonner: "ID", "album_titel",
> "album_kunstner" og "album_indhold".
> Den sidste kolonne er et memo, hvor alle numrene på de enkelte
> albums skal stå.

Det er en upraktisk datastruktur - som du til dels allerede har
erfaret. De enkelte numre bør stå i deres egen tabel som er
relateret til albumtabellen. Her er en mulig opbygning:

tbl_album
- albumID
- album_titel
- kunsterID

tbl_numre
- nummerID
- albumID
- placering (på pladen)
- nummer_titel
- varighed

tbl_kunstnere
- kunstnerID
- navn
- biografi

Ideen med at bruge flere tabeller er at en given oplysning ikke
skrives mere end ét sted - samtidig med at oplysninger af samme
karakter står samlet i én tabel. Databaser er ikke helt enkle at gå
til - det kan være en god ide at købe et hæfte eller evt. en bog om
emnet. Man kan også lade sig inspirere af eksempeldatabasen
Northwind.
--
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 : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste