Newsgroup: it.comp.appl.access
Titolo: Funzioni: neofita cerca consiglio

Buongiorno a tutti
é la prima volta che lavoro con le "funzioni" e non so bene come
muovermi per cui chiedo aiuto
spulciando il NG e il sito comune ho messo insieme quanto segue allo
scopo di trasformare una serie di record di una tabella in una stringa
in un'altra ovvera: Da
id   descr
1     aaa
1     bbb
1     ccc
tiro fuori   id 1    descr aaa, bbb, ccc
Questa è la query (qryScelte)
SELECT tblPippoAll.id_pippo, Funz1([id_pippo]) AS SMuno,
Funz2([id_pippo) AS SMdue, Funz3 ... FROM tblPippoAll;
Poi ho associato ad un pulsante in una maschera il codice:
        DoCmd.OpenQuery "qryScelte", , acEdit
        upd = "UPDATE tblPippoAll INNER JOIN qryScelte ON
tblPippoAll.id_pippo = qryScelte.id_pippo SET tblPippoAll.SMuno=
[qryScelte]![SMuno], tblPippoAll.SMdue = [qryScelte]![SMdue],
tblPippoAll.SMtre... ;"
        DoCmd.RunSQL upd
Ed infine le funzioni 
Function Funz1(id_pippo As Integer) As String
    Dim rst As DAO.Recordset
    mySql = "SELECT tblSMuno.id_pippo, tlkpUno.descrizione,
tblSMuno.id_check,tblSMuno.id_uno FROM tblSMuno INNER JOIN tlkpUno ON
tblSMuno.id_uno = tlkpUno.id_uno WHERE (((tblSMuno.check)=Yes));"
    Funz1 = ""
    Set rst = CurrentDb().OpenRecordset(mySql)
    rst.MoveFirst
 
    Do Until rst.EOF
        If rst!id_pippo = id_pippo Then
            Funz1 = Funz1 & rst!descrizione & ", "
        End If
        rst.MoveNext
    Loop
 
    Funz1 = Left(Funz1, Len(Funz1) - 2)
    Set rst = Nothing
 
End Function
Funziona tutto! il mio problema è che ho tre tabelle di destinazione (le
tblPippoAll in cui inserisco la stringa)per ognuna delle quali ho, come
minimo 5 tabelle di provenienza (le tblSMuno, due...)da cui raccogliere
i dati...
Devo scrivere una Funzione per ogni tabella di provenienza? o c'è un
modo di scrivere una funzione comune per tutte? o magari esiste un altro
modo per fare questo lavoro e io non l'ho trovato....
Grazie Mille e scusate l'gnoranza!!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 i dati...
Non è che la tua struttura dati necessita di un po' di normalizzazione?
E comunque perchè devi salvare in una tabella il risultato di una query che
puoi rifare in qualunque momento?
Antonio

 wrote in message
news:Xn7lb.55300$
e6.19...@twister2.libero.it

Buone domande!! Faccio un passo indietro e cerco di spiegare
Inizialmente avevo delle tabelle con dei campi in cui andavo a scrivere
i valori provenienti da delle ComboBox a Scelta Multipla
Poi il personaggio che ha costruito le pagine ASP per rendere
compilabili alcune delle tabelle del mdb da WEB, ha detto che “così non
andava bene perché occupava troppo spazio e poi non si riuscivano a
gestire le modifiche alle scelte” e così per ogni Scelta Multipla mi ha
fatto costruire un’insieme di tabelle e delle query
Quindi adesso mi ritrovo con questa struttura:
tabella principale
TblPippo -->  id_pippo, dato1, dato2, ...
e poi per ogni scelta multipla necessaria
tblSMuno -->  id_pippo, id_uno, check
tlkpUno -->  id_uno, decrizione
qrySMuno -->  SELECT tblSMuno.id_pippo, tlkpUno.descrizione,
tblSMuno.check, 	tblSMuno.id  FROM tblSMuno INNER JOIN tlkpUno ON
tblSmuno.id_uno =
              tlkpUno.id_uno;
qryAppendSMuno  à INSERT INTO tblSmUno ( id_pippo, id_uno )
SELECT 	tblPippo.id_pippo, tlkpUno.id_uno AS id_uno FROM tlkpUno,
tblPippo
	WHERE id_pippo=[@id_pippo];
tblPippo ha 4 scelte multiple e poi ho una tblPaperino che ne ha 7 etc…
A me sembra una cosa un po’ ingarbugliata, però non conosco ASP nè ho
mai costruito pagine web quindi mi sono dovuta fidare!
Ora devo creare un archivio storico (che non interagisce con il Web e
non ha pagine ASP di sorta) nel quale i dati verranno solo letti e non
modificati, e in cui dovrò inserire una serie di diciamo “Percorsi di
ricerca” …per cui pensavo di alleggerire la struttura e semplificare le
ricerche mettendo in tblPippoAll i campi testo SMuno, SMdue etc con
dentro per ogni record tutto quanto scelto dall’”utente web” attraverso
il meccanismo di cui sopra.
Non escludo che la mia non sia una buona idea, ma non saprei come altro
fare!
Grazie Nadia


 i dati...
Ciao Nadia
Se cambia solo una tabella puoi passare alla funzione anche il nome di essa
---------------
SELECT
     tblPippoAll.id_pippo,
     Funz1([id_pippo],"tblSMuno") AS SMuno,
     Funz1([id_pippo],"tblSMdue") AS SMdue,
     Funz1([id_pippo],"tblSMtre") AS SMdue
FROM tblPippoAll;
-------------
La funzione
----------------------
Function Funz1(id_pippo As Integer,NomeTb as variant) As String
    Dim rst As DAO.Recordset
    mySql = "SELECT  " & _
                  NomeTb & ".id_pippo, " & _
                  "      tlkpUno.descrizione," & _
                  NomeTb &  ".id_check," &  _
                  NomeTb &  ".id_uno " &  _
                  "FROM " & _
                  NomeTb & " INNER JOIN tlkpUno ON " & _
                   NomeTb &  ".id_uno =  tlkpUno.id_uno " & _
                  "WHERE (((" & NomeTb & ".check)=-1));"
ecc ecc.
--------------------
Se cambiano altri parametri (tipo tlkpUno) puoi utilizzare la stessa
tecnica.
Ciao Giorgio

 > Funziona tutto! il mio problema è che ho tre tabelle di destinazione (le

Ciao Giorgio
grazie del suggerimento 
Ho dovuto aspettare di essere ben sveglia per capire bene il meccanismo
(ovvero che i nomi delle tabelle vengono passati alla funzione dalla
query)ma a quel punto è andato tutto liscio e sono riuscita a scrivere e
testare il codice su un mdb di prova dove ha funzionato esattamente come
mi
serve
adesso mi metto all'opera col db vero 
Ancora Grazie
Nadia


 > Funziona tutto! il mio problema è che ho tre tabelle di destinazione (le

Ciao Giorgio
grazie per il consiglio
ho dovuto aspettare di essere ben sveglia e senza gente agitata attorno
per riuscire a capire che il nome delle tabelle viene passato alla
funzione dalla query (immagino sia uno di quei concetti base che mi
mancava... e beh! ora l'ho fatto mio!)
Capito ciò il resto è stato solo un destreggiarsi tra i nomi assurdi che
il cosiddetto "consulente esterno" a dato alle varie tabelle
Ho provato il tutto sul mio "caso semplice" in cui ho un campo chiave
unico e funziona perfettamente
adesso tenterò l'ulteriore adattamento per la tabella in cui ho una
chiave formata da due campi (sempre dono del consulente!)
e spero di triuscire a far funzionare anche quello senza disturbare di
nuovo il NG
Ancora Mille Grazie
Nadia
