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)
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.
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; ------
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)
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
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)
------ <% 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 %>
Synes godt om
Ny brugerNybegynder
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.