Newsgroup: it.comp.appl.access
Titolo: tabella di archivio

Salve a tutti
Problema:
ho una tabella di archivio in cui i valori vengono inseriti una volta
al mese.
I valori da inserire nella tabella sono il frutto di querry, una querry
per ogni valore.
io sto facendo cosi (non conosco la programmazione vba)
ho creato le maschere relative alla tabella ed ad ognuna di quelle
querry in modo da poter usare una macro con una serie di impostavalore
....
la macro apre la maschera della tabella e poi apre una alla volta le
maschere relative alle querry, fa impostavalore e chiude le maschere.
Però ... se una delle querry (che sono semplici querry che raggruppano
i valori e le contano) non ha valore la maschera cortuita sulla querry
appare vuota, senza il controllo relativo e la macro dice che non trova
il controllo.
domande:
1 - c'è (sicuramente) una maniera piu semplice?
2 - che tipo di condizione devo mettere nella macro per non fargli fare
l'azione impostavalore nel caso di valori nulli? (ovvero di controlli
che non ci sono perchè la querry non ha valori)
3 - ma bisogna passare per forza dalle maschere? non c'è una maniera
di impostare in una tabella i valori ricavati da varie querry? (ho
provato a inserire il codice sql della querry come valore predefinito
della tabella e anche della maschera basata sulla tabella ma non mi
funziona
Spero di essere stato abastanza chiaro e soprattutto spero che qualcuno
abbia una soluzione pronta, o come minimo che qualche esperto sia
solleticato dal problema :)
Ciao a tutti

 ha scritto nel messaggio 
news:1165407931....@l12g2000cwl.googlegroups.com...
Salve a tutti
Problema:
ho una tabella di archivio in cui i valori vengono inseriti una volta
al mese.
I valori da inserire nella tabella sono il frutto di querry, una querry
per ogni valore.
io sto facendo cosi (non conosco la programmazione vba)
ho creato le maschere relative alla tabella ed ad ognuna di quelle
querry in modo da poter usare una macro con una serie di impostavalore
....
la macro apre la maschera della tabella e poi apre una alla volta le
maschere relative alle querry, fa impostavalore e chiude le maschere.
Perň ... se una delle querry (che sono semplici querry che raggruppano
i valori e le contano) non ha valore la maschera cortuita sulla querry
appare vuota, senza il controllo relativo e la macro dice che non trova
il controllo.
domande:
1 - c'č (sicuramente) una maniera piu semplice?
2 - che tipo di condizione devo mettere nella macro per non fargli fare
l'azione impostavalore nel caso di valori nulli? (ovvero di controlli
che non ci sono perchč la querry non ha valori)
3 - ma bisogna passare per forza dalle maschere? non c'č una maniera
di impostare in una tabella i valori ricavati da varie querry? (ho
provato a inserire il codice sql della querry come valore predefinito
della tabella e anche della maschera basata sulla tabella ma non mi
funziona
Spero di essere stato abastanza chiaro e soprattutto spero che qualcuno
abbia una soluzione pronta, o come minimo che qualche esperto sia
solleticato dal problema :)
Ciao a tutti
non sono un grande esperto, ma ritengo che dovresti farci un esempio di 
almeno una di queste query.
Intendo: copia e incolla la stringa SQL della query, cosě abbiamo qualcosa 
di 'certo' su cui poter discutere ..
IvanDaBologna 

Allora mi spiego meglio
ho un database che non ha uno storico, ovvero i dati cambiano ogni
mese.
Per avere uno storico, mi sono inventato una tabella non collegata a
nessun'altra dove archiviare i dati ogni mese e quindi poter
rintracciare i dati dei mesi passati.
questa tabella si chiama ARCHIVIO DATI.
I dati da inserire nella tabella vengono fuori da querry tipo questa:
SELECT Count([LISTA CLIENTI].ID) AS ConteggioDiID, [LISTA
CLIENTI].Fascia
FROM [LISTA CLIENTI]
GROUP BY [LISTA CLIENTI].Fascia
HAVING ((([LISTA CLIENTI].Fascia)="N"));
questa nell'esempio estrae il numero dei clienti che nel mese hanno la
fascia N dalla tabella LISTA CLIENTI
La maschera ARCHIVIO DATI ha come origine dati la tabella ARCHIVIO DATI
e, nell'esempio, la maschera AD PARCO N ha come origine dati la querry
sopra descritta; queste due maschere esistono perchè l'azione
IMPOSTAVALORE nella macro non si può fare tra querry e tabella ma solo
tra maschere.
alla fine del mese una macro apre le maschere e imposta il valore di
ogni campo della maschera ARCHIVIO DATI come uguale a quello della
maschera relativa alla querry giusta; nel nostro caso:
Azione impostavalore:
elemento:[ARCHIVIO DATI]![parco N]
espressione:[AD PARCO N]![ConteggioDiID]
Spero di avere spiegato meglio ora la situazione.
Primo problema: se la querry non restituisce nessun valore (non c'è
nessun cliente di fascia N nel mese) la maschera non apre nessun
elemento e la macro non funziona (non trova [AD PARCO
N]![conteggiodiid])
ho provato a mettere una condizione nella macro che non facesse
eseguire l'azione impostavalore se la macro non ha valore ma non sono
riuscito a trovare niente che funzioni.
Secondo problema: Mi sembra strano che ACCESS non preveda un metodo piu
veloce, ovvero gia studiato per risolvere questo problema.
Grazie per la pazienza Ivan :)

