24. april 2008 - 12:12Der er
18 kommentarer og 1 løsning
hvad er problemet i denne if struktur?
if brugertype <> "" then if brugertype = "butik" then set sidetxt = conn.execute("select * from sidetxt where id = 13") elseif brugertype = "bruger" then set sidetxt = conn.execute("select * from sidetxt where id = 14") end if end if
hvad er fejlen i denne if struktur... selve scriptet opfanger værdi'en brugertype korrekt men det lader ikke til, den kan gennemføre denne if struktur, af en årsag jeg ikke helt kender til, håber nogen kan komme med et bud
If'en ser rigtig ud. Får du en fejlmeddelelse da eller hvad sker der?
Du kan jo i øvrigt spare den yderste if, da de inderste alligevel kun tjekker, om brugertype indeholder bestemte værdier:
if brugertype = "butik" then set sidetxt = conn.execute("select * from sidetxt where id = 13") elseif brugertype = "bruger" then set sidetxt = conn.execute("select * from sidetxt where id = 14") end if
michael_stim >> nej, for conn.execute returnerer et objekt (recordset) og i VBScript skal man benytte SET foran tildeling af objektvariable.
zombien >> der kan evt. være problemer med case-sensitivity i dine strenge, så derfor kan du evt. konvertere til lower-case inden din sammenligning:
if lcase(brugertype) = "butik" then set sidetxt = conn.execute("select * from sidetxt where id = 13") elseif lcase(brugertype) = "bruger" then set sidetxt = conn.execute("select * from sidetxt where id = 14") end if
Du kan også benytte den lidt mere regelrette metode (da den konstante streng du sammenligner med så heller ikke behøves at være lower case, altså små bogstaver):
if strComp(1, brugertype, "butik", vbTextCompare) = 0 then set sidetxt = conn.execute("select * from sidetxt where id = 13") elseif strComp(1, brugertype, "bruger", vbTextCompare) = 0 then set sidetxt = conn.execute("select * from sidetxt where id = 14") end if
Et alternativ til den valgte if-struktur kunne i øvrigt være en select-case, som bliver interessant når det er samme kriterie-variabel der skal checkes på (som i dit tilfælde):
select case lcase(brugertype) case "butik" set sidetxt = conn.execute("select * from sidetxt where id = 13") case "bruger" set sidetxt = conn.execute("select * from sidetxt where id = 14") end select
eller lidt mere gustent, men med brug af den metode med strComp
select case true case strComp(1, brugertype, "butik", vbTextCompare) = 0 set sidetxt = conn.execute("select * from sidetxt where id = 13") case strComp(1, brugertype, "bruger", vbTextCompare) = 0 set sidetxt = conn.execute("select * from sidetxt where id = 14") end select
når man forsøger at hente noget ud fra databasen, og selve conn.execute ikke er bleven startet så den ikke kan finde den korrekte værdi i databasen.
<-- fejl --> Fejltype: Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D) Typer stemmer ikke overens: 'sidetxt' /handelssikkert.dk/sider/system/opretning.asp, line 128
w13, nej jeg har ingen eof eller bof rundt om da jeg er 100 % sikker på der er noget af værdi 13 og 14...
i tilfælde af jeg køre uden if struktur, og tjekker de 2 sidetxt linjer virker de uden problemer og jeg er sikker på den opfanger værdien bruger eller butik... for ellers ville den ikke kunne køre videre fra forgående side
da brugertype ikke må være tomt, samt det er via radiobuttons man vælger typen
if lcase(brugertype) = "butik" then set sidetxt = conn.execute("select * from sidetxt where id = 13") Response.Write "butik - "&sidetxt.eof elseif lcase(brugertype) = "bruger" then set sidetxt = conn.execute("select * from sidetxt where id = 14") Response.Write "bruger - "&sidetxt.eof else Response.Write "Else: "&brugertype end if
Hvis conn.execute slet ikke bliver kaldt (hvilket lader til at være tilfældet), så er værdien af sidetxt Empty og det kan kontrolleres med funktionen isEmpty.
if not isEmpty(sidetxt) then if not sidetxt.eof then '... end if else response.write "FEJL! Der er ikke læst data fra databasen. brugertype indeholder: " & brugertype end if
jeg har ændret en del i koden, for jeg kunne simpelthen ikke finde fejlen ligemeget hvad jeg forsøgte, så lige p.t. køre alle variabler via sessions ikke det mest optimale, men det fungere da...
Jeg har den opfattelse, at læsning af data der ligger i hukommelsen til hver en tid performer bedre end data der skal findes i en diskbaseret database. Så er der tale om data der typisk kun skal læses og sjældent opdateres, jamen, så er det måske en rigtig god idé for performance, at man lægger data i hukommelsen, som et supplement til databasen. Skulle sitet gå hen og blive så populært som du foreslår, er der nok også råd til at smide "lidt" ekstra hukommelse i serveren, så den kan trække "lidt" flere brugere. Der er en god grund til at caching ofte sker i hukommelsen... :)
Nu ved jeg ikke så meget om det tekniske bag, men man kan i hvert fald spare noget, hvis man ingen sessions bruger, og slår det helt fra: http://support.microsoft.com/kb/244465
Har også for nylig læst artikler, som argumenterede for at man skulle bruge så få sessions som muligt.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.