Newsgroup: it.comp.appl.access
Titolo: Esempio utilizzo di function

Ciao, vorrei approfondire il discorso delle function, sul ng ho
trovato molti esempi ma mi hanno creato una gran confusione, perchè
forse non ho le basi di teoria.
Punto fermo è che una sub non resituisce valori, una function si.
Potreste gentilmente spiegarmi meglio l'utilizzo delle routine
function attraverso alcuni esempi?
Grazie a tutti


Non è proprio come dici... una Sub potrebbe anche restituire valori se
i parametri passati vengono presi ByRef...!
In sostanza la prima cosa che devi avere sono le basi, senza delle
quali ogni spiegazione rischia di essere un'aggravio di dubbi... come
appunto la prima cosa che ti ho detto... scritta volutamente per farti
capire il problema tecnico non per metterti in difficoltà...!
Di fatto una Function o una Sub routine che eseguono azioni, ed alle
quali si possono passare parametri da usare eventualmente per le
azioni previste...!
Di norma se serve avere un Valore di ritorno serve usare una
Funzione... altrimenti basta una Sub...!
Questa Funzione(banale ed inutile) restituisce una stringa che dice il
nome della maschera attiva:
Public Function NomeMascheraAttiva() As String
     NomeMascheraAttiva=
Screen.ActiveForm.Name
End Function
oppure vuoi sapere se una determinata Form è aperta(sempre banale ed
inutile esempio) passando come parametro il Nome della Maschera:
Public Function IsOpen(strNomeForm As String) As Boolean
    IsOpen= CurrentProject.AllForms(strNomeForm).IsLoaded
End Function
Chiaramente le funzioni che tiho scritto sono una replica inutile
della proprietà IsLoaded... ma è giusto per fare l'esempio che
chiedevi...!
Una Sub invece esegue un'azione, come magari chiudere una Maschera...!
Controllo che sia aperta(altrimenti avrei un'errore) e, nel caso la
chiudo.
Public Sub ChiudiMaschera(strNomeMaschera as String)
    If  CurrentProject.AllForms(strNomeForm).IsLoaded Then Docmd.Close
acForm, strName
End Sub
Detto questo ti servono tutte le nozioni base sul Tipo di dati, sul
modo di passare i Parametri(ByVal/ByRef) e quant'altro trovi ben
dettagliato passando per l'Help ed il Visualizzatore Oggetti di
Access.
@Alex


Ben lontano dalla vetta!

Parametri(ByVal/ByRef)
...come PARLA bene! :D
Ciao ragazzo! ;-|
-- 
---
Ciao
Pablitomf
FORZA NAPOLI - - - SEMPRE!
Tifosi Napoletani, gente fantastica
http://it.youtube.com/watch?v=gUqFHOXrK-M&feature=related
 


Ciao Giovine... tutto bien...?
;-)
@Alex

big...@gmail.com
 ha scritto:

aggiungo a quanto spiegato da @lex,
io utilizzo alcune sub per raccogliere 'molti' valori in un colpo solo!
Una Function restituisce un solo valore e di un tipo ben preciso, ma se 
vuoi avere più valori di ritorno dalla procedura allora è meglio 
utilizzare una Sub con tanti parametri quanti valori ti servono in uscita.
Ecco che se devo indagare sui dati di un soggetto presente in Anagrafica 
   potrei utilizzare una sub che raccoglie il tutto, magari su varie 
tabelle. Es
....
Dim datanascita As Date, nazionalita As String, _
     ultimoPagamento As Date, ultimaAutomobile As String
.....
persona datanascita, nazionalita, ultimoPagamento, ultimaAutomobile
....
Sub persona (parstrDN As Date, parstrNAZ As String, pardatULTPAG As 
Date, parstrULTAUTO As String)
'' qui dentro scrivo le query o il codice che mi preleva i campi 
necessari dalle varie tabelle
End Sub
IMH questo mi permette di avere un 'corpo' della procedura abbastanza 
leggibile e di delegare alla Sub il lavoro sporco. Il tutto con un 
effetto di manutenibilità abbastanza alto.
-- 
IvanDaBologna
-=-=-==--==-=-=-
sottOFFICEale             - il mio blog
barbera del monferrato    - il mio vino
carmen                   - la mia donna
non necessariamente nello stesso ordine


SInceramente mi pare un'uso strano... non ti basta far restituire un
Dato da una Function di tipo Recordset...?
Un Recordset espone la collection FIELDS interrogabile con i
FieldName...!!!
Boh.....
@Alex

 FieldName...!!!
Mi avete confuso le mie poche nozioni!   ;-{)
Non ho capito una "cippa" del perche' dovrei usare una funzione.
O perche' usare una sub invece di una funzione e "vaisvirsa".
--
ac


Alessandro, intervieni chiarendo meglio, illuminandoci!

 ac
@Alex

 Alessandro, intervieni chiarendo meglio, illuminandoci!
Ho appena acceso una lampadina... va meglio...?
@Alex

big...@gmail.com
 ha scritto:

Bada che io sto nelle tue stesse condizioni.
Non sono io che "illumino d'immenso" anch'io chiedo di non essere preso 
dalla "forza oscura" e venero per questo il  dio Osram.
Per me una funzione (anche quella di impiegato del catasto) ha sempre 
significato "aho' fai qualcosa ed alla fine restituiscimi il risultato 
secondo le tue regole istituzionali" e non voglio sapere ne come ne 
quando ne perche' lo fai che poi Microsoft abbia inutilmente complicato 
le cose con le sub e' perche' li sono una massa di pressapochisti. ;-{)
--
ac

 ac
Mascalzoni...
@Alex

Alessandro Baraldi ha scritto:

E' vero se un recordset può bastare da solo a darti TUTTE le risposte.
Ma è anche vero che se devi sottoporre i risultati del recordset ad 
ulteriori analisi e trasformazioni(sempre le stesse, sempre le stesse) 
molte volte ed in più punti dei vari mdb ... ecco che una sub con 
parametri di ritorno mi è più congeniale( e più manutenibile). Io le uso 
forse perchè non so classare e subclassare! ;))



Nel caso di cui parli è più opportuno definire come Public una varType
ed appoggiarsi a quello... o, ancora meglio se vuoi rendere flessibile
il tutto proprio andare su CLASSI strutturate appositamente....
Diciamo che quello che hai fatto non è "SBAGLIATO" è migliorabile con
altre tecniche.
@Alex

 
Nel caso dell'impiegato del catasto e' appunto una funzione vuota. Tutti 
i gusti vanno rispettati.
--
ac