Newsgroup: it.comp.lang.visual-basic
Titolo: passare una funzione a una stringa

ho creato una funzione chiamata trovastringa che mi ritorna una stringa....i
Public Function trovastringa()
dim stringa1 as string
stringa1 = "k=colonne + 1 or"
Dim I As Integer
For I = 1 To numerorecord - 1
    stringa1 = stringa1 & " (k=colonne * " & I + 1 & " + 1)"
Next
trovastringa = stringa
End Function
vorrei che la stringa diventasse la condizione di un if.....
if trovastringa then
      rs.movenext 'deve passare al record successivo
end if
pero' la condizione non e' mai vera e non entra mai, cosi' il recordset non
si muove!!!!!!
innanzitutto si puo' fare quello che voglio?????
altrimenti secondo voi come posso fare????
grazie e buon lavoro
 
--------------------------------
Inviato via 
http://usenet.libero.it

restituisce una stringa (function trovastringa() as string), non un boolean
if trovastringa()<>"" then rs.movenext()

 if trovastringa()<>"" then rs.movenext()
si certo, soltanto che trovastringa ritorna una stringa tipo "k=1 or k=2" e
quindi l'if deve controllare se k=1 or k=2 e' vero....
in altre parole deve essere come
if k=1 or k=2 then
rs.movenext
end if
grazie


 end if
AFAIK non è possibile fare una cosa del genere, in alternativa dovresti fare
due funzioni, una che restituisce la prima parte dell'uguaglianza, l'altra
la seconda, tipo
public function Fun1() as string
...
end function
public function Fun2() as string
...
end function
quindi richiamarla dove ti serve con
 if fun1 = fun2 then
.....
end if
Ovviamente, qualsiasi problema complesso si presta a più di una soluzione (A
beautiful maind) e questa non mi pare sia la più elegante
Salutoni
Sergio

 vorrei che la stringa diventasse la condizione di un if.....
Aggiungi ai riferimenti del progetto il Microsoft Script Control
    Dim objSC As New MSScriptControl.ScriptControl
    objSC.Language = "VBScript"
    If objSC.Eval(trovastringa) Then ....
--
Ciao, Silv:o)


ho fatto come mi hai detto ma mi da un errore di sintassi senza altre
spiegazioni!!!!!
secondo te cosa potrebbe essere????


 vorrei che la stringa diventasse la condizione di un if.....
Puoi usare il mio valutatore di espressioni.
Ciao
--
y = f(
http://neodatatype.interfree.it/index.html
)

 si muove!!!!!!
Attenzione che nella function componi stringa1 e assegni (trovastringa =
stringa) stringa.
Spero che sia un errore di battitura.
Per il test potresti adottare:
Select case trovatastringa
    Case "K=1"
        ...
    Case "K=2"
        ...
    Case "..."
        ...
    Case Else
        ...
End Select


purtroppo non posso usare il select case xche' non so prima quante
espressioni dovro' valutare e' x questo che uso la funzione e' soltanto che
anche lo [scriptcontrol].eval(trovastringa) valuta l'espressione falsa anche
quando non lo e' e quindi non entra mai nel ciclo......
aiutoooooooooooooooooooooooooooooooooooooooooooooooo


 quando non lo e' e quindi non entra mai nel ciclo......
Ok, credo che ci sia un po' di confusione.
Sarebbe il caso che tu facessi un esempio, con parole, non con istruzioni
VB, di che cosa vorresti fare con due/tre possibili risultati (questi citati
esattamente come restituiti) di trovastringa, cercando di prevedere
situazioni diverse.

 end if
Mi accodo qui perchè c'è, secondo me, qualcosa che non va nella Function.
Tu dici che <ritorna una stringa tipo "k=1 or k=2" >
Dubito.
Faccio qualche modifica (ma colonne dov'è?)
Public Function trovastringa()
dim stringa1 as string
stringa1 = "k=" & colonne + 1
'<<<dov'è colonne?
Dim I As Integer
For I = 1 To numerorecord - 1
    stringa1 = stringa1 & " OR (k=" & colonne  * I + 1 & ")"    '<<<Formula?
Next
trovastringa = stringa1
End Function

 End Function
E numerorecord dov'č?

 altrimenti secondo voi come posso fare????
ricapitolando, tu vuoi che la tua funzione di permetta di costruire una
condizione di if in maniera
dinamica vero?
quindi vuoi che il risultato della tua funzione, che è una stringa sia
interpretato come
una parte di codice, ovvero se
trovastringa="k=1 or k=2"
e tu richiami ne programma
if trovastringa then
vuoi che questo sia interpretato come
if k=1 or k=2 then
e a questo punto credo che k sia una variabile vero?
se ho capito bene, quello che vuoi fare non è possibile,
prova a spiegare meglio quello che vuoi ottenere...
--
bye BlackMagic
ICQ: 85485468
Aiuta la ricerca sul cancro 
http://members.ud.com
Join
at:
http://members.ud.com/services/teams/team.htm?id=2E71C62A-8E67-48DB-B472-
BCA129B35412

ok mi spiego meglio
ho una funzione che riporto:
Public Function trovastringa() As String
stringa1 = "(k=colonne + 1) or"
Dim I As Integer
For I = 1 To numerorecord - 1
    stringa1 = stringa1 & " (k=colonne * " & I + 1 & " + 1)"
Next
trovastringa = stringa1
End Function
colonne e numerostringa sono delle variabili pubbliche che contengono
rispettivamente il numero di colonne di una griglia e il numero di record di
un recordset.....
ho provato a fare questo......
if trovastringa then
rs.movenext
end if
l'applicazione mi sputa in un occhio (naturalmente)
vorrei che l'if valutasse la stringa come un'espressione
ho provato con il metodo che mi ha consilgiato un'altro tipo del gruppo
Dim objSC As New MSScriptControl.ScriptControl
objSC.Language = "VBScript"
if objsc.eval(trovastringa) then
rs.movenext
end if
ma non entra anche se sono sicura che la condizione sia vera ... invece la
valuta come falsa....
spero di essermi spiegata bene


 ho provato con il metodo che mi ha consilgiato un'altro tipo del gruppo
Credo che quell'altro tipo (sarai azZANNAta) abbia visto prima di tutti con
il valutatore di espressioni.
Ora ti sei spiegata, ma credo propro che sia da escludere. Devi girarci
attorno e farti restituire valori numerici, non stringhe, magari in un
vettore, da elaborare poi, uno per uno o a gruppi.

 E numerorecord dov'è?
'Sta kika ha un concetto di function molto diverso dal mio.
La maggior parte delle variabili che utilizza sono in realtà globali del
modulo (se non addirittura public), e non passate alla function dal
chiamante.
Presumo che colonne, numerorecord, ecc.., siano fra queste...
Ciao
Alberto

 secondo te cosa potrebbe essere????
Probabilmente Silvio ha azzeccato (mai usato questo controllo), ma, come ti
ho mostrato in altro post con delle ipotetiche correzioni, la tua
trovastringa non restituisce "K=1 OR K=2 ..." e quindi il metodo Eval trova
una sintassi errata.

 Presumo che colonne, numerorecord, ecc.., siano fra queste...
Sì, lo ha scritto in un altro post.

 e a questo punto credo che k sia una variabile vero?
si k e' una variabile
 
esatto e' proprio questo che voglio ottenere!!!!!
comunque credo di aver capito che e' un po' dififcile cerchero' di aggirare
il problema!!!
comunque se avete delle idee.....
ps: il "tipo" era silvio scusa silvio ma non mi ricordavo il tuo nome mentre
scrivevo
grazie comunque


 il problema!!!
Ma è facilissimo!
Te l'ho già detto! (mai nessuno che mi ascolti!)
Usa il mio valutatore di espressioni:
Dim ex As New axExpression
If (ex.Evaluate(k)) Then
    ...
End if


 Usa il mio valutatore di espressioni:
se invece di arrabbiarti :-))
le spieghi dove prenderlo (SC? indirizzo della tua firma?)
magari riesce a risolvere il suo problema....
un pò di comprensione, almeno è riuscito/a
a mettere in moto il NG per un giorno :-))
Ciao.

 le spieghi dove prenderlo
Non sono arrabbiato, solo che mi viene il "futone al cervello" come dice mia
mamma (anche se non so cosa vuol dire :PPP ) vedendo che se fosse quello il
problema bastava chiedere "dove lo trovo?", se proprio non lo si ha trovato
nell'unico link del messaggio, anzichè continuare a chiedere perchè una
stringa non è un boolean negli altri rami del trhead...
Mi sto comportando male e da polemico, vero? :)
Ciao

 ha scritto nel messaggio
news:b1tb9.27813$ub2.4...@news1.tin.it...

no, quando mai :-))
comunque dirti che hai ragione non serve a niente, anche perchè come
si dice da me la ragione si da ai pazzi...
ciao.


se non hai ancora risolto prova cosě...
hai detto di non sapere quante condizioni potranno essere, quindi
prova a modificare la funzione trova stringa in questo modo
Public Function CreaVet() as long()
dim appVet() as long
Dim I As Integer
redim vet(0)
vet(0)=colonne +1
For I = 1 To numerorecord - 1
    redim preserve vet(ubound(vet)+1)
    vet(ubound(vet())= 'valore che vuoi calcolare e confrontare'
Next
CreaVet = appvet
End Function
a questo punto hai un vettore di dimesione X con tutti i valori
che devi controllare
che puoi controllare cosě
dim t as boolean
dim i as long
t=false
do
    while not(t) and (i<=ubound(VETTORE))
        if k=vettore(i) then
            i=i+1
        else
            t=true
        end if
loop
if not(t) then
     rs.movenext
end if
č un pň lungo ma con gli opportuni adattamenti dovrebbe funzionare
p.s. per zanna scusa se ho continuato il 3d :-))

 stringa non è un boolean negli altri rami del trhead...
il tuo valutatore zanna e' stato scaricato 5 minuti dopo che me lo avevi
postato, il fatto e' che non sapevo come usarlo e l'help e' in inglese e
siccome sembra che se qualcuno chiede qualcosa in piu' scoppia sempre la
guerra mondiale non ho chiesto!!!!!!!!!!
comunque ora l'ho usato, non funziona ancora come dovrebbe ma lo faro'
funzionare da sola non ti disturbero' zanna con le mie domandine da
principiante che ti danno tanto fastidio!!!
comunque grazie black provero' ad adattare la tua funzione


 secondo te cosa potrebbe essere????
fai cosě: prima di uscire dalla funzione, fatti stampare nella finestra di
debug la tua trovastringa, poi stoppa il programma, mettici un "print" o un
"?" davanti e premi invio: se ti stampa sulla riga successiva True o False o
Vero o Falso, allora ne riparliamo, se ti da errore di sintassi ... ;)
--
Silv:o)

 sia interpretato come una parte di codice,
Codice VB puro forse no, ma "VBScript, JScript, or any other suitable
scripting language" sě, col Microsoft Script Control.
Per esempio, se trovastringa = "2 + 2 = 4"
ScriptControl.Eval (trovastringa) da True, e se
strStatement = "If 2 + 2 = 4 Then MsgBox ""OK"" Else MsgBox ""KO"" "
ScriptControl.ExecuteStatement (strStatement) esegue il codice
correttamente.
--
Ciao, Silv:o)

 ScriptControl.Eval (trovastringa) da True
cosi' dovrebbe ma..... ho fatto diverse prove nella finestra immediata con
trovastringa= "k=colonne+1" dove k=6 e colonne=5 quindi il valutatore
dovrebbe dare vero
? scriptcontrol.eval(trovastringa) falso
? k=colonne+1 vero
? scriptcontrol.eval(k=colonne+1) ""
then
non funziona!!!!!
grazie comunque silvio


 dovrebbe dare vero
se conoscesse i valori delle variabili.
k e colonne esistono nel mondo VB, lo scriptcontrol ha uno scope proprio.
sc.ExecuteStatement ("k =" & k)
sc.ExecuteStatent ("colonne = " & colonne)
e riprova, sarai più fortunat[o|a]
--
Ciao, Silv:o)


ok sandro sono sicura che cosi' funziona, lo provo e poi ti faccio sapere
grazie sei stato gentilissimo


 ok sandro sono sicura che cosi' funziona, lo provo e poi ti faccio
         ^^^^ Ma non si chiama Silvio? :?

          ^^^^ Ma non si chiama Silvio? :?
la stringa "silvio" e' stata funzionata in "sandro" :P

 principiante che ti danno tanto fastidio!!!
Non funziona proprio cosě :) comunque per il valutatore ogni domanda č ben
accetta, ovviamente in privato se non riguarda problemi legati a VB
piuttosto che al componente.
Ciao
P.S.: nota che da oggi l'indirizzo č variato :)
--
y = f(
http://www.neodatatype.net
)

          ^^^^ Ma non si chiama Silvio? :?
O Sergio?
Questi doppi nomi mi fanno impazzire... ci ho messo due anni a capire qual
era il nome di un mio amico che si chiamava Daniele Graziano... fortuna che
si faceva chiamare Pino :P
Ciao



scusate ma dovete capire..... e' venerdi c'ho il cervello spappolato!!!!
di lunedi non e' che vada poi tanto meglio pero' capitemi lo stesso ;)
scusa silvio
bye


 piuttosto che al componente.
ok va gia' meglio......e bravo zanna!!!!!!
grazie e buon lavoro


 si faceva chiamare Pino :P
perň la firma Silv:o) dovrebbe fugare i dubbi
--
Ciao, Serg;o)

 però la firma Silv:o) dovrebbe fugare i dubbi
Quindi avevo indovinato! ;o)
Non mi capita mai sul 50% O:-)

 si faceva chiamare Pino :P
ah, pino daniele !

 Non mi capita mai sul 50% O:-)
Beh, lo sanno tutti che il nome va prima del cognome, tranne quella bestia
del maresciallo che alla visita di leva mi ha detto "ma chi è che ti ha
imparato a mettere prima il nome?"
:)
Ciao

 che ti ha imparato a mettere prima il nome?"
Il maresciallo aveva ragione: sotto le armi solo gli ufficiali utilizzano
l'ordine nome e cognome, cognome e nome č l'ordine corretto nonchč unico
possibile per sottoufficiali e truppa! Il fatto che non gli abbiano mai
insegnato l'ordine utilizzato dai civili a scuola (o che in quel momento non
fosse attento) č un altro discorso... ma non tutti i sottoufficilai sono
cosě! ;)