Avatar billede shang Nybegynder
08. maj 2007 - 18:56 Der er 12 kommentarer og
1 løsning

Træk link ud af db efter kategori

Jeg er ved at lave et link script. Som scriptet er nu trækker den alle links ud udanset kategori. Jeg vil gerne have mit script til kun, at vise links der fx høre til kategorien opskrifter.
I db'en har jeg:

Links:
LinkID          auto
LinkTitle        Tekst
LinkURL          Tekst
LinkDescription  Notat
LinkVisits      Tal
LinkDateAdded    Dato og klokkeslæt
CategoryID      Tal
Live            Tal
Email            Tekst

Categories:
CategoryID        auto
CategoryTitle    Tekst
ParentCategoryID  Tal
Description      Notat

<%
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits FROM Links Where Live = 1 "
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/links2.mdb")
rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 3
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  Response.Write "<center>Side " & intPage & " af " & intPageCount & "</center>"
  Do While Not rs.EOF And intRecCount > 0
response.write "<fieldset style='padding: 2'>"
response.write "<legend><a href=""redirect.asp?LinkID="&RS("LinkID")&""">"& RS("LinkTitle")  & "</a>-"& RS("LinkVisits")& "</FONT>"
response.write "</legend>"
response.write "<font face='Verdana' size='1'>"
response.write RS("LinkDescription")&"<br>"
response.write "</FONT></div>"
response.write "</fieldset>"
response.write ""
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing

Response.Write "<hr color='#DCB7DC' size='1'>"
For intNum = 1 To intPageCount
Next
Response.Write "<table border='0' cellpadding='0' cellspacing='0' width='400'>"
Response.Write "<tr>"
Response.Write "<td width='33%' align='left'>&nbsp;"
If Clng(intPage) > 1 Then
Response.Write "<a href=faq.asp?page=" & intPage - 1 & "><font face='Verdana' size='1' COLOR='#473262'><b>Forrige</b> </a>"
Else
Response.Write "<font face='Verdana' size='1' COLOR='#473262'><b>Forrige</b>"
End If
Response.Write "</td>"
Response.Write "<td width='33%' align='center'></td>"
Response.Write "<td width='34%' align='right'>"
If Clng(intPage) < Clng(intPageCount) Then
Response.Write "<a href=faq.asp?page=" & intPage + 1 & "><font face='Verdana' size='1' COLOR='#473262'><b>Næste</b></a> &nbsp;</td>"
Else
  Response.Write "<font face='Verdana' size='1' COLOR='#473262'><b>Næste</b>"
End If
Response.Write "</tr>"
Response.Write "</table>"
Response.Write "</td>"
%>
Avatar billede goose Nybegynder
08. maj 2007 - 19:07 #1
Tror det er denne du mangler noget i:

strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits FROM Links Where Live = 1 "

Du mangler en parameter fra din categories der fortæller hvilken kategori der er tale om, f.eks.:

strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and categoryID = 6"

Ovenstående er forudsat, at kategorien med opskrifter har categoryID 6 i din kategoritabel.

Som det er nu, så beder du den jo blot om at vise alle uanset categoryID blot de har live=1

/Goose
Avatar billede shang Nybegynder
08. maj 2007 - 20:19 #2
Hvordan erstatter jeg 6 tallet, så jeg ikke skal lave en masse sider alt efter hvor mange kategorier der er.
et bud ville være
strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and(categoryID = " & Request.QueryString("categoryID") & ")"
Avatar billede shang Nybegynder
08. maj 2007 - 20:50 #3
jeg prøvede dette strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and categoryID= "& Request.QueryString("categoryID") &" "

men får denne fejl

Microsoft OLE DB Provider for ODBC Drivers error '80040e21'

ODBC driver does not support the requested properties.

link.asp, line 10

linie 10: rs.Open strSQL, strDSN, 1
Avatar billede goose Nybegynder
08. maj 2007 - 21:07 #4
Jeg kender ikke den der open streng du bruger, tror det måske har noget at gøre med ,1 men jeg aner det ikke.

Jeg ville lave min strSQL som:

strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and categoryID= "& Request.QueryString("categoryID")

/Goose
Avatar billede goose Nybegynder
08. maj 2007 - 21:08 #5
som du kan se, har jeg fjernet

&" "

i den du selv har brugt, det skal ikke med når det er tal

/Goose
Avatar billede shang Nybegynder
08. maj 2007 - 21:25 #6
Jeg har prøvt at lave "Live" i db om til et ja/nej felt. Sql har jeg lavt således
strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = True and categoryID= "& Request.QueryString("categoryID")

men får denne fejl
Microsoft OLE DB Provider for ODBC Drivers error '80040e21'

ODBC driver does not support the requested properties.

link.asp, line 10

linie 10 rs.Open strSQL, strDSN, 1
Avatar billede shang Nybegynder
08. maj 2007 - 21:52 #7
mit script ser nu således ud

<%
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and categoryID = '" & Request.Querystring("categoryID") & "'"
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/links2.mdb")
rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 3
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  Response.Write "<center>Side " & intPage & " af " & intPageCount & "</center>"
  Do While Not rs.EOF And intRecCount > 0
response.write "<fieldset style='padding: 2'>"
response.write "<legend><a href=""redirect.asp?LinkID="&RS("LinkID")&""">"& RS("LinkTitle")  & "</a>-"& RS("LinkVisits")& "</FONT>"
response.write "</legend>"
response.write "<font face='Verdana' size='1'>"
response.write RS("LinkDescription")&"<br>"
response.write "</FONT></div>"
response.write "</fieldset>"
response.write ""
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing

Response.Write "<hr color='#DCB7DC' size='1'>"
For intNum = 1 To intPageCount
Next
Response.Write "<table border='0' cellpadding='0' cellspacing='0' width='400'>"
Response.Write "<tr>"
Response.Write "<td width='33%' align='left'>&nbsp;"
If Clng(intPage) > 1 Then
Response.Write "<a href=faq.asp?page=" & intPage - 1 & "><font face='Verdana' size='1' COLOR='#473262'><b>Forrige</b> </a>"
Else
Response.Write "<font face='Verdana' size='1' COLOR='#473262'><b>Forrige</b>"
End If
Response.Write "</td>"
Response.Write "<td width='33%' align='center'></td>"
Response.Write "<td width='34%' align='right'>"
If Clng(intPage) < Clng(intPageCount) Then
Response.Write "<a href=faq.asp?page=" & intPage + 1 & "><font face='Verdana' size='1' COLOR='#473262'><b>Næste</b></a> &nbsp;</td>"
Else
  Response.Write "<font face='Verdana' size='1' COLOR='#473262'><b>Næste</b>"
End If
Response.Write "</tr>"
Response.Write "</table>"
Response.Write "</td>"
%>

det virker også fint MEN det viser ikke nogle links under nogle af kategorierne selvom der er nogle links i kategorierne.

I db'en har jeg rettet:

Links:
LinkID          auto
LinkTitle        Tekst
LinkURL          Tekst
LinkDescription  Notat
LinkVisits      Tal
LinkDateAdded    Dato og klokkeslæt
CategoryID      Tal - til tekst
Live            Tal
Email            Tekst
Avatar billede goose Nybegynder
08. maj 2007 - 22:58 #8
Altså, hvis du bruger tal i din querystring, skal du ikke have plinger omkring som du har i din strSQL:

strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and categoryID = '" & Request.Querystring("categoryID") & "'"

Efter min bedste vurdering bør den korrekte SQL se således ud:

strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and categoryID = " & Request.Querystring("categoryID")

/Goose
Avatar billede goose Nybegynder
08. maj 2007 - 23:02 #9
hov, så ikke lige du havde lavet CategoryID om til tekst, hvorfor har du det?

Tror det måske er her du får noget konflikt mellem tal og tekstformat da din querystring kommer i talformat.

Det svarer til det med æbler og appelsiner :o)

Går i seng nu, så ikke mere fra mig idag

