17. marts 2002 - 14:53Der er
11 kommentarer og 1 løsning
Dynaisk function
Er dette muligt?
Jeg skal bruge funktionen til et messageboard, hvor jeg gerne vil have mulighed for at lade brugerne indsætte dynamisk html hentet fra andre emner i databasen end det der læses.
Function DynamicInclude(EmneID) strSQL2="SELECT EMNE, EMNEINDHOLD FROM DATABASE.EMNE WHERE EMNE = " & EmneID"" connect og hent fra DB EmneIndhold2= rs2("EMNEINDHOLD") Response write " <table bgcolor=""grøn""><td>" & EmneIndhold2 & "</td></table> end function
strSQL1=SELECT EMNE,EMNEINDHOLD FROM DATABASE.EMNE WHERE EMNE = " & Request.Querystring("EMNEVARIABEL") connect og hent fra DB EmneIndhold1= rs1("EMNEINDHOLD") Response.Write EmneIndhold1
EmneIndhold 1 hentet fra DB ser således ud "<TABLE width=100%><td>hej med dig dette er indold jeg selv har skrevet. og følgende er indhold jeg har hentet fra et andet emne <% DynamicInclude(2) %> og nu ser vi om det virker</td></table>
er dette muligt, eller skal jeg til at lave server.execute på ASP 3.0 med variablen gemt som en session - og hvis - hvordan?
well, - jeg har ikke orket at lave en backend m.m. før jeg ved om man kan køre og vise et resultat fra en SQL query fra en funktion, hvor funktionens variabel er hentet fra den foregående SQL forespørgsel.
den skal altså hente et emne fra databasen og hvis der i dette emne´s source er angivet at den skal hente et andet emne og vise dette samtidigt - så skal den gøre det.
Jeg spørger altså om hvorvidt man kan køre en eller flere SQL forespørgsler FRA en SQL forespørgsel?
Først nu forstår jeg dit problem. Som nedenstående kode. <% sub Get1 ' Kommando som må bruges Response.Write("1") end sub
Response.Write "<tabel><tr><td>Henter lige nummer: <%Get1%> for en sikkerheds skyld.</td></tr></table>" %>
Sorry - det kan ikke lade sig gøre.
MEN man kunne jo anvende en anden løsning for at få nedenstående tekst udskrivet korrekt.
strS = "<tabel><tr><td>Henter lige nummer: ##Get1## for en sikkerheds skyld og ##get2## også.</td></tr></table>"
## angiver at der her skal anvendes en kommando. Eksemplet kan endda anvende to forskellige kommandoer: Get1 og Get2. Jeg har lavet et eksempel (og testet det.) som gør brug af de to kommandoer.
<% sub Get1 ' Kommando som må bruges Response.Write("1") end sub
sub Get2 ' Kommando som må bruges Response.Write("2") end sub
sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer if LCase(Value) = "get1" then Call Get1 else if LCase(Value) = "get2" then Call Get2 else Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando end if end if end sub
sub Udskriv(Value) ' Udskriv tekst der indeholder kommandoer P = inStr(Value, "##") do while (P > 0) if (P > 0) then Response.Write(Left(Value, P - 1)) ' Udskriv før kommando Value = Mid(Value, P + 2) P = inStr(Value, "##") ' Find slut på kommando if (P > 0) then Cmd = Left(Value, P - 1) ' Find kommando Call UdskrivCmd(Cmd) Value = Mid(Value, P + 2) end if end if P = inStr(Value, "##") loop Response.Write(Value) end sub
strS = "<tabel><tr><td>Henter lige nummer: ##Get1## for en sikkerheds skyld og ##get2## også.</td></tr></table>" Call Udskriv strS %>
Jeg håber at jeg har forstået spørgsmålet og at du kan se sammenhængen i svaret. Du skal jo ændre Get1 og Get2 til at indeholde udtræk fra database.
Øhh ... Du har brug for parametre til Get1 - det overså jeg lige. Men det kan jo løses ved at ændre lidt i formatet og Udskriv-proceduren.
<% sub Get1 (variable1,variable2,variable3) strSQL1="SELECT " & variable1 & "FROM " & Variable2 & " WHERE " & variable1 & "=" & Variable3 connect og hent Response.Write "<TABLE BGCOLOR=""GREEN""><TD>" & strSQL1 & "</td></TABLE>" end sub
sub Get2 '' Vi glemmer lige sub2, da vi kun har brug for at kontrollere indholdet via Get1´s variabler
sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer if LCase(Value) = "get1" then ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HER KOMMER SÅ MIT AFGØRENDE SPØRGSMÅL: I StrS optræder Get1 med varabler, således: ##Get1(EMNE,FORUM,38)## - vil den så stadig reagere på GET1? variablerne er jo forskellige hver gang? eller skal teksten yderligere opdeles mellem "##GET1" og "(" ? Call Get1 else ' tak, Else ;o) Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando end if end if end sub
sub Udskriv(Value) ' Udskriv tekst der indeholder kommandoer P = inStr(Value, "##") do while (P > 0) if (P > 0) then Response.Write(Left(Value, P - 1)) ' Udskriv før kommando Value = Mid(Value, P + 2) P = inStr(Value, "##") ' Find slut på kommando if (P > 0) then Cmd = Left(Value, P - 1) ' Find kommando Call UdskrivCmd(Cmd) Value = Mid(Value, P + 2) end if end if P = inStr(Value, "##") loop Response.Write(Value) end sub
strS = "<tabel><tr><td>Henter lige nummer: ##Get1(EMNE,FORUM,38)## for en sikkerheds skyld og ##get2## også.</td></tr></table>" Call Udskriv strS %>
Hov glemte mine kommentarer: Ovenstående kode tager så variabler i Get1 i betragtning, men er der et problem med variablerne, da SUB UdskrivCMD jo leder efter GET1 og ikke GET1(medvariabler, der jo er forskellige)?
Som jeg ser det er det først her filmen knækker pga IF kommandoen:
sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer if LCase(Value) = "get1" then Call Get1 else Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando
hvad hvis man bare lod den udskrive hele Lcase(Value), således:
sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer strS2 = LCase(Value) Response.write "" & call <% strs2 %> & "" END SUB
Måske noget i den retning? og så lade SQL´en checke om det eksisterer eller ej.
Jeg har løst problemet. Med nedenstående asp-kode får du en skabelon der tillader 2 kommandoer med op til 5 parametre til hver. Jeg har lavet eksemplet således at kommando1 (get1) anvender 3 parametre og get2 anvender 1.
<% Dim strParam(5) ' Anvendes til parametre i kommandoerne Dim pCount ' Antal parametre i strParam
sub Get1 ' Kommando som må bruges Response.Write("<br>" & strParam(0) & "-" & strParam(1) & "-" & strParam(2) & "<br>") end sub
sub Get2 ' Kommando som må bruges Response.Write("<br>" & strParam(0) & "<br>") end sub
sub UdskrivCmd(Value) ' Udtræk parametre og kald de forskellige kommandoer Dim P, strP pCount = 0 ' Udtræk alle parametre og gem i strParam P = inStr(Value, "(") if (P > 0) then strP = Mid(Value, P + 1) ' Alle parametre uden første "(" Value = Left(Value, P - 1) P = inStr(strP, ",") do while (P > 0) strParam(pCount) = Left(strP, P - 1) pCount = pCount + 1 strP = Mid(strP, P + 1) ' Resten af parametre uden første "," P = inStr(strP, ",") ' Flere parametre ? loop strParam(pCount) = Left(strP, Len(strP) - 1) ' Fjern sidste ")" pCount = pCount + 1 end if ' Kald den rette procedure if LCase(Value) = "get1" then Call Get1 else if LCase(Value) = "get2" then Call Get2 else Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando end if end if end sub
sub Udskriv(Value) ' Udskriv tekst der indeholder kommandoer P = inStr(Value, "##") do while (P > 0) if (P > 0) then Response.Write(Left(Value, P - 1)) ' Udskriv før kommando Value = Mid(Value, P + 2) P = inStr(Value, "##") ' Find slut på kommando if (P > 0) then Cmd = Left(Value, P - 1) ' Find kommando Call UdskrivCmd(Cmd) Value = Mid(Value, P + 2) end if end if P = inStr(Value, "##") loop Response.Write(Value) end sub
strS = "<tabel><tr><td>Her vises kommando get1's parametre: ##Get1(EMNE,FORUM,32)## og for en sikkerheds skyld også get2: ##get2(12)##.</td></tr></table>" Call Udskriv(strS) %>
Jeg håber at du kan overføre det til det du har behov for.
Kool, tak - pointene er givet! - haaber du kan bruge dem. - lige et spørgsmål: Kan man genanvende de to GetX funktioner med forskellige parametre? dvs. kan man bruge "hej med dig her ser du noget fra emne 32: ##Get1(EMNEFORUM,32)## og her ser du noget fra emne 10: ##Get1(EMNE,FORUM,10##)" - er dette mon muligt - har ikke mulighed for at teste scriptet på denne maskine
Ja - det er netop det der er ideen i det. Men vær opmærksom på at anatllet af parametre altid skal være det samme. I mit eksempel har jeg lavet 3 til get1 og 1 til get2 - men det bestemmer du jo selv.
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.