webForumDet fria alternativet

lista tabel och undertabeller

ASPur ASP

28 svar · 791 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

... skulle jag vilja. Men hur gör jag detta?

Medlem sedan mars 20015 287 inlägg
#2

Euh? Vad?

Medlem sedan mars 2002823 inlägg
#3

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?

Medlem sedan mars 2002823 inlägg
#4

Har försökt med följande:

<html>
<head>
<title>V&auml;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

Medlem sedan juni 200032 969 inlägg
#5

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

Medlem sedan mars 2002823 inlägg
#6

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

Medlem sedan juni 200032 969 inlägg
#7

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.

Medlem sedan mars 2002823 inlägg
#8

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

Medlem sedan juni 200032 969 inlägg
#9

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?

Medlem sedan mars 2002823 inlägg
#10

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?

Medlem sedan juni 200032 969 inlägg
#11

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.

Medlem sedan mars 2002823 inlägg
#12

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>"
Medlem sedan mars 2002823 inlägg
#13

Fick nästan till det hela, då jag upptäckte fel i SQL2....
DEt ja gförsöker åstadkkomma är:

  1. Skriva ut typeNamn fr tblFluidtypes - detta fumkar mkt bra genom strSQL1
  2. efter att första namnet (typeID =1) skirvs ut gå till tblFluidRelat och välja de fluidID där typeID =1
  3. gå till tblFluids och skriv ut korrespondrande FluidNamn
  4. skriv ut namnet på typeID=2
  5. gå till tblFluidRelat och välja de fluidID där typeID =2 ....

Hoppas ni förstår:OO
Men jag får varken till SQL2 eller de två Loopen

Medlem sedan juni 200032 969 inlägg
#14

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

Medlem sedan mars 2002823 inlägg
#15

joina in även tblFluidTypes

...
och hur gör jag detta?
inner join eller annat?

Medlem sedan juni 200032 969 inlägg
#16

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

Medlem sedan mars 2002823 inlägg
#17

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

Medlem sedan mars 2002823 inlägg
#18

det behöver inte vara just @nders som svarar ;)
Varsegod och hoppa in i tråden :birp

Medlem sedan mars 2002823 inlägg
#19

upps, hoppas jag inte gjort bort mig nu - och hoppas att @nders inte tog illa upp.

Medlem sedan mars 2002823 inlägg
#20

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 :

  1. rs1("typeNamn") skall vara rubrik
  2. nästa rubrik (dvs rs1("typeNamn") ) skall komma när alla rs1("FluidNamn") har loopats fram
138 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)