Avatar billede maggerholm Nybegynder
26. januar 2006 - 11:29 Der er 7 kommentarer

Oprettelse af en søgefunktion ACCESS/ASP

Hejsa igen i kloge hoveder.  (Sagt med STOR respekt)  ;o)

Jeg er endnu en gang løbet ind i et ´lille´ problem.

Jeg har et webforum, hvor alle indlæg ligger i en AccessDB.

Jeg fik den idé at jeg ville lave en søge funktion, så brugerne kunne taste et ord, eller sætning, og så kun får smidt de indlæg i hovedet som indeholder netop søgeordet.

Access delen har jeg sådan set klaret, ved at sætte en
LIKE "*" & [SeekWord] & "*"    ind i forespørgslen.

Mit problem er nu at jeg kan finde ud af at få variablen [SeekWord]overført til min ASP kode. 

Eller som min første indskydelse var, og lade en VBpopup stille spørgsmålet.

Håber at der er en som har en genial løsning, ellers vil jeg da gerne nøjes med en mindre genial, men dog virksom løsning.  ;o)

Mvh,  Michael Aggerholm
Avatar billede ffsoft Praktikant
26. januar 2006 - 11:40 #1
Du laver en side med en tekstbox og en submitknap begge inden
for form tags. Så deler du siden op så der en del når der submittes
og en når der ikke submittes. I ikke submit delen skal du have tekst
boksen og submitknappen.
I submit delen skal du så hente det indtastede og tage det med i SQL
udtrykket ganske som du har skitseret, bortset fra at jokertegnet er
% (procent) og ikke * (stjerne) ved SQL udtryk.
Den der kan nøjes har altid nok.
Avatar billede maggerholm Nybegynder
26. januar 2006 - 12:08 #2
Til ffsoft.

Jeg forstår hvad du mener, men jeg bruger netop ikke sql koder direkte i min asp kode, har aldrig helt forstået dem. (Min fejl, ved det godt)  ;o)

Jeg bruger Access egne forespøgsler, og da jeg har mine forum indlæg og kommentarer i hver sin tabel, må jeg først køre en udvælgelses-forespørgsel på begge tabeller, for til sidst ende op med en liste over de unikke TID(Topic.ID) som indeholder søgeordet.

Denne liste bruger jeg så i selve den forespøgsel som er grundlaget for det som brugeren får smidt i hovedet.

(Og NEJ, jeg er ikke en ørn til det her, kun autodefect)  :o)

SQL'erne sakset fra Access ser således ud.

------ Seekout
SELECT News.TID, News.Name, News.Email, News.Topic, News.Text, News.Date
FROM q_find_ord INNER JOIN News ON q_find_ord.TID = News.TID;
------

------ q_find_ord
SELECT DISTINCT Comments.TID
FROM Comments INNER JOIN News ON Comments.TID = News.TID
GROUP BY Comments.TID, Comments.Text, News.Text
HAVING (((Comments.Text) Like "*" & [SeekWord] & "*") AND ((News.Text) Like "*" & [SeekWord] & "*"))
ORDER BY Comments.TID;
------
Avatar billede ffsoft Praktikant
26. januar 2006 - 15:06 #3
Et tænkt eksempel

Sådan gør du nu:
Set rst = Conn.Execute("qryFindBrugerDerStarterMedA")

Det skal ændres til:
strSQL = "SELECT * FROM Bruger WHERE Navn like 'a%';"
'response.write strSQL & "<br>"
Set rst = Conn.Execute(strSQL)

Fordi så kan du lave denne:
strNavn = "a"
strSQL = "SELECT * FROM Bruger WHERE Navn Like '" & strNavn & "%' ;"
'response.write strSQL & "<br>"
Set rst = Conn.Execute(strSQL)

Det SQL udtryk du skal bruge har Access jo allerede lavet til dig, så
din del af festen bliver at klippe det ud og sætte det i gåseøjne.

Fortæl nu med stor alvor, at der er uoverkommeligt ;0)
Avatar billede maggerholm Nybegynder
27. januar 2006 - 07:28 #4
Jeg tror vi taler lidt forbi hinanden.

Mine forespørgsler virker efter hensigten, der hvor jeg har problemet er hvordan jeg får indtastet variablen [SeekWord] fra brugersiden.

