Avatar billede Slettet bruger
22. januar 2003 - 14:48 Der er 15 kommentarer og
3 løsninger

asp Eval i VB

Hey..

Jeg ville høre om der er noget som kender en måde så jeg kan bruge en ligende funktion som EVAL fra asp i VB.. ex.

For Each objItem In objWEBMCol
    saveOutput ("<tr>" & Chr(13))

    For Each propitem In objProp
        saveOutput ("<td>")
        On Error Resume Next
        MsgBox Eval("objItem." & propitem.Name)
        If Err.Number > 0 Then
            Err.Clear
        End If
        saveOutput ("</td>" & Chr(13))
    Next

    saveOutput ("</tr>" & Chr(13))
  Next


Her går det galt:
MsgBox Eval("objItem." & propitem.Name)
Eval kan den ikke bruge.. jeg fandt ud af at man kunne bruge
dim oscript as ScriptControl
oscript.Eval(balbla)
men det giver bare en fejl, men at enten objectet eller methoden findes..

nogen forslag?
Avatar billede martin_moth Mester
22. januar 2003 - 15:07 #1
Hvad skulle Eval() - funktionen gøre (kender ikke asp, men vb :o)
Jeg mener - hvorfor kan du ikke bare skrive
MsgBox "objItem." & propitem.Name

Har du dim'met dine objekter, og tilføjet de rigtige referencer til dit projekt (fx MicroSoft Script Control 1.0)?

Bare et par ideer...
Avatar billede Slettet bruger
22. januar 2003 - 15:30 #2
hvis jeg bare skriver det andet får jeg tekten ud:
objItem.dentekst som var i propitem.name
lad os sige at propitem.name = "hej"
så får jeg
objItem.hej ud, altså tekst, og ikke objektet samlet, jeg har den rigtige reference på..
Avatar billede martin_moth Mester
22. januar 2003 - 16:13 #3
Ahhh. Nu forstår jeg dit problem. propitem.name indeholder navnet på en property, som du vil bruge på objItem. Altså lidt i stil med:

  Text1.Text = "Hej med dig" 
  strMyString = "Text"
  Msgbox Eval("Text1." & strMystring)

som skulle udskrive
  "Hej med dig"
i en Msgbox.

Men kender ikke løsningen - lytter med.
Avatar billede Slettet bruger
22. januar 2003 - 16:35 #4
det er netop det som er problemet :(
Avatar billede sjh Nybegynder
22. januar 2003 - 22:11 #5
Prøv med:

Option Explicit

Private Sub Form_Load()
Dim iVal As Integer
Dim toexe As String

Dim oSC As ScriptControl '<- Microsoft Script Control (MSSCRIPT.OCX)
Set oSC = New ScriptControl '<- Microsoft Script Control (MSSCRIPT.OCX)
oSC.Language = "VBScript"

  toexe = "4*5"
  iVal = oSC.Eval(toexe)

  MsgBox iVal
End Sub
Avatar billede mikker Nybegynder
22. januar 2003 - 22:18 #6
HHHmmmm...

References toproperties and methods often require an explicit object qualifier.

Men lytter gerne med :O)
- Mikker
Avatar billede mikker Nybegynder
22. januar 2003 - 22:23 #7
sjh> Så er det mig der _stadig_ ikke forstår hvad opgaven går ud på.
Jeg kan ikke se sammenhængen med det Martin skrev tidligere:

  Text1.Text = "Hej med dig" 
  strMyString = "Text"
  Msgbox Eval("Text1." & strMystring)

som skulle udskrive
  "Hej med dig"
i en Msgbox.
Avatar billede sjh Nybegynder
22. januar 2003 - 23:49 #8
Avatar billede martin_moth Mester
23. januar 2003 - 09:41 #9
mikker:

Vi er enige om at en textbox med navn Text1 har egenskaben (property) .Text. Og en masse andre, fx. .SetFocus, men nu bruger vi bare .Text i dette eksempel...

Altså kan man skrive Text1.Text. Hvis Text1.Text indeholder "Hej med dig", kan man skrive
  MsgBox Text1.Text
Som skriver "Hej med dig" ud på en MsgBox

Så langt så godt.

Problemet er, hvis du IKKE vil skrive den property på Text1 du vil bruge direkte (altså .Text) i din kode, men bruge indholdet af en string i stedet (som indeholder ".Text")

Altså:

  Vi er enige om at følgende kode virker som følger:

  Text1.Text = "Hej med dig" 
  Msgbox Text1.Text
 
som skulle udskrive "Hej med dig" i en Msgbox.

