Hej... MSDataShape är nog den snyggaste lösningen: Så har jag skrivit: Testa med: Det funkar nu... klurig query
Jag håller på att göra en länk sida där jag vill sortera länkarna efter kategori på detta sättet:
kategorinamn 1
länk 1
länk 2
kategorinamn 2
länk1
länk2
Till detta har jag två tabeller i en sql databas
1. TBL_linkkat
kategoriID
kategorinamn
2 TBL_links
ID
Linknamn
KategoriID
Här är koden jag har använt mig av för att hämta kategorinamnen:
<code>
<%
StrSQL = "Select kategoriID, kategoriNamn from TBL_linkkat"
.
.
.
do while not rs.EOF
response.write "<tr>"
response.write "<td class=""lila"" height=""18"">" & rs.fields (1) & "</td>"
response.write "</tr>"
response.write "<tr>"
response.write "<td> </td>"
response.write "</tr>"
rs.movenext
loop
rs.close
cn.close
set rs = Nothing
set cn = Nothing
%>
</code>
Jag vill kunna komma in på länk sidan utan att behöva trycka på nåt för att få fram länkarna under sin resp. kategori, alltså kategorinamnen är inga länkar så jag kan inte få med mig någon information från de (inga ?katid= el liknande).
Problemet i sig är att jag vet inte hur jag ska formulera queryn för att loppa mig genom länkarna under kategorierna och jag vet inte heller var jag ska lägga den.
Ska jag öppna ett nytt recordset? Sv: klurig query
<code>
<%
Dim rsSub
Dim rsMain
Dim Connection
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=MSDataShape.1;" & _
"Data Provider=MICROSOFT.JET.OLEDB.4.0;" & _
"Data Source=" & FileName
Set rsMain = Server.CreateObject("ADODB.Recordset")
rsMain.Open "SHAPE {SELECT kategoriID, kategorinamn FROM TBL_linkkat
} AS Main" & vbCrLf & _
"APPEND ({SELECT ID, Linknamn, KategoriID FROM TBL_links
} AS Sub RELATE kategoriID TO KategoriID) AS Sub", Connection
Do Until rsMain.EOF
'Skriv ut Kategori här
Set rsSub = rsMain("Sub").Value
Do Until rsSub.EOF
'Skriv ut länkar här
rsSub.MoveNext
Loop
rsSub.Close
Set rsSub = Nothing
rsMain.MoveNext
Loop
rsMain.Close
Set rsMain = Nothing
Connection.Close
Set Connection = Nothing
%>
</code>Sv: klurig query
<code>
<%
const adOpenStatic=3, adLockOptimistic=3
const CONN_STRING = "Data Provider=SQLOLEDB;Data Source=Behindbars; Initial Catalog=Saarvirecords;"
Dim rsmain, rssub, cn
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Provider=MSDataShape.1", CONN_STRING, "sa", ""
Set rsmain = Server.CreateObject("ADODB.Recordset")
rsmain.Open "SHAPE {SELECT kategoriID, kategorinamn FROM TBL_linkkat} AS Main" & vbCrLf & _
"APPEND ({SELECT ID, Linknamn, KategoriID FROM TBL_links} AS Sub RELATE kategoriID TO KategoriID) AS Sub", cn
%>
<%
Do Until rsMain.EOF
response.write "<tr>"
response.write "<td class=""lila"" height=""18"">" & rsmain("kategorinamn") & "</td>" response.write "</tr>"
Set rsSub = rsMain("Sub").Value
Do Until rsSub.EOF
response.write "<tr>"
response.write "<td>" & rssub("linknamn") & "</td>"
response.write "</tr>"
rssub.movenext
loop
response.write "<tr>"
esponse.write "<td> </td>"
response.write "</tr>"
rsmain.movenext
loop
rsmain.close
rssub.close
cn.close
set rsmain = Nothing
set rssub = Nothing
set cn = Nothing
%>
</code>
Men jag får http 500 internal server error... vad har jag gjort för fel?
Tack för hjälpenSv: klurig query
<code>
<%
Dim rsmain, rssub, cn
const adOpenStatic=3, adLockOptimistic=3
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Provider=MSDataShape.1;" & _
"Data Provider=MSDASQL;" & _
"Data Source=Behindbars;" & _
"User ID=sa;" & _
"Initial Catalog=Saarvirecords;" & _
"Persist Security Info=False;"
Set rsMain = Server.CreateObject("ADODB.Recordset")
rsMain.Open "SHAPE {SELECT kategoriID, kategorinamn FROM TBL_linkkat} AS Main" & vbCrLf & _
"APPEND ({SELECT ID, Linknamn, KategoriID FROM TBL_links} AS Sub RELATE kategoriID TO KategoriID) AS Sub", cn
Do Until rsMain.EOF
response.write "<tr>"
response.write "<td class=""lila"" height=""18"">" & rsmain("kategorinamn") & "</td>"
response.write "</tr>"
Set rsSub = rsMain("Sub").Value
Do Until rsSub.EOF
response.write "<tr>"
response.write "<td>" & rssub("linknamn") & "</td>"
response.write "</tr>"
rssub.movenext
Loop
rssub.close
Set rssub = Nothing
response.write "<tr>"
response.write "<td> </td>"
response.write "</tr>"
rsmain.movenext
Loop
rsmain.close
set rsmain = Nothing
cn.close
set cn = Nothing
%>
</code>
Prova annars:
<code>
cn.Open "Provider=MSDataShape.1;" & _
"Persist Security Info=False;" & _
"Data Source=Behindbars;" & _
"User ID=sa;" & _
"Initial Catalog=Saarvirecords;" & _
"Data Provider=MSDASQL"
</code>Sv: klurig query
Jag skrev:
<code>
cn.Open "Provider=MSDataShape;" & _
"Persist Security Info=False;" & _
"Data Source=Behindbars;" & _
"User ID=sa;" & _
"Initial Catalog=Saarvirecords;" & _
"Data Provider=SQLOLEDB"
</code>
Tack så hemsk så mycket för din hjälp, hade ingen aning om "SHAPE"... mycket användbar... tack ännu en gång