Anledningen till att din sida blir seg beror på att du loopar skapandet av recordset:s. Det är närmast en dödssynd!
Fel på lite <% %> osv. är normalt inget problem.
------------------
En eller annan godbit från pannan
42 svar · 453 visningar · startad av brw · sida 2 av 3
God morgon! Jag har en "liten" kodsnutt som presenterar en meny från en databas som laddar om sidan när man klickat på ett val så kommer en undermeny upp. Jag tycker den laddar lite segt.. visserligen beror det ju lite på webbservern och snabbheten på linan men man kan ju försöka få ner koden så optimal som möjligt. Jag har försökt så gott jag kan och tänkte om någon har lust att hjälpa mig oc
Läs frågan i sin helhet →Anledningen till att din sida blir seg beror på att du loopar skapandet av recordset:s. Det är närmast en dödssynd!
Fel på lite <% %> osv. är normalt inget problem.
------------------
En eller annan godbit från pannan
Jag har inte mer än ögnat på din kod, men det ser ut som du skulle kunna lösa det hela med en join och lite logik i ASP-koden.
------------------
En eller annan godbit från pannan
Toonster, vad yrar du om? ;)
Ska man skriva ett Javascript med response.write blir det problem, eftersom man i Javascript har ' och inte ", då kan man ha "" som blir ' i den genererade koden.
Jag vet att du vet hur C-liknande syntax funkar, men så här gör man förstås:
Response.Write('Det går att använda \'enkelfnuttar\'... ');
Response.Write("... och \"dubbelfnuttar\" utan problem.");
------------------
"There's no such thing as a stupid question, only stupid people"
[Redigerat av spango den 14 aug 2001]
Herman.. du skulle inte kunna bistå med ett förslag på en JOIN och som du kallar det logik? så får man se på lite alternativ.. :)
------------------
Ingenting är omöjligt, bara en utmaning.
Som jag förstår det räcker det typ att join:ar menykategori.menyvalid=menyval.id
och sorterar efter menyval.ordning.
Sedan i ASP koden If:ar du om fälten från menykategori ska skrivas ut eller inte.
------------------
En eller annan godbit från pannan
Hehe okej!
Jag har sökt runt lite här och det jag kan konstatera är att det lär bli en rejäl prestandaförbättring med att använda join.
Jag har aldrig använt join utan enbart kört med loopar i loopar * :r skämms *
Så jag pastar in min kod lite förkortad här så kanske nån kan visa hur det skulle kunna se ut om jag använder join.
<%
Dim SQLmenyval, rsmv, dl, mvurl, SQLmenylank, RSml
SQLmenyval = "Select id, title, menyval, dl, url, target FROM menyval WHERE menyid = 26 ORDER BY ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)
Do until RSmv.EOF
valid = RSmv("id")
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
%>
<%=mvurl%>
<%
SQLmenylank = "Select url, menykategori FROM menykategori WHERE menyvalid = "& valid &" ORDER BY ordning ASC"
Set RSml = Connection.Execute(SQLmenylank)
Do until RSml.EOF
url = RSml("url")
menykategori = RSml("menykategori")
%>
<%=menykategori%>
<%
RSml.Movenext
Loop
RSml.Close
Set RSml = Nothing
%>
<%
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
Connection.Close
Set connection = Nothing
%>
------------------
Ingenting är omöjligt, bara en utmaning.
Något sådant:
<%
Dim SQLmenyval, rsmv, dl, mvurl, SQLmenylank, intLastMVID
SQLmeny = "Select menyval.id as mvid, menyval.title, menyval. menyval, menyval.dl, menyval.url as mvurl, menyval.target, " & _
"menykategori.url as mkurl, menykategori.menykategori " & _
"FROM menyval, menykategori " & _
"WHERE (menyval.id = menykategori.menyvalid) AND menyval.menyid = 26 ORDER BY ordning ASC"
Set RSmv = Connection.Execute(SQLmeny)
Do until RSmv.EOF
valid = RSmv("mvid")
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("mvurl")
If intLastMVID <> valid Then
Response.Write mvurl
End If
url = RSml("mkurl")
menykategori = RSml("menykategori")
Response.write menykategori
intLastMVID = valid
RSmv.Movenext
Loop
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
Connection.Close
Set connection = Nothing
%>
som sagt ... e otestad kod ...
cya,
PatrikB
------------------
*så kan det gå när inte haspen är på*
[Redigerat av PatrikB den 15 aug 2001]
En fråga bara..
[b]([/b]menyval.id = menykategori.menyvalid[b])[/b] AND menyval.menyid = 26 ORDER BY ordning ASC"
menyval.id = menykategori.menyvalid
vad gör paranteserna för nytta där? :q
------------------
I have comed to take what is rightfully mine. Existence in eternity. And all i need is your creditcard number. | Existence
[Redigerat av OveRRidE den 15 aug 2001]
Ingen mer nytta än att kanske öka läsbarheten för ett långt uttryck.
Jag får fan inte till det..
Med den kod jag fick så skriver den bara ut en undermeny.. det kan ju i princip vara hur många som helst.. och sen skriver den bara ut de som har undermeny.. om det finns en länk som inte har undermeny så kommer den inte med.
Exemel på hur den skriver ut:
Produkter
- Kaninfoder
Kontakta oss
- Mailformulär
Det kan ju vara
Produkter
- Kaninfoder
- Hundmat
- Leksaker
Kontakta oss
- Mailformulär
- Telefon
Sök (utan undermeny)
Har nån lust att hjälpa mig få till koden nedan med innerjoin så att sidan laddar snabbare?
Såhär ser min kod ut när den fungerar och inte använder innerjoin:
<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
<%
Dim SQLmenyval, rsmv, dl, mvurl, SQLmenylank, RSml
SQLmenyval = "Select id, title, menyval, dl, url, target FROM menyval WHERE menyid = 26 ORDER BY ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)
Do until RSmv.EOF
valid = RSmv("id")
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
%>
tempMenu = new NavBarMenu(0, 140);
<% If dl = "j" Then %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));
<% Else %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));
<% End If %>
<%
SQLmenylank = "Select url, menykategori FROM menykategori WHERE menyvalid = "& valid &" ORDER BY ordning ASC"
Set RSml = Connection.Execute(SQLmenylank)
Do until RSml.EOF
url = RSml("url")
menykategori = RSml("menykategori")
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=url%>"));
<%
RSml.Movenext
Loop
RSml.Close
Set RSml = Nothing
%>
myNavBar.addMenu(tempMenu);
<%
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>
function init() {
myNavBar.create();
}
</script>
------------------
Ingenting är omöjligt, bara en utmaning.
<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori
SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)
oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if clng(oldid) <> clng(valid) then
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);
<%If dl = "j" Then %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));
<% Else %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));
<% End If
End if %>
mkurl = RSmw("mkurl")
menykategori = RSmw("menykategori")
if not isnull(mkurl) then
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));
myNavBar.addMenu(tempMenu);
<%
end if
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>
function init() {
myNavBar.create();
}
</script>
------------------
essentitia preter non sans multiplicandum
red: lite småfel.
[Redigerat av LarsG den 27 aug 2001]
Tackar lasseG.. :)
det fungerar nästan som jag vill ha det.. men det är fan klurigt det här med join så jag skulle behöva lite hjälp att finjustera det sista.
Med följande kod
<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori
SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)
oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if clng(oldid) <> clng(valid) then
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);
<%If dl = "j" Then %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));
myNavBar.addMenu(tempMenu);
<% Else %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));
<%
End If
End if
%>
<%
mkurl = RSmv("mkurl")
menykategori = RSmv("menykategori")
if not isnull(menykategori) then
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));
<% End If %>
myNavBar.addMenu(tempMenu);
<%
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>
function init() {
myNavBar.create();
}
</script>
så skriver den ut posterna såhär:
Om det är direktlänk så ska den skriva ut följande 3 rader:
tempMenu = new NavBarMenu(0, 140);
tempMenu.addItem(new NavBarMenuItem(' Startsida ', "default.asp"));
myNavBar.addMenu(tempMenu);
Ovanstående är rätt.. men när den skriver ut en meny som har underkategorier dvs.. att det direktlänk = "n" så skriver den såhär:
tempMenu = new NavBarMenu(0, 140);
tempMenu.addItem(new NavBarMenuItem(' Fakta ', "#"));
tempMenu.addItem(new NavBarMenuItem(' Utbildning', ""));
myNavBar.addMenu(tempMenu);
tempMenu.addItem(new NavBarMenuItem(' Historia', ""));
myNavBar.addMenu(tempMenu);
tempMenu.addItem(new NavBarMenuItem(' Personal', ""));
myNavBar.addMenu(tempMenu);
Såhär ska det se ut: (det är alltså en ny post i menyval.. den första som heter startsida var direktlänk = "j" och sen kommer nästa post som är Fakta som har direktlänk = "n" och den har undermeny med utbildning, historia mm som menyval.. då ska den ju loopa fram alla som är i undermenyn fast utan den där myNavBar.addMenu(tempMenu) efter varje rad.. det ska den göra när den är klar.. när det inte finns några fler i den undermenyn...):
tempMenu = new NavBarMenu(0, 140);
tempMenu.addItem(new NavBarMenuItem(' Fakta ', "#"));
tempMenu.addItem(new NavBarMenuItem(' Utbildning', ""));
tempMenu.addItem(new NavBarMenuItem(' Historia', ""));
tempMenu.addItem(new NavBarMenuItem(' Personal', ""));
myNavBar.addMenu(tempMenu);
Kan du hjälpa mig få de att fungera så vore det bussigt.
------------------
Ingenting är omöjligt, bara en utmaning.
[Redigerat av brw den 28 aug 2001]
Så, nu är det kväll.
<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori
SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)
oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if clng(oldid) <> clng(valid) then
if cint(oldid) <> 0 then
%>
myNavBar.addMenu(tempMenu);
<%
end if
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);
<%If dl = "j" Then %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));
<% Else %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));
<%
End If
End if
%>
<%
mkurl = RSmv("mkurl")
menykategori = RSmv("menykategori")
if not isnull(menykategori) then
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));
<% End If %>
<%
RSmv.Movenext
Loop
RSmv.Close
Set RSmv = Nothing
%>
function init() {
myNavBar.create();
}
</script>
Så, hoppas det blir bättre, har dock ingen möjlighet att testa.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 28 aug 2001]
Tackar Lasse... nu fungerar det skitbra!
Men en fråga.. jag vill sortera menykategori efter ORDER BY ordning ASC .. vad ska jag lägga till?
Den visar dem lite hur som helst.. men huvudvalen blir rätt..
Förresten.. känner du till nån "ASP kurs" typ Wides eller någon annans som går igenom join mm? så man kan lära sig verkar ju fan bra krångligt ;)
------------------
Ingenting är omöjligt, bara en utmaning.
Hehe glöm ovanstående.. jag löste det
:)
" ORDER BY m.ordning, mk.ordning ASC"
------------------
Ingenting är omöjligt, bara en utmaning.
Jaså, du har inte problem med att sista menyn inte kommer ut ordentligt?
<script language="JavaScript">
var myNavBar = new NavBar(780);
myNavBar.setSizes(0, 2, 0);
var tempMenu;
myNavBar.setColors("#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#ffffff", "#000000", "#000000", "#CCCCCC");
myNavBar.setFonts("Verdana, Arial, Geneva", "plain", "normal", "10px", "Verdana, Arial, Geneva", "plain", "normal", "10px");
myNavBar.setAlign("left");
<%
Dim SQLmenyval, rsmv, dl, mvurl,mkurl,oldid,menykategori
SQLmenyval = "Select m.id,m.title, m.menyval, m.dl, m.url, " & _
" m.target, mk.url as mkurl, mk.menykategori " &_
" FROM menyval as m left join menykategori as mk on m.id = mk.menyvalid " &_
" WHERE m.menyid = 26 " & _
" ORDER BY m.ordning ASC"
Set RSmv = Connection.Execute(SQLmenyval)
oldid = 0
Do until RSmv.EOF
valid = RSmv("id")
if clng(oldid) <> clng(valid) then
if cint(oldid) <> 0 then
%>
myNavBar.addMenu(tempMenu);
<%
end if
menyval = RSmv("menyval")
dl = RSmv("dl")
mvurl = RSmv("url")
oldid = valid
%>
tempMenu = new NavBarMenu(0, 140);
<%If dl = "j" Then %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "<%=mvurl%>"));
<% Else %>
tempMenu.addItem(new NavBarMenuItem(' <%=menyval%> ', "#"));
<%
End If
End if
%>
<%
mkurl = RSmv("mkurl")
menykategori = RSmv("menykategori")
if not isnull(menykategori) then
%>
tempMenu.addItem(new NavBarMenuItem(' <%=menykategori%>', "<%=mkurl%>"));
<% End If %>
<%
RSmv.Movenext
Loop
[b] if oldid <> 0 then
%>
myNavBar.addMenu(tempMenu);
<%
[/b]
RSmv.Close
Set RSmv = Nothing
%>
function init() {
myNavBar.create();
}
</script>
Tycker att det med fetstil borde vara med.
------------------
essentitia preter non sans multiplicandum
hehe ;) helt missat den sista.. allt såg jävligt bra ut men du har rätt.. den sista fanns inte med.. men nu har jag fixat till det.
Tack ska du ha!
------------------
Ingenting är omöjligt, bara en utmaning.
Hmm.. det fungerar bra på jobbet där jag har SQLserver.. men jag tänkte använda det lite hemma också.. men då får jag felet: "kopplingsuttrycket stöds inte"
hur ska jag få till det? vad behöver jag ändra?
red: Jag kör Access 2000 hemma
------------------
Ingenting är omöjligt, bara en utmaning.
[Redigerat av brw den 29 aug 2001]