webForumDet fria alternativet

Snurrigt att skriva ut datan från mitt RS.

ASP

19 svar · 307 visningar · startad av solbulle

Medlem sedan mars 20015 287 inlägg
Frågan#1

Nu har jag snurrat till det för mig, säkert jättelätt men...
Jag har en SQL-fråga med diverse joins o dyl som jag kör och får fram ett RS.

Hur gör jag smartast för att skriva ut detta på min sida?
Jag har än så länge lagt det hela i en array med Getrows men det knasar ju om det saknas poster!?! (Positionerna varierar)

Nuvarande SQL:

SQL = "SELECT fld_mt_name, fld_mt_id, fld_o_title, fld_p_firstname, fld_p_lastname  FROM ((tbl_movie_title mt inner join tbl_movie m " &_
"on mt.fld_mt_id = m.fld_m_mtid) left outer join " &_
"tbl_occupation o on o.fld_o_id = m.fld_o_id) " &_
"left outer join " &_
"tbl_person p on p.fld_p_id = m.fld_p_id where fld_mt_id=" & int(Request.QueryString("id")) & ""

Ger tex detta om jag loopar ut allt med Getrows:

Kalle Anka
2
biroll
Kajsa
Kavat
------
Kalle Anka
2
huvudroll
Pippi
Långstrump
------
Kalle Anka
2
producent
Gunnar
Hellström

Jag vill ju på min sida kunna arbeta med all data, kanske lägga allt i variabler? Men hur i så fall?

Medlem sedan juni 200032 967 inlägg
#2

Jag förstår inte riktigt problemet.

Det enda som skiljer sig är att du inte har några fältnamn att referera till, så om du ändrar fältordningen i SELECT-frågan blir det lite jobbigt.

Om du vill lägga det i variabler så, i loopen:

strPerson = varGetRows(0, i)
intID = varGetRows(1,i)

Osv.

Mvh,

Medlem sedan mars 20015 287 inlägg
#3

Men... säg att jag vill skriva ut alla producenter (producenten).
Då motsvarar producenten kanske varGetRows(3,2) men om jag när jag kollar på nästa post/film så kanske jag saknar biroll i den filmen så dår får producenten en annan plats i mitt rs, väl?

Red. Nej det kanske inte är så? Platsen består men är tom om det saknas en post? Eller?

Medlem sedan juni 200032 967 inlägg
#4

Dina kolumner byter inte plats. Kolumn 4 i ett recordset motsvaras av kolumn 4 i den tvådimensionella arrayen.

Är det tomt så är det tomt, är det null så är det null. :)

Mvh,

Medlem sedan mars 20015 287 inlägg
#5

Lysande, jag har suttit o klurat på det där ett tag. man krånglar onekligen till det för sig ibland.

Bara för ordningens skull, visst måste man väl använda sig av Getrows i ett fall som detta?

Tycker du att det är en fördel att lägga ut posterna i mer lättfattliga variabler innan man börjar arbeta med dom? (Skriva ut dom på sidan)

Medlem sedan juni 200032 967 inlägg
#6

Man måste aldrig använda sig av GetRows().

När jag gör det, brukar jag oftast lägga in värden i variabler när jag jobbar med dem. Dels är det lättare för mig att hänga med, men man ska heller aldrig vara säker på att det inte är någon annan som ska rodda med min kod.

Mvh,

Medlem sedan mars 20015 287 inlägg
#7

Ok, men om jag nu INTE gör det måste jag ju loopa ut mitt RS, kolla om det finns något i det och i så fall lägga innehållet i en variabel.

Med GetRows() "måste" jag inte loopa ut allt (till variabler) utan kan använda mig av värdena direkt, typ:

response.write varGetRows(3,2)

Detta fungerar väl vare sig det är tomt eller inte vilket:

Response.write rs("fld_p_firstname")

inte gör!?!

Ursäkta om man är lite långsökt...

Medlem sedan juni 200032 967 inlägg
#8

Den enda skillnaden jag kan komma på är att om du kör med ett recordset och har fält av typen PM/MEMO (Text i SQL Server) kan du bara plocka ut värdet en gång, sedan är det liksom förverkat.
I ett sådant scenario måste du lägga in fältvärden i variabler.