ERRATA CORRIGE
l'azione impostavalore non ha come caratteristiche queste:
 elemento:[ARCHIVIO DATI]![parco N]
 espressione:[AD PARCO N]![ConteggioDiID]
ma queste:
Azione impostavalore:
elemento:[maschere]![ARCHIVIO DATI]![parco N]
espressione:[maschere]![AD PARCO N]![ConteggioDiID]
mi sono dimenticato la parte [maschere]! davanti (ma nel programma c'è
infatti non è questo che nn funziona)

 ha scritto nel messaggio 
news:1165422258.9...@n67g2000cwd.googlegroups.com...
Allora mi spiego meglio










ciao Ciro,
come ti dicevo non sono un grande esperto ed infatti mi sono perso ... un 
passagggio.
E' vero che Access non prevede ImpostaValore verso una tabella, ma hai a 
disposizione le query di Aggiornamento, quelle sono fatte proprio per 
prelevare un 'dato' e posizionarlo nel record al posto giusto.
Due domandine:
1) citi la fascia "N", ma hai solo quella condizione o una serie di 
possibili valori per quel campo [fascia]?)
2) nelle varie descrizioni e campi mi sono perso la definizione di 'mese', 
hai previsto un campo dove registrare questa informazione?
3) perchè parli di maschere, e non provi a cambiare l'origine della maschera 
selezionando (o componendo da codice) una query adeguata?
Adesso ti sentirai frustrato, hai chiesto una risposta e ti giro tre 
domande! ma non avermene, forse arriviamo alla soluzione ...
IvanDaBologna

 IvanDaBologna
Grazie, non avevo pensato alle querry di aggiornamento, stanotte penso
ad una procedura tramite le querry di aggiornamento e potrebbe essere
una buona soluzione.
Potrebbe essere semplicemente di trasformare le querry di selezione in
querry di aggiornamento che modificano la tabella ARCHIVIO DATI ...
per quanto riguarda le domande:
1) ho piu valori possibili per il campo fascia e infatti ho una querry
che per ogni valore possibile
2) nella tabella ARCHIVIO DATI ci sono due campi: mese ed anno che
indentificano il record infatti sono chiavi primarie
3) non ho capito la domanda ma intuisco che nasconde conoscenze che mi
potranno essere molto preziose :) mi spieghi meglio questa procedura?

potranno essere molto preziose :) mi spieghi meglio questa procedura?
Fermo restando che potresti risolvere tutto con le query di Aggiornamento 
ben studiate.
La domanda numero 3 voleva dire:
Una maschera ha una origine dati o SourceRow che può essere 
indifferentemente una tabella o una query.
La query può essere presente nell'elenco delle query fisse (quelle che ti 
compaiono nella finestra del database) oppure può essere creata 'al volo'.
Ti propongo due possibili soluzioni da adattare alle tue esigenze.
1)------------------
Potresti aggiungere una casella combinata nella testa della maschera 
principale, con origine dati dalla tabella Fasce (se l'hai prevista!). Se 
non hai fatto una tabella Fasce puoi riempire le righe della casella 
combinata con l'elenco maualmente(in fase di progettazione) delle fasce, ok 
?
Sull'evento Dopo Aggiornamento della casella combinata (che chiameremo 
cmbCerca) puoi aggiungere questo codice :
Private Sub cmbCerca_AfterUpdate()
    Dim strSQL as String
strSQL = "SELECT Count([LISTA CLIENTI].ID) AS ConteggioDiID, " & _
            "[LISTA CLIENTI].Fascia " & _
            "FROM [LISTA CLIENTI] " & _
            "GROUP BY [LISTA CLIENTI].Fascia " & _
            "HAVING ((([LISTA CLIENTI].Fascia)='"& cmbCerca &"'));"
    Me.RecordSource = strSQL
