Avatar billede want2learn Nybegynder
26. marts 2006 - 18:40 Der er 17 kommentarer og
1 løsning

sub i en sub

Hej

Hvis jeg har en side.

Index.asp
Hvor jeg kalder en sub "Call Tester" fra side info.asp
så vil jeg vise det område på min index.asp side.

men hvis jeg nu laver 2 sub i min tester sub ! kan jeg det ?

Sub Tester()
bla. bla.
  Sub Info()
  bla. bla.
  End Sub
  Sub Info2()
  bla. bla.
  End Sub
End Sub

hvordan kan jeg nu på min index.asp side kalde sub Tester og så Info !? den må ikke vise Sub Info2 kan jeg gøre det via et link og hvordan vil mit link se ud !?
eller er det via.
Call Tester(info)
!?

starten af min Sub Tester er nemlig ens ligemeget hvad så vil ikke skrive den kode 5 gange, derfor mit ønsker om at kunne hente forskellige dele ud af den Sub.

eller skal/kan det gøres anderledes..
Avatar billede eagleeye Praktikant
26. marts 2006 - 18:48 #1
Man kan ikke direkte kalde en en sub i inde i sub udefra. Dog kan man lave noget kode som kalder de forskellige subs alt efter hvilken paramter man overføre:



Sub Tester(kald)
  Sub Info()
  bla. bla.
  End Sub
  Sub Info2()
  bla. bla.
  End Sub
 
  if kald = "info" then
    Call Info()
  Elseif kald = "info2" then
    Call Info2()
  Else
    Call Info()
    Call Info2()
  End if
End Sub
Avatar billede eagleeye Praktikant
26. marts 2006 - 18:52 #2
Ellers kan de ligge som 3 subs på samme level og så kan Tester kalde dem og er der ander som som bruge funktionen kan de også kalde dem:

Sub Info()
bla. bla.
End Sub

Sub Info2()
bla. bla.
End Sub

Sub Tester()
  Call Info()
  Call Info2()
End Sub
Avatar billede eagleeye Praktikant
26. marts 2006 - 18:53 #3
hov til første kommentar så kan funktionen kaldes som:
Call Tester("info")  'For at kalde sub Info() i Tester.
Avatar billede want2learn Nybegynder
26. marts 2006 - 18:54 #4
hmmm

betyder det så at jeg kan lave et link som evt hedder

index.asp?page=tester&kald=info

hvis jeg klikker på det link så vil den kalde
Call info()
eller hvordan ser mit kald ud.
Avatar billede eagleeye Praktikant
26. marts 2006 - 18:59 #5
nu ved jeg ikke helt hvordan du har tænkt det skal virke, men hvis du vil kalde en funktion pr. side så kan de se us i stil med:

page = Request.Querystring("page")
kald = Request.Querystring("kald")

if page = "tester" then
  Call Tester(kald)

elseif page = "xxx" then
  Call Xxx(kald)

end if


og så skal tester være som vist i første post.
Avatar billede want2learn Nybegynder
26. marts 2006 - 19:00 #6
hvis nu jeg vil lave noget

YCall = Request.QueryString("yourcall")

kan jeg så sige:
If YCall = "info" Then
Call Tester("info")
ElseIf YCall = "info2" Then
Call Tester("info2")
Else
Call Tester()
End If

og vil den med Call Tester() kun kalde den og ikke de andre som er inde i den SUB og vil min IF sætning give pote' !?
Avatar billede eagleeye Praktikant
26. marts 2006 - 19:04 #7
Ja du kan også gøre som du har vist, men så får du den if sætning to gange både når du kalder Tester, og inde i funktionen Tester. Derfor kan du bare kalde Tester direkte med YCall som paramtere som vist i sidste kommentar:

YCall = Request.QueryString("yourcall")
Tester(YCall)
Avatar billede want2learn Nybegynder
26. marts 2006 - 19:46 #8
Hmm

Når jeg har dette på min inklude side "inklude.asp"
Sub Tester()
bla. bla.
End Sub

Sub Info()
bla. bla.
End Sub

og jeg så på min "Index.asp" side har inkludet siden og har dette:

YCall = Request.QueryString("yourcall")
If YCall <> "" Then
  Call Tester(YCall)
Else
  Call Tester()
End If