Du måste dock inte alltid lägga in fältvärden från ett recordset i variabler innan användning, men jag rekommenderar dig att göra det, även om du använder GetRows. Ett annat tips är att kommentera koden, som ju kan vara ett fullgott alternativ, om inte bättre, eller, helst av allt, ett komplement för att öka kodförståelsen.

Mvh,

Medlem sedan mars 20015 287 inlägg
#9

Det stämmer det du skriver (vem skulle nu tro något annat?) PM/MEME-problemet har jag stött på.

I just detta fall är problemet att jag har flera fld_p_firstname tex, så då är det ju svårt att plocka fram dom var som helst på sidan med hjälp av rs("fld_p_firstname").
Jag vet ju inte vems förnamn det är.
varGetRows(3,2) ger mig ju, som du skrivit längre upp, alltid samma "data" -det kan bara syfta på en viss post. (I detta fall en Producents förnamn)

Medlem sedan nov. 20017 144 inlägg
#10

Hmmm.....
När började Gunnar Hellström producera Kalle Anka? ;)

Medlem sedan juni 200032 967 inlägg
#11

varGetRows(3,2) ger mig ju, som du skrivit längre upp, alltid samma "data" -det kan bara syfta på en viss post. (I detta fall en Producents förnamn)

Jo, men kan du vara säker på i vilken ordning posterna kommer? I min erfarenhet, nej. Man skall aldrig skriva kod som förutsätter att poster kommer i en viss ordning. Att fält kommer i en viss ordning bör man kunna förutsätta, men framför allt har du alltid möjlighet att påverka detta.

Vad finns i varGetRows(3, i)? Innehåller inte alltid det fältet samma information?

Mvh,

Medlem sedan mars 20015 287 inlägg
#12

Nu är jag inte riktigt med...

Men hur som helst uppfattar jag det hela som så att jag bör, säg överst på sidan när jag hämtar ut min data lägga det hela i variabler som jag senare använder mig av.
Detta för att ldels ätt kunna ändra på endast ett ställe om databasen alt. SQL-frågan ändras, dels för att få smidigare variabelnamn.

Hur ska jag bete mig för att kunna vara säker på hur posterna kommer? Går det egentligen?

Lite OT:

Jesper T:

Påstår du att innehållet i min databas är felaktigt eller? ;)

Medlem sedan juni 200032 967 inlägg
#13

Nej, du kan inte vara säker på i vilken ordning posterna kommer.
Inte så länge datat i tabellen / tabellerna ändras.

Du vill väl inte behöva ändra i koden bara för att du lägger till en ny film i databasen (eller vad det nu är du lagrar) ?

Det enda du kan vara säker på är att du får alla fält i den ordning du specificerat dem i SQL-frågan.

Mvh,

Medlem sedan mars 20015 287 inlägg
#14

Jag blir tokig!!! Inte får jag till det inte.

Nu fåtr jag för mig att det är SQL-satsen som spökar.
När det saknas tex en producent på en film så blir ju inte det fältet i mitt rs tomt utan den platsen/positionen tas av nästa post i frågan.
Om det är så kan jag ju omöjligt referera med hjälp av positionen i varGetRows(t,i)

På något sätt "måste" jag ju få till det att tex varGetRows(3,i) alltid är lika med tex producenten samt att varGetRows(4,i) alltid är lika med en birollsinnehavare.
Jag trodde att det skulle fungera så här men icke...
(Kanske är det som sagts hela tiden? :x )

tycker jag dragit denna vals förr, men vi får väl se hur mycket som fastnar efter denna omgång :r

Medlem sedan juni 200032 967 inlägg
#15

På något sätt "måste" jag ju få till det att tex varGetRows(3,i) alltid är lika med tex producenten samt att varGetRows(4,i) alltid är lika med en birollsinnehavare.

Ja, det är så det fungerar.

Nu ska jag inte krångla till något mer i detta inlägg.

Mvh,

Medlem sedan mars 20015 287 inlägg
#16

Ja, det är så det fungerar.

Jo, det är så det borde fungera, men jag märker nu att det fungerar inte så för mig.

Är det tomt i db:n så blir inte den platsen tom i min array utan den platsen tas av nästa pryl.

Tex om en film har två producenter och två huvudroller så ha de "sina" platser typ:

producenter:

