Newsgroup: it.comp.appl.access
Titolo: accodare a una tabella dati filtrati

credo che la soluzione sia semplice, anche se mi ci sto picchiando da tre 
giorni:
Ho una maschera basata su una query di selezione che mi filtra i dati di una 
tabella attraverso un gruppo di opzioni e 2 righe di codice vba sull'evento 
dopo aggiornamento del gruppo di opzioni.
Vorrei accodare i record filtrati a una seconda tabella.
Ho creato una query di accodamento, ma se la eseguo da vba subito dopo il 
codice che filtra i record mi si accodano tutti i record e non solo quelli 
filtrati.
Aiutooooo.
Ciao Roby FF

"Roby FF" <rob...@chiedi.mi> wrote in message 
news:441dae46$1...@newsgate.x-privat.org...

E quale sarebbe il codice che filtra i record?
Non potrebbe la stessa tabella di Append eseguire anche
l'operazione di filtro?
Bruno 

"Roby FF" <rob...@chiedi.mi> ha scritto nel messaggio 
news:441dae46$1...@newsgate.x-privat.org...

 Anche nella query di accodamento devi usare gli stessi filtri e farlo prima 
di accodare i dati.
Ciao, Carlo 

"Roby FF" <rob...@chiedi.mi> ha scritto nel messaggio 
news:441dae46$1...@newsgate.x-privat.org...

ricapitolo:
ho una tabella denominata "Centri" che contiene due campi numerici chiamati 
"MESE_1" e "MESE_2".
Nella maschera ho inserito un gruppo di opzioni (costituito da 12 pulsanti, 
ognuno rappresenta un mese dell'anno) ed ho abbinato all'evento afterupdate 
del gruppo di opzioni (denominato cornice46) questo codice per filtrare i 
record che contengono il mese selezionato o nel campo mese_1 oppure nel 
campo mese_2:
Me.Filter = "MESE_1=" & Cornice46 & " Or " & "MESE_2=" & Cornice46
      Me.FilterOn = True
fino qui tutto facile.
Ora vorrei accodare il recordset così ottenuto ad una seconda tabella 
denominata CentriDaVisitare; come posso fare?
Come si esegue una query di accodamento da VBA, considerando che quando 
costruisco la query non conosco ancora quale sarà il mese selezionato?
Si possono passare parametri ad una query di accodamento? Se sì come?
Grazie
Roby Effeeffe

"Roby FF" <rob...@chiedi.mi> ha scritto nel messaggio 
news:441edc42$1...@newsgate.x-privat.org...

Le domande da farsi sono: quale valore mi serve? Dove lo trovo?
La Cornice46 restituisce il valore richesto? Mi serve un mese? (Agosto 
oppure 8?)
Rispondi a queste domande e poi avrai anche la soluzione.
Per passare il valore ad una query (come criterio) ti consiglio senz'altro 
il codice e in particolare una funzione pubblica.
Per esempio se Cornice46 restituisce "gennaio" la tua funzione restituirà 
una stringa:
Public Function DimmiMese()as string
DimmiMese = Forms!TuaMaschera!Cornice46
End function
Nella query, nei criteri del campo mese, scriverai DimmiMese()
Il controllo Cornice46 restituisce un numero ma a te serve il mese come 
stringa?
Public Function DimmiMese()as String
select case Forms!TuaMaschera!Cornice46
Case 1
DimmiMese = "Gennaio"
Case 2
DimmiMese = "Febbraio"
case...
end select
End function
Cornice46 restituisce un intero?:
Public Function DimmiMese()as integer
DimmiMese = Forms!TuaMaschera!Cornice46
End function
In tutti i casi la maschera deve essere aperta altrimenti prima di chiuderla 
dovrai valorizzare una variabile globale con il valore (e il tipo) scelto in 
Cornice46 e richiamare questa variabile con una funzione.
Ciao, Carlo 

 ha scritto nel messaggio 
news:441ee5e7$0$18296$4faf...@reader1.news.tin.it...

Grazie, ma non funziona ancora
ho inserito questa dichiarazione:
Public Function DimmiMese() As Integer
DimmiMese = Forms![piano del mese]!Cornice46
End Function
e nei campi mese_1 e mese_2 della query di accodamento alla riga criteri ho 
scritto DimmiMese().
Quando eseguo l'istruzione docmd.openquery Mia.querydiaccodamento il 
messaggio di errore è:
Errore di run-time '3085':
funzione 'DimmiMese' non definita nell'espressione.
Ti prego aiutami ancora
Ciao Roby FF 

 Si possono passare parametri ad una query di accodamento? Se sì come?
Una delle due:
1 - Esegui la query di accodamento ponendo la condizione
      "WHERE MESE_1=" & Cornice46 & " Or " & "MESE_2=" & Cornice46 & ";"
2 - La variabile Recordset contiena già i soli record filtrati. Puoi 
eseguire
     l'Append con:
==============================
Private Sub Command6_Click()
Dim RS As Recordset, i As Long
Set RS = CurrentDb.OpenRecordset("NumTable_Ricerca")
Do Until Recordset.EOF
    RS.AddNew
    For i = 0 To RS.Fields.Count - 1
        RS(i) = Recordset(i)
    Next
    RS.Update
    Recordset.MoveNext
Loop
End Sub
================================
Dove RS è il recordset creato con la tabella a cui fare l'Append
Ciao
Bruno
 

 Ciao Roby FF
Per verificare se la funzione restituisce i giusti valori, sostituisci, 
nella query a DimmiMese() il valore 1 nel campo mese_1 e poi 2 nel campo 
mese_2. Esegui la query e vedi se funziona. Se funziona vuol dire che la 
funzione non restituisce il tipo di dati richiesto. La funzione dovrebbe 
risiedere in un modulo pubblico e bisognerebbe controllare se Cornice46 
restituisce un'intero (1,2,3...12) e se la maschera è aperta.
Inoltre usa una query salvata per fare le prove perchè l'errore potrebbe 
risiedere nell'istruzione.
La funzione va usata sì nella query ma nella riga dei criteri.
Perchè usi due mesi? Devono essere filtrati per lo stesso valore? Se così 
non è la sola funzione non basta, ma ce ne vogliono almeno 2 che 
restituiscono due valori diversi.
Usi una query raggruppata? In questo caso la o le colonne mese devono usare 
il "dove" nella formula e non raggruppamento o altro.
Fammi sapere, magari postando la stringa sql che usi.
Ciao, Carlo 

 Ciao, Carlo
FUNZIONA!!!!
Avevi ragione la variabile non era dichiarata in un modulo pubblico. ora č 
tutto corretto aggiunge solo i dati filtrati e io ho imparato una cosa 
nuova.
Grazie sei stato un angelo
Ciao Roby FF 

 Ciao Roby FF
Prego.
Si vive anche per fare qualcosa per gli altri!
Ciao, Carlo