/Goose
Avatar billede shang Nybegynder
09. maj 2007 - 00:59 #10
Da jeg lavede CategoryID om til tekst i db'en virkede det, men scriptet viste ikke nogle links når man klikkede på en kategori. Da jeg lavede CategoryID om til tal igen fik jeg denne fejl
Microsoft OLE DB Provider for ODBC Drivers error '80040e21'

ODBC driver does not support the requested properties.
link.asp, line 10

line 10 rs.Open strSQL, strDSN, 1

Jeg ved ikke om det evt er nemmere, hvis jeg sender scriptet til dig? :)
Avatar billede goose Nybegynder
09. maj 2007 - 08:32 #11
Det virkede jo netop ikke idet, at du forsøger at trække æbler op af en kasse med appelsiner - i overført betydning.

Prøv og zip dine filer og database og send det til:

admin [at] goose [dot] dk

/Goose
Avatar billede shang Nybegynder
09. maj 2007 - 14:13 #12
Tak for hjælpen goose :)

Det færdige resultat er:

links:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("db/links2.mdb")
Conn.Open DSN

strSQL = "Select * From Categories Where ParentCategoryID = 0 Order By CategoryTitle"
Set rs = Conn.Execute(strSQL)

Do

SQLcount = "select count(*) as antal From links Where CategoryID =" & rs("CategoryID")

set rscount = conn.execute(SQLcount)
antalialt = rscount("antal")
rscount.close
set rscount = nothing

response.write "<fieldset style='padding: 2'>"
response.write "<legend><a href=""link.asp?id="&RS("CategoryID")&""">"& RS("CategoryTitle")  & "</a>-" & antalialt &"</FONT>"
response.write "</legend>"
response.write "<font face='Verdana' size='1'>"
response.write RS("Description")&"<br>"
response.write "</FONT></div>"
response.write "</fieldset>"
response.write ""

rs.MoveNext
Loop While Not rs.EOF

Conn.Close
Set Conn = Nothing
%>
Link:
<%
intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT LinkID, LinkTitle,LinkDescription, LinkVisits, categoryID FROM Links Where Live = 1 and categoryID =" & Request.Querystring("id")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/links2.mdb")


rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 3
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  Response.Write "<center>Side " & intPage & " af " & intPageCount & "</center>"
  Do While Not rs.EOF And intRecCount > 0
response.write "<fieldset style='padding: 2'>"
response.write "<legend><a href=""redirect.asp?LinkID="&RS("LinkID")&""">"& RS("LinkTitle")  & "</a>-"& RS("LinkVisits")& "</FONT>"
response.write "</legend>"
response.write "<font face='Verdana' size='1'>"
response.write RS("LinkDescription")&"<br>"
response.write "</FONT></div>"
response.write "</fieldset>"
response.write ""
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing

Response.Write "<hr color='#DCB7DC' size='1'>"
For intNum = 1 To intPageCount
Next
Response.Write "<table border='0' cellpadding='0' cellspacing='0' width='400'>"
Response.Write "<tr>"
Response.Write "<td width='33%' align='left'>&nbsp;"
If Clng(intPage) > 1 Then
Response.Write "<a href=link.asp?page=" & intPage - 1 & "&id="& request.querystring("id") &"><font face='Verdana' size='1' COLOR='#473262'><b>Forrige</b> </a>"
Else
Response.Write "<font face='Verdana' size='1' COLOR='#473262'><b>Forrige</b>"
End If
Response.Write "</td>"
Response.Write "<td width='33%' align='center'></td>"
Response.Write "<td width='34%' align='right'>"
If Clng(intPage) < Clng(intPageCount) Then
Response.Write "<a href=link.asp?page=" & intPage + 1 & "&id="& request.querystring("id") &"><font face='Verdana' size='1' COLOR='#473262'><b>Næste</b></a> &nbsp;</td>"
Else
  Response.Write "<font face='Verdana' size='1' COLOR='#473262'><b>Næste</b>"
End If
Response.Write "</tr>"
Response.Write "</table>"
Response.Write "</td>"
%>
Avatar billede goose Nybegynder
09. maj 2007 - 14:45 #13
Det var så lidt og tak for point.

/Goose
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
Kurser inden for grundlæggende programmering

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