End Sub
come vedi la query è esattamente la tua, con la diferrenza che la lettera le 
viene passata come parametro e il parametro è relativo alla scelta fatta 
nella casella combinata.
L'istruzione Me.RecordSource cambia al volo l'origine della maschera e la 
'rinfresca' mostrandoti i dati adeguati.
2)----------------
Potresti passare alla maschera tutte le [fasce] e col metodo di prima usi la 
casella combinata per attivare il filtraggio dei records, cioè costruisci la 
casella come descritto sopra.
Vari la tua query in maniera da renderti 'tutte' le fasce:
SELECT Count([LISTA CLIENTI].ID) AS ConteggioDiID, [LISTA
CLIENTI].Fascia
FROM [LISTA CLIENTI]
GROUP BY [LISTA CLIENTI].Fascia;
..e
Sull'evento Dopo Aggiornamento della casella combinata (che chiameremo 
cmbCerca) puoi aggiungere questo codice :
Private Sub cmbCerca_AfterUpdate()
    Dim strSQL as String
    strSQL = "[Fascia] = "& cmbCerca
    Me.Filter = strSQL
    Me.FilterOn = True
End Sub
------------------------
tieni conto che queste sono due soluzioni che sono venute in mente a me, ma 
potrebbero esserci molti modi diversi per tentare di 
risolvere(semplificando) il tuo problema.
IvanDaBologna

 Una maschera ha una origine dati o SourceRow che può essere
diventa
 Una maschera ha una origine dati o RecordSource che può essere

Grazie dell'informazione, ci posso ragionare sopra, ma il problema non
è comunque quello di fare le querry quanto quello di inserire i dati
nella tabella ARCHIVIO DATI.
le querry di aggiornamento non funzionano perchè non possono partire
da querry di ragruppamento, levando il raggruppamento dalle querry di
partenza e raggruppando con dcount o dsum direttamente nelle querry di
aggiornamento , questa (la querry di aggiornamento) tira fuori tante
copie del dato quanti sono i record da contare, ho provato con le
querry di accodamento ma si è impallato il computer nel tentativo di
risolverla.
Non trovo un modo di inserire i dati diverso dal passare attraverso le
maschere ed usare l'impostavalore
anche accettando questo metodo (macro su maschere) non riesco a trovare
una condizione che non faccia eseguire l'aggiornamento se la querry è
nulla.
Spero di non essere stato troppo complicato

 ha scritto nel messaggio 
news:1165512637....@l12g2000cwl.googlegroups.com...





... solo una considerazione:
è vero che non puoi aggiornare con una query di raggruppamento, ma la puoi 
usare come query in ingresso per Aggiornare.
Cioè crei una query di aggiornamento che ha come ingresso la tua qery di 
raggruppamento, questo solo perchè non sono capace di indicarti una strada 
più corta (ma sappi che c'è !!!).
stavolta sono stato + complicato io !!  ;))
IvanDaBologna

 IvanDaBologna
invece è l'incontrario
non posso usare le querry di raggruppamento in ingresso di quelle di
aggiornamento perchè la querry di aggiornamento non aggiorna i campi
calcolati.
invece, in teoria, funziona il ragruppare la querry di aggiornamento
(nel senso che non da errori) ma avvengono risultati strani, mi spiego
meglio:
visto che mi dava errore mettere in ingresso di una querry di
aggiornamento una querry di raggruppamento; seguendo le indicazioni
dell'help, ho trasformato le querry di raggruppamento in querry di
selezione ed ho immesso una funzione dcount nella querry di
aggiornamento.
In questa maniera il numero che trova è quello giusto ma lo inserisce
tante volte quanti sono i record nella querry di selezione iniziale ...
(invece dovrebbe inserire il numero solo nel record che voglio io).
visto che per questa via non riesco ancora a trovare uno sbocco, per
ora sono al punto che ho fatto una maschera basata su ARCHIVIO DATI
dove accanto ad ogni dato ho una sottomaschera che punta al dato giusto
ed inserisco una volta al mese i dati a mano;
come possibile evoluzione ho in mente di mettere un controllo (check)
accanto ad ogni dato dove posso decidere io che dati inserire (ovvero
quelli non nulli) e far eseguire una macro di impostavalore
condizionata da questo check, non è una soluzione elegante ma è il
meglio che riesco a fare per ora.
Grazie Ivan