(Og undskyld, men dit tænkte eksempel står som volapyk for mig)

Mvh, Michael
Avatar billede ffsoft Praktikant
27. januar 2006 - 09:00 #5
Min pointe er at du kan ikke overføre en variabel til en forespørgsel i Access,
ved hjælp af asp. Derfor ville jeg lige vise dig, hvor nemt det er at bruge
SQL udtryk i asp, i stedet for at referere til forspørgsler.
Desværre kom jeg så til at skrive det i volapyk i stedet for visual basic.
Det jeg prøvede at illustrere, var hvordan det ser ud hvis du vil finde
alle personer, der starter med a.

1) Hjælp af en reference til en forespørgsel.
2) Ved at bygge SQL udtrykket ind i asp koden.
3) Gøre det endnu mere fleksibelt ved at bruge brugerens indtastning.

Hvis vi skal komme længere må du vise hvordan du trækker data ud af
databasen og viser det på skærmen. Et lille eksempel
Avatar billede maggerholm Nybegynder
27. januar 2006 - 09:21 #6
ok, jeg troede bare at jeg kunne overføre sådan en variabel.
Der blev jeg så meget klogere.

Alternativ løsning (Som jeg ser det)

Lave en søgefunktion i VBA

Public SeekWord As String
--------------------------------
Function SeekWord()
    SeekWord = InputBox("Indtast søgeord eller sætning!", "Søg i Debatten", "", 100, 100)
    SeekWord = SeekWord & "%"
End Function

Og så i forespørgslen lave flg. kriterie

    Like =SeekWord()


Men det giver bare en kompileringsfejl.  ;o(

snøft.

(undskyld jeg springer let henover ASP/SQL løsningen, jeg kan godt læse SQL, men jeg er desværre lidt(meget) fat-svag på det punkt.) ;o)

Michael.
Avatar billede maggerholm Nybegynder
27. januar 2006 - 09:26 #7
Source
------------

DataGrab delen

------
<%
Dim Page, Size, Conn, RS, PageCount, Counter, PagesForward, PagesBack, Email, Topic
Dim sDato, dTxt
'
  Page = Request("Page")
  If Page = "" Then
    Page = 1
  End If
  Size = Topics
'
  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open UsrConnect()
'   
  Set RS = Server.CreateObject("ADODB.RecordSet")
  RS.Open "SELECT * FROM seekout", Conn, 1, 3
'   
  If Not (RS.BOF Or RS.EOF) Then
    RS.PageSize = Size
    RS.AbsolutePage = Page
    PageCount = RS.PageCount
  End If
'
%>


DataShow Delen
--------------
<tr>
<%
    Counter = Size
    While Counter => 0
        Counter = Counter - 1
        If Not RS.EOF Then
%>
<% If (Counter/2) = Clng(Counter/2) then %>
    <tr>
<% else %>
    <tr bgcolor=gray>
<% end if %>

      <td><a href='view.asp?TID=<%= RS("TID") %>'><font size=-1><%= RS("Topic") %></font></a></td>
      <td></td>
<% If Not RS("Email") = "" Then %>
      <td><a href="mailto:<%= RS("EMail") %>?subject=<%= Mail_Note &" "& RS("Topic") %>"><font size=-1><%= RS("Name") %></font></a></td>
<% Else %>
      <td><font size=-1 color="black"><%= RS("Name") %></font></td>
<% End If %>
        <td> </td>
    <td align=center><font size=-1><%= RS("Svar") %></font></td>
        <td></td>
        <%
    dTxt = RS("Tid-dato")
    sDato = FormatDateTime(dTxt, 2) & " " & FormatDateTime(dTxt, 4)
        %>
    <td width="147" align=right><font size=-1><%= sDato %>  </font></td>
    </tr>
<%
    RS.MoveNext
    End If
    Wend
    RS.Close
    Set RS = Nothing
    Conn.Close
    Set Conn = Nothing
%>
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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



IT-JOB

MAN Energy Solutions

Department Manager Edge Platform

Udviklings- og Forenklingsstyrelsen

Data engineer til cloud-baseret dataplatform

Hiper A/S

IT-systemudvikler

Vive - Det Nationale Forsknings- og Analysecenter for Velfærd

Erfaren datamanager med registerkompetencer