Euh? Vad?
... skulle jag vilja. Men hur gör jag detta?
28 svar · 791 visningar · startad av plelkes
... skulle jag vilja. Men hur gör jag detta?
Euh? Vad?
om du tittar i tblFluidtypes så ser du att den innehåller flera undertabeller.
Jag skulle vilja skriva ut innehållet typ:
blodprodukter
albumin
blod
plasma
parenteral
Intralipid
Glavamin
Kabiven
osv
Förstår du/ni?
Har försökt med följande:
<html>
<head>
<title>Vätskebalans</title>
</head>
<BODY>
<%
Set vbalans = Server.CreateObject("ADODB.Connection")
vbalans.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("/vetskebalans/vbalans.mdb")
vbalans.ConnectionString = "Data Source='" & MdbFilePath & "'"
vbalans.open
strSQL1 =" SELECT * FROM tblFluidTypes ORDER by typeID ASC"
strSQL2 =" SELECT * FROM tblFluidRelat, tblFluids WHERE typeID = FluidID"
Set rs = vbalans.Execute (strSQL1)
Set rs = vbalans.Execute (strSQL2)
Do While Not rs.EOF
Response.Write rs("tblFluidTypes.typeNamn") &"<BR>"
Response.Write rs("tblFluids.FluidNamn") & "<BR>"
rs.MoveNext
Loop
vbalans.Close
Set vbalans = Nothing
%>
</body>
</html>
får fel
Det angivna fältet 'FluidID' kan referera till fler än en av de angivna tabellerna som är uppräknade i SQL -uttryckets FROM instruktion
För det första:
Set rs = vbalans.Execute (strSQL1)
Set rs = vbalans.Execute (strSQL2)
Det innebär att du använder ett och samma recordset till två saker, men exekveringen av den första SQL-frågan görs helt i onödan, eftersom du bara skriver över allt med resultatet av SQL-fråga 2.
För det andra:
Response.Write rs("tblFluidTypes.typeNamn")
Du kan inte referera till tabellnamn när du skriver ut datat, utan du kan endast ange fältnamn. Kvalificering på detta sätt kan du endast göra i SQL-frågan.
För det tredje, felmeddelandet. Felet betyder att du i din SQL-fråga har med ett fält, som finns i mer än en tabell. Det innebär att du i din SQL-fråga måste berätta vilken tabell det är du menar. Ett exempel med SQLfråga nummer två (som jag antar är den som skapar felet:
strSQL2 =" SELECT * FROM tblFluidRelat, tblFluids WHERE [b]tblFluidRelat.[/b]typeID = [b]tblFluids.[/b]FluidID"
Mvh
Lite ändringar:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
html>
<head>
<title>Vätskebalans</title>
</head>
<BODY>
<%
Set vbalans = Server.CreateObject("ADODB.Connection")
vbalans.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("/vetskebalans/vbalans.mdb")
vbalans.ConnectionString = "Data Source='" & MdbFilePath & "'"
vbalans.open
strSQL =" SELECT * FROM tblFluidTypes ORDER by typeID ASC"
strSQL =" SELECT * FROM tblFluidRelat, tblFluids WHERE tblFluidRelat.typeID = tblFluids.FluidID"
Set rs = vbalans.Execute (strSQL)
Do While Not rs.EOF
Response.Write rs("typeNamn") & "<BR>"
Response.Write rs("FluidNamn") & "<BR>"
rs.MoveNext
Loop
vbalans.Close
Set vbalans = Nothing
%>
</body>
</html>
Nu kommer felet
ADODB Recordset '800a0cc1' Objektet kunde inte hittas i mängden med det begärda namnet eller numret
Den första av de två SQL-frågorna körs aldrig. Ska den inte det?
Felmeddelandet betyder att något av fälten du försöker skriva ut (alltså typeNamn eller FluidNamn) inte finns i ditt recordset.
Den första av de två SQL-frågorna körs aldrig. Ska den inte det?
Jo, skall vara
strSQL = SQL & " SELECT * FROM tblFluidRelat, tblFluids WHERE tblFluidRelat.typeID = tblFluids.FluidID"
Felmeddelandet betyder att något av fälten du försöker skriva ut (alltså typeNamn eller FluidNamn) inte finns i ditt recordset.
mitt rs är väl vbalans.mdb? då förstår jag inte riktigt, för typeNamn finns i tblFluidTypes
FluidNamn i tblFluids
plelkes skrev:
mitt rs är väl vbalans.mdb? då förstår jag inte riktigt, för typeNamn finns i tblFluidTypes
FluidNamn i tblFluids
Nej, ditt recordset är resultatet av SQL-frågan som körs. I detta fall, eftersom du kör två SQL-frågor in i samma objekt, blir resultatet ett objekt med två recordsets, inte ett recordset med det samlade resultatet.
När du har öppnat recordsetet har du resultatet från den första SQL-frågan i objektet. För att komma åt resultatet från den andra frågan måste du aktivera recordset nummer två i objektet, och såvida jag inte missminner mig gör du det genom att köra metoden .NextRecordset. Möjligen måste du öppna recordsetet med någon speciell cursortyp, det vet jag faktiskt inte.
Varför använder du inte två separata recordsets istället för att använda samma recordset till två separata frågor?
Varför använder du inte två separata recordsets istället för att använda samma recordset till två separata frågor?[/CITAT
jag försökte ju med detta, men de tog ut varandra.
Kan jag få ett ex hur det kunde se ut med 2 separata frågor?
Du får se till att inte använda samma namn på recordsetobjektet. Det var det du gjorde fel, du skrev ju att båda skulle heta RS.
Använder du samma namn på saker och ting så blir det så att det som tidigare fanns i variabeln / objektet förverkas och slutar existera.
Så jag skulle kunna köra:
Set rs1 = vbalans.Execute (strSQL1)
Set rs2 = vbalans.Execute (strSQL2)
'
'
'
Response.Write rs1("typeNamn") & "<BR>"
Response.Write rs2("FluidNamn") & "<BR>"
Fick nästan till det hela, då jag upptäckte fel i SQL2....
DEt ja gförsöker åstadkkomma är:
Hoppas ni förstår:OO
Men jag får varken till SQL2 eller de två Loopen
Det jag tror att du skulle behöva göra egentligen (om jag förstår dig rätt), är att joina in även tblFluidTypes i den SQL-fråga som nu heter strSQL2, och endast använda den frågan. Då kommer du ha ett recordset med all data, en loop i asp-koden, och betydligt lättare att skriva ut rätt värden.
Mvh
plelkes skrev:
joina in även tblFluidTypes
...
och hur gör jag detta?
inner join eller annat?
Du kan använda JOIN i SQL-frågan, eller göra som du gjorde med den första, dvs bara använd tabell.fält = tabell2.fält2 i WHERE-delen i SQL-frågan.
Mvh
använd tabell.fält = tabell2.fält2 i WHERE-delen i SQL-frågan
förstår inte riktigt hur du @nders menar...
tblFluidTypes består f.n. av 6 poster. varje post består i sin tur av x antal (under)poster.
Det jag vill är att först skriva ut första posten, sedan alla underposter. Skriva ut andra post fr tblFluidTypes och sedan dess underposter. Och fortsätta så tills tblFluidTypes sista post och dess underpost är utskrivna.
Jag förstår inte hur jag skall l´konstruera för att det skulle funka
det behöver inte vara just @nders som svarar ;)
Varsegod och hoppa in i tråden :birp
upps, hoppas jag inte gjort bort mig nu - och hoppas att @nders inte tog illa upp.
Jag har äntligen kommit en bit på vägen
:<%@LANGUAGE="VBSCRIPT"%>
<%
Set vbalans = Server.CreateObject("ADODB.Connection")
vbalans.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("/vetskebalans/vbalans.mdb")
vbalans.ConnectionString = "Data Source='" & MdbFilePath & "'"
vbalans.open
strSQL1 =" SELECT * FROM tblFluidRelat, tblFluids, tblFluidTypes WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND tblFluidRelat.typeID = tblFluidTypes.typeID"
Set rs1 = vbalans.Execute (strSQL1)
Do While Not rs1.EOF
Response.Write rs1("typeNamn") & " " & rs1("FluidNamn") & "<BR>"
rs1.MoveNext
Loop
vbalans.Close
Set vbalans = Nothing
%>
För att det skall se ut som jag vill :