Jag håller på och gör ett forum.
Forumet har olika kategorier, vi kan kalla dem för Frukt, Kött och Mjölk. Till dessa olika kategorier finns trådar.
Kategorierna sparas i en databas och trådarna i en annan.
Jag vill loopa ut forumkategorierna och sedan under respektive forumkategori loopa ut de trådar som hör till respektive kategori.
Typ exempel:
Kött
- Köttråd nummer 1
- Köttråd nummer 2
Frukt
- Skala banan
- Rotfrukter
Mjölk
- Muu
- Mellanmjölk eller standardmjölk?
Jag försökte med denna koden:
<% Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("db/hhgsdb.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM Forumkategori WHERE Visa ='Ja' Order by Ordning"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic %>
<% Do Until RecSet.EOF %>
<% =RecSet("Rubrik") %>
<%
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa2 = "SELECT top 5 * FROM foruminlagg ORDER BY ForumID DESC"
RecSet.Open Visa2, Connect, adOpenStatic, adLockOptimistic %>
<% Do Until RecSet.EOF %>
<% =RecSet("Rubrik") %>
<% RecSet.Movenext
loop
%>
<% RecSet.Movenext
loop
Recset.Close
Connect.Close
Set Recset = Nothing
Set Connect = Nothing
%>
men det går åt pipsvängen... hur göra?
Engine^Medlem sedan dec. 20003 887 inlägg Byt namn på ditt andra recordset. Som du har nu så skriver du över ditt första recset på en gång. Inte bra ;)
<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" & Server.MapPath("db/hhgsdb.mdb")
Set objForum = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT Rubrik FROM Forumkategori WHERE Visa ='Ja' ORDER BY Ordning"
objForum.Open strSQL, Connect, adOpenStatic, adLockReadOnly
Do Until RecSet.EOF
Response.Write RecSet(0) & "<br>"
Set objThreads = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT TOP 5 Rubrik FROM foruminlagg ORDER BY ForumID DESC"
objThreads.Open strSQL Connect, adOpenStatic, adLockReadOnly
Do Until RecSet.EOF
Response.Write "- " & RecSet(0) & "<br>"
RecSet.Movenext
Loop
objThreads.Close
RecSet.Movenext
Loop
Set objThreads = Nothing
objForum.Close
Set objForum = Nothing
Connect.Close
Set Connect = Nothing
%>
PalleMedlem sedan apr. 20003 174 inlägg Du måste på ett eller annat sätt spara ID´t på din kategori i tabellen för inläggen så att du via detta id kan
koppla samman inlägg med rätt kategori, något du enklast gör när du skapar kategorier och sparar nya inlägg.
Här kommer ett litet förslag:
OBS Helt otestat då jag inte har Access installerat just nu!
Tabell1: Forumkategori
ID | Kategori | Visa
Tabell2: Foruminlagg
ID | Rubrik | KategoriID
Exempel på kod:
[red]<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("db/hhgsdb.mdb")
Set RecSet = Connect.Execute("SELECT k.ID, k.Kategori, COUNT(i.ID) FROM Forumkategori k, Foruminlagg i WHERE k.Visa='Ja' AND i.KategoriID=k.ID GROUP BY k.ID, k.Kategori ORDER BY 1")
If NOT RecSet.EOF Then arrKategori = RecSet.GetRows()
RecSet.Close
Set RecSet = Connect.Execute("SELECT k.ID, i.ID, i.Rubrik FROM Forumkategori k, Foruminlagg i WHERE i.KategoriID=k.ID GROUP BY k.ID, i.ID, i.Rubrik ORDER BY 1")
If NOT RecSet.EOF Then arrInlagg = RecSet.GetRows()
RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing
'//---------------------------------------------------------------------------------------------
'// Output
x=0
If IsArray(arrKategori) Then
For i = 0 To UBound(arrKategori, 2)
'// Kategorier
intID = arrKategori(0,i)
strKategori = arrKategori(1,i)
intAntalInlagg = arrKategori(2,i)
Response.Write strKategori &"<br>"
For s = 0 To cInt(intAntalInlagg)-1
'// Inlägg
intInlaggID = arrInlagg(1,x)
strInlaggRubrik = arrInlagg(2,x)
Response.Write "- "& strInlaggRubrik &" (id:"& intInlaggID &")<br>"
x=x+1
Next
If NOT i = UBound(arrKategori, 2) Then Response.Write "<br>"
Next
End If
%>[/red]
Så här ser (förenklat) tabellerna ut:
tabell 1: forumkategori
FKategoriID
Rubrik
Ordning
Visa
tabell 2: Foruminlagg
ForumID
Rubrik
Text
Forumkategori (som kopplas till "Rubrik" på tabellen "forumkategori")
hur ska koden se ut då? Testade Engine^:s kod, men fick detta felmesset:
Kompileringsfel i Microsoft VBScript (0x800A0401)
Slut på programsats förväntas.
/hhgspunktse/hhgs/forum.asp, line 29, column 23
objThreads.Open strSQL Connect, adOpenStatic, adLockReadOnly
----------------------^
ok, fixat kommat :-) ... men nu blir det felmess:
Körningsfel i Microsoft VBScript (0x800A01A8)
Objekt krävs.: ''
/hhgspunktse/hhgs/forum.asp, line 24
istället...
line 24:
Do Until RecSet.EOF
@ndersMedlem sedan juni 200032 969 inlägg Då kontrollerar man att Engine^ angett rätt objektnamn i sin kod...
skall det vara "Do Until objForum.EOF"? då blir "recset" på rad 25 inkompatibelt istället...
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'RecSet'
/hhgspunktse/hhgs/forum.asp, line 25
måste jag ändra alla recset? ska jag då skriva för att få ut nåt ur kolumnen Rubrik till exempel? obj.Forum("rubrik") eller?
Jesper TMedlem sedan nov. 20017 144 inlägg Och vad med: Do Until NOT objForum.EOF ?
Fått det löst... bytte ut alla recset till recset2 i andra förfrågan.
Dock, har jag inte fått nån bra if-sats som gör att den bara listar inlägg med matchande kolumn "forumkategori" till kolumnen "rubrik" i den första förfrågan.
PalleMedlem sedan apr. 20003 174 inlägg Nog snarare så att du ska använda en WHERE i den andra sql-satsen..
Hur ser din kod ut nu?
nu är problemet löst, jag kan posta koden så att andra kan se hur man kunde göra. Dock kan jag göra detta först i eftermiddag.