og jeg bruger linket
Index.asp?page=info&yourcall=Info

så får jeg denne fejl:
Microsoft VBScript runtime error '800a01c2'

Wrong number of arguments or invalid property assignment: 'System'

/cms/index.asp, line 125

linje 25 er : Call Tester(YCall)

og jeg ved at det er fordi jeg ikke har Info inde i Tester.

men hvis jeg har dette på min inklude side:
Sub Tester()
bla. bla.
Sub Info()
bla. bla.
End Sub
End Sub

så får jeg denne fejl:
Microsoft VBScript compilation error '800a03ea'

Syntax error

/cms/inklude.asp, line 49

Sub Info()

linje 49 er : Sub Info()

hvad er der galt synes jeg har fulgt din information.
Avatar billede eagleeye Praktikant
26. marts 2006 - 21:27 #9
du skal skrive et variable navn i Tester funktion hoved:

Sub Tester(kald)
bla. bla.
Sub Info()
bla. bla.
End Sub
End Sub
Avatar billede eagleeye Praktikant
26. marts 2006 - 21:29 #10
Så kan du inde i funktionen bruge kald som en variable og den har værdien som overføres i kaldet.

YCall ="info"
Call Tester(YCall) 'overføre indholde af YCall som her er "info"



funktion:
Sub Tester(kald)
'Så er kald = "info.

Sub Info()
bla. bla.
End Sub
End Sub
Avatar billede want2learn Nybegynder
26. marts 2006 - 22:41 #11
tror ikke lige jeg er med, kæden røg af for mig.

altså

YCall = Request.QueryString("yourcall")
If YCall <> "" Then
  Call System(YCall)
Else
  Call System()
End If

på min index. side behøver jeg ikke ændre eller !?

og skal jeg bare skrive kald i Sub Tester() !?

og vil mit link Index.asp?page=info&yourcall=Info så virke !?

og hvor bliver kald sat = med info i min kode !?
Avatar billede eagleeye Praktikant
26. marts 2006 - 22:50 #12
hvis dit link er sådan her:
Index.asp?page=info&yourcall=Info

Så vil YCall blive sat = med det som står o querystringen i denne linie:

YCall = Request.QueryString("yourcall")


I det kode du viser hedder funktionen nu System. er det den som var Tester?
Avatar billede want2learn Nybegynder
26. marts 2006 - 23:59 #13
ja jeg køre både med tester og system så jeg kan se udviklingen på det.
Avatar billede eagleeye Praktikant
27. marts 2006 - 00:04 #14
Ok der hvor funktion er defineret skal der rettes lidt. I dag står der nok:

Sub System()
..kode
End Sub


Det skal rettes sådan at der står en paramter i funktionen:

Sub System(kald)
..kode
End Sub


Når det er med vil den nok brokke side over denne:
  Call System()

Fordi der ikke overføres noget så det skal rette så den overføre en tom streng:
  Call System("")
Avatar billede want2learn Nybegynder
27. marts 2006 - 00:35 #15
jeg har rette dette:
YCall = Request.QueryString("yourcall")
If YCall <> "" Then
  Call System(YCall)
Else
  Call System("")
End If
på min index.asp side

og jeg har rettet:
Sub System(kald)
code
Sub Info()
code
End Sub
End Sub
på min inklude.asp side

og så brokker den sig over Sub Info()
Microsoft VBScript compilation error '800a03ea'

Syntax error

/cms/cmssystem.asp, line 49

Sub Info()
Avatar billede eagleeye Praktikant
27. marts 2006 - 09:13 #16
Hmm jeg er kommet til at sige man godt kan havde en sub inde i en sub, men det er faktsik ikke rigtigt hvad jeg har sagt når det gælder VBscript.. Det beklager jeg.

Så man bliver nød til at flytte de subs som er inde i System() ud men System kan stadig kalde dem på samme måde:

Sub Info()
code
End Sub

Sub System(kald)
code
End Sub
Avatar billede want2learn Nybegynder
27. marts 2006 - 13:29 #17
intet problem.

kan dog ikke få den til at vise info så tror jeg dropper det og laver noget alá page. hvor hver page kalder en sub dog vil min kode komme til at fylde lidt.

men læg et svar for din tid.
Avatar billede eagleeye Praktikant
27. marts 2006 - 16:38 #18
ok så her et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester