Newsgroup: it.comp.appl.access
Titolo: function annidate, sino a che punto è possibile?

.. non sapevo si potessero *annidare* in questo modo delle funzioni.
Dovevo ricavare, su aggiornamento di un altro field e su un campo non
associato , il nome del mese.
Dopo averlo ricavato, dovevo rendere la prima lettera maiuscola.
Solo che non mi riusciva in automatico , da Vba, di rintracciare
nessun evento  "Su", in quanto , aggiornando la field da Vba non
associata, non accadeva nessun evento.
Nè aggiornamento, nè modifica, nè nient'altro.
Ho quindi provato per puro gioco , del tipo " vediamo che  succede",
a mettere assieme le due funzioni e
non so come , e con mia meraviglia, dopo diverse prove il tutto
funziona.
fields:
DataAttività ( associato)
MeseNum ( non associato)
MeseTxt ( Associato)
Code:
Sub DataAttività_afterupdate
Me.MeseNum = Month(Me.DataAttività) ' Ricava il numero del mese in
base alla data
Me.MeseTxt = StrConv(MonthName(Me.MeseNum, False), vbProperCase) '
Ricava il nome del mese e rende la prima lettera Maiuscola.
Adesso mi chiedo: è una casualità o con un po' di attenzione e di
*creatività* e annidando più funzioni , si puo' creare del codice  più
pulito e più funzionale?
Ciao
Pietro

don.pete...@gmail.com
 ha scritto:

che significato ha per te "annidare piu' funzioni"? In quello che hai 
scritto non mi sembra di vedere alcun annidamento
questo e' un annidamento
funza
   call funzb
exit funz
funzb
   call funzc
exit funz
o quest'altro ( in questo caso si chiama ricorsivita')
funza
  call funza
exit funz
anche se per come la ho
scritta genera un "out of memory" in poco tempo
--
ac

 
don.petergabr...@gmail.com
 ha scritto:

perdonami , sono sicuramente *per il momento* molto meno *saputo* di
te , ma non ci vedo nessuna differenza
funzA(FunzB, ParametriB, parametriB) , parametriA)
Sto chiedendo ad una funzione A di analizzare una funzione B e di
restituirmela
in base ai parametri A
esattamente come :
funzA
 call funzB
exit funzA
Wikipedia:In informatica viene detto annidamento (nesting in inglese)
l'inserimento di una struttura di controllo all'interno di un'altra
Vero è che le *strutture di controllo* afferiscono  ai  controlli dei
flussi di esecuzione, ma sii buono. Intendevo chiedere fino a quale
livello si potessero *il termine lo lascio scegliere a te* mettere
assieme più funzioni.
Ho passato due momenti molto distinti nella mia vita; il primo, nel
quale prendevo sempre 4 in matematica, il secondo, nel quale prendevo
sempre 10 con lode.
La costante era che io ero sempre lo stesso.La variabile, chi
insegnava in quel momento.
Con molta simpatia ( non potrei non averne, in fondo sei sempre qui a
rispondere a chi chiede aiuto) ma se ti fossilizzi sul tuo *sapere* e
non aiuti a capire
la differenza tra una cosa e la sua apparente similitudine, non dai in
realtà nessun contributo al sapere.
Rispondere * non hai capito un accidenti* non ti eleva da nessuna
parte, e di contro , non *spiega* niente a chi ha posto la domanda.
Sai un sacco di cose.E potresti essere punto di riferimento di tanti,
me compreso.
Con simpatia e con tanto, tanto, rispetto
Pietro

don.pete...@gmail.com
 ha scritto:
[cut]
http://tinyurl.com/6kkwyn
--
ac

 ha scritto nel messaggio 
news:e57a0ed2-254f-4d01...@w7g2000hsa.googlegroups.com...






Ciao
Pietro
[risposta]
ciao Pietro
la casualità dipende dalla tua preparazione nel senso che se sei addivenuto 
ad un risultato esatto per "tentativi" ed usando una sintassi corretta ma a 
te sconosciuta, si può parlare di casualità; altrimenti un corretto 
risultato lo si ottiene applicando la giusta sintassi e senza alcuna 
casualità, anzi in modo spesso rigido e predeterminato.
Quanto alle funzioni interne al sistema come "StrConv", "MonthName" o 
"Month" (vbProperCase è una costante) queste possono essere usate, combinate 
tra loro, in un unico costrutto sintattico e finalizzato ad un risultato 
voluto oppure essere usate separatamente (come hai fatto tu nell'esempio).
Il risultato spesso non cambia.
Per esempio il tuo codice poteva essere scritto anche così:
Me.MeseTxt = StrConv(MonthName(Month(Me.DataAttività), False), vbProperCase)
ottenendo direttamente la valorizzazione di Me.MeseTxt ma senza la 
valorizzazione di Me.MeseNum...questo significa che se a te serve la 
valorizzazione di Me.MeseNum hai scritto bene il codice altrimenti andava 
scritto per come ho riportato (sono possibili anche altre strade).
Scrivere codice "più pulito e più funzionale" è una pratica caldamente 
consigliata ma questo vuol dire seguire e conoscere a fondo il linguaggio di 
sviluppo, mai affidandosi al caso.
Per esempio l'annidamento di vari If...Then...Else (istruzioni) in un unico 
ciclo non è sempre consigliato a causa della difficoltà di lettura e di 
costrutto ma questo non vuol dire che non si possa usare...basta sapere 
quello che si fa.
Così per i cicli di For...Next o While...Wend annidati.
Stesso discorso per i report e sottoreport annidati o per le query 
annidate...
Ciao, Carlo


Penso si riferisse a:
Me.MeseTxt = StrConv(MonthName(Me.MeseNum, False), vbProperCase)
...MonthName "annidata" in StrConv...cioč passa una funzione che restituisce 
una stringa come parametro di un'altra funzione.
In fondo si parla di strutture annidate...
Ciao, Carlo

parte, e di contro , non *spiega* niente a chi ha posto la domanda.
Sinceramente non mi sembra che abbia voluto dire questo!
Di certo non lo ha scritto.
Ciao, Carlo

 In fondo si parla di strutture annidate...
Si, vero. Ma poiche' Roberto da Parma, in un'altro post, gli aveva 
inviato una soluzione annidando:Left,Mid,Instr,Len gli ho fatto una 
semplice domanda per "capire" (io) cosa intendesse per annidamento.
Ma credo si sia "offeso" perche' in quel 3d, avendomi fatto una domanda 
sulla ubound gli ho *spiegato* in modo forse troppo didascalico il codice.
Ed anche stavolta, forse, non ha completamente digerito funzA(funzA(x)).
Pero' "siamo" bravi. In pochi giorni e' passato dai bastoncini al 
calcolo differenziale  ;<)
Ma tant'e'. Panta rei
--
ac

 ha scritto nel messaggio 
news:f84d10f2-8035-4040...@8g2000hse.googlegroups.com...











Pietro
Tralasciando il discorso dell'annidamento...sai quanti nidi faccio.... :-)))
Se vogliamo andare a cercare la massima compressione del codice potresti 
fare anche così...
StrConv(Format(Me.DataAttività,"mmmm"), vbProperCase)
e ti eviti la casella non associata....
Poi dopo sono tutte "seghe mentali"....rimanendo il fatto che se un codice è 
scritto male...è scritto male...
Ciauz
-- 
Roberto da Parma 

 ha scritto nel messaggio 
news:tpxnk.15932$0N....@tornado.fastwebnet.it...

Quanto prendi Alessa' per una seduta?
Ciao.
-- 
Sergio MAZZA 

Sergio MAZZA ha scritto:

«Dammi un centesimo, uno solo».
;<)
--
ac

 ha scritto

"funz funz" mi assomiglia all'onomatopea di un ritmo musicale...
:=)


Volevo chiedere scusa ad Ac, per averlo frainteso ed aver reagito
nervosamente al suo intervento.
Evidentemente avevo *molta* necessità di staccare dal lavoro e
rilassare la mente.
Grazie invece per i suoi preziosi consigli assieme a queli di tutti
gli altri. Anche quelli giustamente cattedratici.
Servono da sprone a studiare più e meglio.
Pietro