webForumDet fria alternativet

Eval Function i Visual Basic

5 svar · 213 visningar · startad av grindelid

grindelidMedlem sedan dec. 20014 inlägg
#1

Jag lyckas inte använda Eval-funktionen i Visual Basic utan bara i VBA. Det är underligt. Ska man inte kunna använda den i visual basic? Jag vill evaluera ett uttryck och returnera ehuruvida det är sannt eller falskt.

fredrikMedlem sedan dec. 19991 082 inlägg
#2

Eval är en VBScript funktion som introducerades i VBScript 5.0.

Den finns alltå inte som default i VB.

Du kan ju annars använda funktionen IIF, som evaluerar och returnerar ett förutbestämtvärde utifrån resultatet.
Ex.
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Dim strA As String
Dim strB As String
Dim blnRet As Boolean

blnRet = IIf(strA = strB, True, False)
MsgBox blnRet

Här kollas alltså om "strA" är lika med "strB" (vilket det är) och då returneras "True", annars "False".

------------------
Fredrik Klarqvist
f.klarqvist@spray.se
http://server.webwerkstaden.se/fredde/

grindelidMedlem sedan dec. 20014 inlägg
#3

Det blir en smula omständigt då jag har ett okänt antal variabler med olika ej förutbestämda, logiska operatorer emellan.
Jag har löst det genom att skicka det som en sql-fråga efter som att SQL har stöd för logiken.
Exempelvis: SELECT True | (False & True) AS Result

Det fungerar bra men kännas som tokigt eftersom att jag måste skicka en fråga till en databas som jag egentligen inte skulle behöva använda.

fredrikMedlem sedan dec. 19991 082 inlägg
#4

Ok, men varför inte göra en egen funktion?
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
private function blnEval(vntVal1, vntVal2) as boolean
blnEval = iif(vntVal1 = vntVal2, true, false)
end function

Det känns väldigt onödigt att behöva använda en databas...

------------------
Fredrik Klarqvist
f.klarqvist@spray.se
http://server.webwerkstaden.se/fredde/

grindelidMedlem sedan dec. 20014 inlägg
#5

Njah. Det skulle ju vara bra om det gick enkelt.
Det jag ska göra är att skriva en regeltolk. En funktion som returnerar sant eller falskt om en viss (användarifylld) regel uppfylls. Ex: <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">order_no AND (datum OR agent_no)

Regeln ska bestämma vilka fält som måste vara ifyllda i ett formulär och detta skulle ju inte varit så ångestladdat om jag kunnat använda eval().

Daniel Grindelid

fredrikMedlem sedan dec. 19991 082 inlägg
#6

Om du bygger en applikation (alltså ingen komponent) så kan du använda Microsoft Script Control för att köra kod, den har bla. en "Eval" funktion.

Du hittar den under:
Project - Components - Microsoft Script Control

Ett enkelt exempel är:

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Dim strModName As String
strModName = "ModBase"

scr.Modules.Add strModName
scr.Modules(strModName).AddCode "intA = 10"
scr.Modules(strModName).AddCode "intB = 15"
MsgBox scr.Modules(strModName).Eval("intA = intB")

Du lägger alltså först till kod som du sedan evaluerar.

Detta borde du kunna använda! Jag är dock inte riktigt med på vad du menar med att användaren ska skriva in kommandon...

-----------------
Fredrik Klarqvist
f.klarqvist@spray.se
http://server.webwerkstaden.se/fredde/

[Redigerat av fredrik den 04 jan 2002]

125 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
122 ms — hämta tråd, inlägg och bilagor (db)