MEN hvordan får man så følgende til at virke - det er det der er spørgsmålet:

  Text1.Text = "Hej med dig" 
  strMyString = "Text"
  Msgbox Eval("Text1." & strMystring)

Denne msgbox vil IKKE udskrive "Hej med dig", og problemet er hvordan man får den til det. Eller problemet er beskrevet i spørgsmålet, men er i princippet samme spørgsmål... Got it? Problemet er altså at bruge en egenskab på et objekt, som man ikke skriver direkte, men som står i en variabel...

Ovenstående er ikke noget svar, blot en forklaring til mikker :o)
Avatar billede Slettet bruger
23. januar 2003 - 09:48 #10
kunne ikke lige bruge dit forslag sjh, lignede noget jeg kunne bruge om det virker ikke som om at det er det rigtige..
Synes godt nok at det er lidt underligt at noget så enkelt som en kommando i asp eval() ikke findes i vb :)
Avatar billede martin_moth Mester
23. januar 2003 - 10:12 #11
Avatar billede martin_moth Mester
23. januar 2003 - 10:15 #12
Altså kunne det tyde på, at du bare mangler at dim'me / Set'te dine objekter rigtigt (som jeg nævnte i det allerførste svar ;o)

Altså noget i retgning af

  dim oscript as ScriptControl
  Set oscript = New ScriptControl
  oscript.Language = "VBScript"
  MsgBox oscript.Eval("objItem." & propitem.Name)
  set oscript=nothing

...
Avatar billede Slettet bruger
23. januar 2003 - 10:59 #13
martin_moth >>
MsgBox oscript.Eval("objItem." & propitem.Name)

Object required: 'objItem'

om den er dimmet, skal den dim's som noget bestemt?
Avatar billede martin_moth Mester
23. januar 2003 - 11:18 #14
Aner det ikke - kender ikke noget til ASP og Eval, har bare fundet en måde hvor man kan bruge ASP's EVAL i VB6. Men har du et objItem, skal du naturligvis dimme det svarende til hvad det er :o)
Avatar billede mikker Nybegynder
23. januar 2003 - 14:46 #15
Martin>> Jeg takker for din forklaring, der blotbekræfter hvad jeg sagde til sjh:

'Jeg kan ikke se sammenhængen med det Martin skrev tidligere:'

AnywayS... Som jeg forstår det betyder Eval noget i stil med evaluate?
Hvad kan man bruge en sådan funktion til i VB? Hvis du ikke ved hvilken property du skal bruge så lad være med at lege med objektet :O)

Gør min forestilling til skamme, giv mig et eksempel hvor det er ENORMT smart at bruge en sådan funktion.
For mig at se er der lige en enkelt linie for meget i nedenstående...

  Text1.Text = "Hej med dig" 
  strMyString = "Text"
  Msgbox Eval("Text1." & strMystring)

- Mikker
Avatar billede Slettet bruger
23. januar 2003 - 15:01 #16
Makker>>
Som jeg skrev til at starte med så har du mit ex.
For Each objItem In objWEBMCol
    saveOutput ("<tr>" & Chr(13))

    For Each propitem In objProp
        saveOutput ("<td>")
        On Error Resume Next
        MsgBox Eval("objItem." & propitem.Name)
        If Err.Number > 0 Then
            Err.Clear
        End If
        saveOutput ("</td>" & Chr(13))
    Next

    saveOutput ("</tr>" & Chr(13))
  Next
Avatar billede martin_moth Mester
23. januar 2003 - 15:10 #17
mikker > Ja, jeg kan heller ikke se hvordan man skulle få brug for det. Men det har testkanin åbenbart behov for... Måske er det objekter han selv har defineret i et class-module, og måske er der en god grund til at gøre som han vil. Det skal jeg ikke kunne sige.., men han ønsker at gøre det på den måde, og så må vi jo forsøge at hjælpe hvad vi kan, ik'?

Jeg går ud fra, at du (mikker) godt kan FORSTÅ problemstillingen jeg har beskrevet i  09:41:51 - selvom du ikke kan se HVORFOR testkaninen vil gøre sådan :o)
Avatar billede Slettet bruger
23. januar 2003 - 16:01 #18
nyt ex.
Har lavet dette i vbs og virker for vildt:

Function GetWmiInfo(WmiNameSpace,WmiMethod)
Set objWEBM = objService.get(WmiNameSpace)
set objWEBMCol = objWEBM.Instances_

set objProp = objWebm.properties_
for each item in objWEBMCol
  GetWmiInfo = eval("item." & WmiMethod)
next
end function

HER BRUGER JEG DEN:
GetWmiInfo = eval("item." & WmiMethod)
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