Newsgroup: it.comp.lang.visual-basic
Titolo: Function in Access

Buongiorno a tutti!
E' possibile in Access utilizzare una function che mi ritorni piů di un
parametro? E se sě, come č la sintassi?
Grazie
Eleonora
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 un parametro? E se sì, come è la sintassi?
Parlo di VB (ma penso che anche tu ti riferisca a VBA): No, non nel senso
canonico.
Una Function può restituire un solo valore, ma ne puoi passare e farti
restituire quanti ne vuoi.
La Function Pippo (par1 As ..., par2 As ..., ..., [Optional] parn[=...]) As
...
Potrà solo restituire Pippo in una chiamata del tipo risultato=Pippo
(1,"a",...), ma la stessa potrebbe al suo interno modificare/assegnare uno o
più dei parametri passati.
Quindi, ad esempio: risultato=Pippo(1, parametro_restituito, ...) ti
restituirà, come sopra, Pippo assegnandolo a risultato, ma potrai anche
liberamente usufruire di quanto messo (dalla Function stessa) in par2 che ti
ritroverai nel chiamante in parametro_restituito.

 parametro? E se sě, come č la sintassi?
Non so in access, ma tra le novita' di vb6 in msdn veniva illustrata questa:
"Restituzione di una matrice da una funzione
Una funzione puň restituire una matrice di valori. Puň risultare utile, 
ad esempio, restituire una matrice di byte da una funzione senza dover 
eseguire conversioni da e in una stringa.
La restituzione di una matrice da una funzione č leggermente diversa 
dalla restituzione di un singolo valore in quanto richiede un tipo 
esplicito nella dichiarazione della funzione e il passaggio del valore 
restituito nell'istruzione Exit Function.
L'esempio seguente illustra una funzione che restituisce una matrice di 
interi.
Private Sub Form_Load()
    Dim i As Integer
    Dim ReturnArray() As Integer
    i  = 1
    ReturnArray() = ArrayFunction(i)
End Sub
Public Function ArrayFunction(i As Integer) As Integer()
    Dim x(2) As Integer
    x(0) = i
    x(1) = i + 1
' Il valore viene passato nell'istruzione Exit Function.
    Exit Function x
End Function
"
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 restituire quanti ne vuoi.
praticamente, se ho ben capito mi faccio restituire una stringa dove metto
tutto quello che mi serve separato da un "qualcosa" ?
stringa restituita = "Eleonora*programmatrice*access"
se volessi avere nome, lavoro, linguaggio..
grazie :)


 se volessi avere nome, lavoro, linguaggio..
Function Pippo(passato1 As Integer, passato2 As Integer, restituito1 As
Long, restituito2 As Long)
    restituito1 = passato1 * 2
    restituito2 = passato2 * 3
    Pippo = passato1 + passato2
'E, volendo:
    passato1 = 12
    passato2 = 34
End Function
... studiare.

 ... studiare.
 ..scusa.. non è questione di studiare ;)forse non mi sono spiegata.. oppure
non capisco ;)
Report("NM") = TrovaNome(M)
Function TrovaNome(ID_gatto As Integer) As String
<cut>
Set RsM = DbM.OpenRecordset("SELECT * FROM Gatti WHERE ID = " & ID_gatto,
dbOpenDynaset)
If RsM.RecordCount > 0 Then
        TrovaNome = RsM!Nome
End If
<cut>
End Function
siccome nella select oltre a nome ci sono indirizzo e città etc etc..
io volevo mettere tutto in una sola function.. altrimenti devo ripetere la
stessa torta per 3 volte per ognuno dei campi e fa un milione di volte :(
se la funzione mi ritorna restituito1 e restituito2 ho già i campi divisi..
boh..
adesso è un po' tardi e mi sta venendo l'influenza..
cmq grazie :)


 milione di volte :(
Bene.
Report("NM") = TrovaNome(M, indirizzo_restituito, citta_restituita)
Report("INDIRIZZO")=indirizzo_restituito
Report("CITTA")=citta_restituita
Function TrovaNome(ID_gatto As Integer, ind as string, piripicchio as
string ) As String
Set RsM = DbM.OpenRecordset("SELECT * FROM Gatti WHERE ID = " & ID_gatto,
dbOpenDynaset)
If RsM.RecordCount > 0 Then
        TrovaNome = RsM!Nome
        ind = RsM!Indirizzo
        piripicchio = RsM!Citta
End If
End Function

 
O anche:
dim anagrafica() as string
anagrafica()=trovanome(M)
Report("NM") = anagrafica(0)
Report("INDIRIZZO")=anagrafica(1)
Report("CITTA")=anagrafica(2)
''''
function trovaNome(ID_gatto As Integer) as string()
  dim x(0 to 2) as string
  Set RsM = DbM.OpenRecordset("SELECT * FROM Gatti WHERE ID = " & 		 
ID_gatto, dbOpenDynaset)
  If RsM.RecordCount > 0 Then
          x(0) = RsM!Nome
          x(1) = RsM!Indirizzo
          x(3) = RsM!Citta
  End If



questa mi sembra bellissima :)
adesso devo andare in ufficio, ma stasera come torno la provo !
Grazie!
Eleonora



ok.. le provo tutte e due :)
grazie
Buona giornata
Eleonora



non funziona nè una nè l'altra :(
nel senso che, all'interno della function ho i dati corretti, ma come esco
non restituisce nulla..
con la matrice mi dà errori sugli indici che non riesco a sistemare..
ho risolto mettendo un campo di maschera nascosto come appoggio e mettendo
lì il campo di tabella all'interno della function.
Nel corpo del report, dopo aver lanciato la function, sposto il campo di
appoggio nel campo che mi occorre...
va benissimo così
grazie


 non funziona nè una nè l'altra :(
Non ci credo.
Facci vedere il codice della Function, della sua chiamata e delle poche
righe che seguono la chiamata.