Jag har en relationsdb som jag har två tabeller med en 1:M koppling på. Borde du kanske inte bygga om tabellerna? Hej! Något sånt här kanske? Ok..har fått en lösning av Trash nu, som jag tror kommer funka bra, om jag bara kan få ordning på for-satsen. Rätt lösning ser ut så här: Om du vill ha snygg och effektiv kod kan du använda MSDataShape:Databas fråga..
I många sidan har jag två fält, ID och Namn. Detta är olika grupper.
I den andra har jag de saker som tillhör de olika grupperna.
Tanken är att jag ska få fram alla poster under tillhörande grupp på en o samma sida, liknande så här:
GRUPP 1
sak1
sak2
sak3
GRUPP 2
sak4
sak5
GRUPP 3
sak6
sak7
sak8
osv....
Hur gör jag för att lösa detta? Någon som har nåt exempel?
/LariSv: Databas fråga..
Grupptabell:
GruppID
GruppNamn
Saktabell:
ID
GruppID
SakNamn
Och sedan länka tabellerna mellan de båda GruppID?
Då kan du sedan gruppera ditt resultat som du vill ha det.Sv: Databas fråga..
Jag har det redan så, det existerar redan en sekundärnyckel i saktabellen.
Så här ser båda tabellerna ut:
tblGroups
fltGID
fltName
tblWine
fltWID
fltName
fltGID
fltYear
Det jag undrar är hur jag kan få fram alla poster på en o samma sida, där varje vin hamnar under rätt grupp. Jag vet inte hur jag ska förklara det hela på ett annat sätt.
Det är en prislista jag ska göra, som ska vara uppdelad i olika grupper, under varje grupp finns det ett antal viner, alla grupperna ska visas på sidan.
Kopplingen mellan tabellerna går via fltGID
/LariSv: Databas fråga..
<code>
dim con
set con = createobject("adodb.connection")
con.connectionstring = ""
con.cursorlocation = 3
con.open
set rsGroups=con.execute("select * from tblGroups")
set rsValues=con.execute("select * from tblWine")
for i = 1 to rsGroups.recordcount
response.write rsGroups("fltName")
rsValues.Filter = "fltGID=" & rsGroups("fltGID")
if rsValues.recordcount > 0 then
rsValues.movefirst
for j = 1 to rsValues.recordcount
response.write rsValues("fltName")
rsValues.Movenext
next 'j
end if
rsValues.movenext
next 'i
</code>Sv: Databas fråga..
Har provat med den här koden:
<code>
<%
Set connection = Server.CreateObject("ADODB.Connection")
connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../db/universalwine.mdb")
'connection.connectionstring = ""
connection.cursorlocation = 3
set rsGroups=connection.execute("select * from tblGroups")
set rsValues=connection.execute("select * from tblWine")
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body MS_POSITIONING="FlowLayout">
<%for i = 1 to rsGroups.recordcount
response.Write rsGroups("fltName")
rsValues.Filter = "fltGID=" & rsGroups("fltGID")
rsValues.movefirst
for j = 1 to rsValues.recordcount
response.write rsValues("fltName")
rsValues.Movenext
next j
rsValues.movenext
next i
%>
</body>
</html>
</code>
Och får felmeddelandet:
Kompileringsfel i Microsoft VBScript error '800a0401'
Slut på programsats förväntas.
/mep02/lari/universalwine/wineprint.asp, line 23
next j
-----^
Om jag ändrar koden till detta (plockat bort j och i):
<code>
<%for i = 1 to rsGroups.recordcount
response.Write rsGroups("fltName")
rsValues.Filter = "fltGID=" & rsGroups("fltGID")
rsValues.movefirst
for j = 1 to rsValues.recordcount
response.write rsValues("fltName")
rsValues.Movenext
next
rsValues.movenext
next
%>
</code>
Då får jag felmeddelandet:
Corbett Canyon - USACorbett Canyon <----detta är första gruppen och första posten!
ADODB.Recordset error '800a0bcd'
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats; åtgärden som programmet begärt kräver en aktuell post.
/mep02/lari/universalwine/wineprint.asp, line 23
Här lyckas den iaf plocka första gruppen och första posten.Sv: Databas fråga..
<code>
<%
Set connection = Server.CreateObject("ADODB.Connection")
connection.connectionstring = "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("../db/universalwine.mdb")
connection.cursorlocation = 3
connection.Open
set rsGroups=connection.execute("select * from tblGroups")
set rsValues=connection.execute("select * from tblWine")
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body MS_POSITIONING="FlowLayout">
<%
for i = 1 to rsGroups.recordcount
response.Write rsGroups("fltName")
rsValues.Filter = "fltGID=" & rsGroups("fltGID")
If rsValues.Recordcount > 0 Then
rsValues.movefirst
for j = 1 to rsValues.recordcount
response.write rsValues("fltName")
rsValues.Movenext
next
End If
rsGroups.movenext
next
%>
</body>
</html>
</code>
Tack för hjälpen Trash!!Sv: Databas fråga..
<code>
<%
Dim rsSub
Dim rsMain
Dim Connection
Dim StartTime
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=MSDataShape.1;" & _
"Data Provider=MICROSOFT.JET.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("DinDatabas.mdb")
Set rsMain = Server.CreateObject("ADODB.Recordset")
rsMain.Open "SHAPE {SELECT * FROM tblGroups} AS Main" & vbCrLf & _
"APPEND ({SELECT * FROM tblWine} AS Sub RELATE fltGID TO fltGID) AS Sub", Connection
Do Until rsMain.EOF
Response.Write "<h3>" rsMain("fltName") & "</h3>"
Set rsSub = rsMain("Sub").Value
Do Until rsSub.EOF
Response.Write rsSub("fltName") & "<br>" & vbCrLf
rsSub.MoveNext
Loop
rsSub.Close
rsMain.MoveNext
Loop
rsMain.Close
Set rsMain = Nothing
Connection.Close
Set Connection = Nothing
%>
</code>