varGetRows(3,0) samt varGetRows(3,1)

Å huvudroller:

varGetRows(5,0) samt varGetRows(5,1)

men saknar jag en producent i nästa film blir det typ så här:

producent:

varGetRows(3,0)

Å huvudroller:

varGetRows(4,0) samt varGetRows(4,1)

Hmmm hur går det till Är det min SQL med joins o prylar eller?

Medlem sedan juni 200032 967 inlägg
#17

Jag tror du pratar förbi mig.

Givetvis får du olika antal poster (rader), men inte kan antalet kolumner skilja från post till post? Du måste väl ha ett fält som bestämmer om det är en producent eller en skådespelare eller en sminkös? Trigga på det fältet istället för vilket nummer raden har, för det kommer inte att fungera.

Mvh,

Medlem sedan mars 20015 287 inlägg
#18

Nu har jag snurrat till det ordentligt, o klocka är mitt på dagen så inmte kan man skylla på att man är trött.
Så här ser min kod ut:

SQL = "SELECT fld_mt_name, fld_mt_id, fld_o_title, fld_p_firstname, fld_p_lastname, fld_g_title, fld_s_title FROM ((((tbl_movie_title mt inner join tbl_movie m " &_
"on mt.fld_mt_id = m.fld_m_mtid) " &_
" left outer join " &_
"tbl_person p on p.fld_p_id = m.fld_p_id) " &_
" left outer join " &_
"tbl_occupation o on o.fld_o_id = m.fld_o_id) " &_
"left outer join " &_
"tbl_sound s on s.fld_s_id = m.fld_s_id) " &_
"left outer join " &_
"tbl_genre g on g.fld_g_id = m.fld_g_id where fld_mt_id=" & int(Request.QueryString("id")) & ""

set rs = connect.execute(SQL)

found = not rs.eof
if found then

allaFields=rs.getrows

	ant_inlagg = ubound(allaFields,2)

For i = 0 to ant_inlagg
for t = 0 to ubound(allaFields,1)

'Response.write rs.Fields(t).Name & "    "
response.write allaFields(t,i) & "<br>"

response.write "t,i= " & t & "," & i & "<br>"

Next
Response.write "------<br>" 				'Nytt varv
Next

End If

Detta loopar ut all data jag hämtar samt skriver ut platsen (t,i) vilken i mina ögon bör vara samma för varje varv man gör men detta är vad som kommer ut:

Kalle Anka
t,i= 0,0
2
t,i= 1,0
biroll
t,i= 2,0
Kajsa
t,i= 3,0
Kavat
t,i= 4,0

t,i= 5,0

t,i= 6,0
------
Kalle Anka
t,i= 0,1
2
t,i= 1,1
huvudroll
t,i= 2,1
Pippi
t,i= 3,1
Långstrump
t,i= 4,1

t,i= 5,1

t,i= 6,1
------
Kalle Anka
t,i= 0,2
2
t,i= 1,2
producent
t,i= 2,2
Gunnar
t,i= 3,2
Hellström
t,i= 4,2

t,i= 5,2

t,i= 6,2

Är jag ute o cyklar som vanligt???

Medlem sedan juni 200032 967 inlägg
#19

Jag kan inte för mitt liv förstå problemet. :)

Kan du på samma sätt beskriva hur du tycker att datat ska se ut när du loopar igenom din array?

Mvh,

Medlem sedan mars 20015 287 inlägg
#20

Om jag ska referera till en biroll måste jag ju veta dess position i arrayen, i första vändan har den platsen 2,0. Då förväntar jag mig att i nästa varv skall jag finna en eventuell till biroll på plats 2,1 men där är nu en huvudroll. Gå jag ännu längre ner finner jag igen en producent på plats 2,3 osv.
I min lilla värld trodde jag att det skulle bli som så att 2,i alltid motsvarar en o samma sak, typ biroll.

Fast när jag nu tänker lite(!) så är det klart att hur ska nu databasen el. sql:en kunna veta det?

Kanske är det så att min modell är förkastlig, det här med relationstabeller är verkligen inte min grej.

Ska man skriva ut allt "löpande" är det ju ok men om man vill skriva ut det snyggt på en sida med en mall där biroll ska stå på ett ställe och producent på ett annat osv blir det ju svårt... (för mig)

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)