Newsgroup: it.comp.appl.access
Titolo: primi passi: query molto particolare e difficile da realizza

Salve a tutti descrivo questa situazione che per un utente medio e' un po'
incasinata.
Ho un programma in VBA (che non posso controllare) che produce una tabella
access cosi' composta:
id
nominativo dipendente
data_da
data_a
totale ore
centro di costo
codice progetto
La funzione di questa tabella e' sapere su quale progetti lavorano tutti i
dipendenti (circa 300!) settimana per settimana.
Ho una tabella su un altro database per i dipendenti di questo tipo:
id
nominativo dipendenti
sesso
centro di costo
Trimestralmente devo elaborare dei report già informatizzati in excel ma
prima di questo debbo controllare che tutte le settimane da parte di tutti i
dipendenti siano state inserite e fare relativi solleciti...
Per dirvi lo stato delle cose il programma pensato dagli informatici non
elimina neanche i doppi inserimenti ma questo e' facilmente risolvibile.
COSA MI SERVIREBBE E NON RIESCO A FARE
avere una tabella con questi campi
nominativo dipendente
(centro di costo)
settimane del periodo con totale delle ore inserite
in alternativa postebbe bastarmi un elenco con:
nominativo del dipendente
settimane non inserite
ho creato una tabella che contiene tutte le settimane dell'anno ma non
riesco a creare una query forse perche' si entra in ambito SQL e io non lo
mastico
attualemnte settimana per settimana faccio un controllo ma mi servirebbe un
report periodico per velocizzare questa parte
chi mi da due dritte
Grazie
ciosa
--------------------------------
Inviato via 
http://usenet.libero.it

"ciosa" <cio...@TOGLIinwind.it> ha scritto nel messaggio
news:213Z215Z162Z66Y...@usenet.libero.it...

Se la tabella che contiene i dati relativi alle ore lavorate si chiama
Tabella1 ed ha una struttura simile a questa:
ID                  Contatore e chiave primaria
Nominativo    Testo
data_da          Data/ora
ecc. ecc
Se il campo data_da contiene la data del giorno con cui inizia la settimana.
Se un record di Tabella1 può contenere i dati relativi ad una sola
settimana.
Se la tabella che contiene i dati anagrafici dei dipendenti si chiama
Tabella2 ed ha una struttura simile a questa:
ID                Chiave primaria
Nominativo   Testo
ecc. ecc.
Creati una tabella chiamata Settimane che ha un solo campo di Tipo Numerico
chiamato Settimana
Creati una prima query chiamata Query1 che abbia il seguente codice SQL:
SELECT Tabella1.Nominativo, Tabella1.data_da, Val(Format([data_da],
"yyyyww")) AS Settimana
FROM Tabella1;
Creati una seconda query chiamata Query2 che abbia il seguente codice SQL:
SELECT Tabella2.Nominativo, Settimane.Settimana
FROM Tabella2, Settimane
ORDER BY Tabella2.Nominativo, Settimane.Settimana;
Creati una terza query chiamata Query3 che abbia il seguente codice SQL:
SELECT Query2.Nominativo, Query2.Settimana
FROM Query2 LEFT JOIN Query1 ON (Query2.Settimana = Query1.Settimana) AND
(Query2.Nominativo = Query1.Nominativo)
WHERE (((Query1.data_da) Is Null))
ORDER BY Query2.Nominativo, Query2.Settimana;
Creati ora una maschera non associata chiamata Maschera1 che contenga due
caselle di testo non associate chiamate rispettivamente DataInizio e
DataFine.
In Maschera1 inserisci anche un pulsante di comando; a fronte dell'evento
"Su clic" del pulsante di comando genera il seguente codice VBA:
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Settimane;"
DoCmd.SetWarnings True
Dim rst As DAO.Recordset
Dim Pippo As Long
Set rst = CurrentDb().OpenRecordset("Settimane")
For Pippo = Val(Format(Me!DataInizio, "yyyyww")) _
    To Val(Format(Me!DataFine, "yyyyww"))
        rst.AddNew
        rst!Settimana = Pippo
        rst.Update
Next Pippo
Set rst = Nothing
DoCmd.OpenQuery "Query3"
La routine VBA sopra indicata fa riferimanto alla libreria Microsoft DAO,
pertanto, se usi una versione di Access successiva ad Access 97, inserisci
nel tuo database i riferimenti a tale libreria.
A questo punto, apri Maschera1, digita nelle due caselle di testo non
associate rispettivamente la data di inizio e di fine del periodo per il
quale vuoi effettuare il controllo, premi il pulsante di comando: ti verrà
mostrata la lista dei dipendenti per i quali manca uno o più record di
Tabella1; a fianco del nominativo verrà indicato il numero della settimana
mancante nella forma aaaaSS (dove aaaa è l'anno e SS il numero della
settimana nell'ambito dell'anno).
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


Ho adattato il tutto ma nell'eseguire si blocca...
Ho access 97 su win 2000 e non so cosa siano le DAO
Dopo meditazioni si blocca sull'ultima riga di codice DoCmd.OpenQuery
"Query3"
Private Sub Comando4_Click()
e...
End Sub
vanno inserite?
Provando le query separatamente tra la Query 2 e la Query 3 non ci sono
differenze tra i numeri di records
Riposto tutto il codice personalizzato
Tabella1=Attività
Nominativo
Data_da
....
Tabella2
CodiceMaster
Nome
(in realtà e' una query che seleziona i dipendenti di una struttura
dall'insieme di tutti i dipendenti)
Query1
SELECT Attività.Nominativo, Attività.Data_da, Val(Format([Data_da],
"yyyyww")) AS Settimana
FROM Attività;
Query2
SELECT SelezioneDipendenti.Nome, Settimane.Settimana
FROM SelezioneDipendenti, Settimane
ORDER BY SelezioneDipendenti.Nome, Settimane.Settimana;
Query3
SELECT Query2.Nome, Query2.Settimana
FROM Query2 LEFT JOIN Query1 ON (Query2.Nome = Query1.Nominativo) AND
(Query2.Settimana = Query1.Settimana)
WHERE (((Query1.Data_da) Is Null))
ORDER BY Query2.Nome, Query2.Settimana;
I nomi delle caselle non associate le ho definite in Proprietà>Tutte>Nome
Elemento
Il codice intero e' il seguente:
Private Sub Comando4_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Settimane;"
DoCmd.SetWarnings True
Dim rst As DAO.Recordset
Dim Pippo As Long
Set rst = CurrentDb().OpenRecordset("Settimane")
For Pippo = Val(Format(Me!DataInizio, "yyyyww")) _
    To Val(Format(Me!DataFine, "yyyyww"))
        rst.AddNew
        rst!Settimana = Pippo
        rst.Update
Next Pippo
Set rst = Nothing
DoCmd.OpenQuery "Query3"
End Sub
Aiuto! Anche se ho già capito già molto!!


 wrote in message
Lu3D9.3992$2B1.1...@twister2.libero.it...


 Aiuto! Anche se ho già capito già molto!!
Secondo me, devi verificare che le tre query si chiamino effettivamente
Query1, Query2 e Query3.



--------------------------------
Inviato via 
http://usenet.libero.it

 Antonio



[CUT]
Ma nelle due caselle di testo non associate DataInizio e DataFine cosa
digiti?
Se devi controllare tutto il mese di ottobre 2002, dovrai scricere
rispettivamente 01/10/2002 e 31/10/2002.
A come tu fici il programma non esce dal ciclo For ... Next.
--
Roberto


A come tu fici il programma non esce dal ciclo For ... Next.
??? cosa intendi? come mi sono organizzato io il ciclo finisce
invece il tuo ciclo for next sembra andare in tilt
ciao e grazie


 ciao e grazie
Per scrupolo mi sono fatto un database di esempio con la soluzione che ti ho
suggerito e a me funziona tutto; onestamente non riesco ad immaginare cosa
ci sia nel tuo database che lo faccia ciclare all'infinito nella For ...
Next.
L'unica cosa dovrebbe essere i valori contenuti in DataInizio e DataFine, ma
non riesco a ipotizzare come.
Mi dispiace.


troppo scrupolo...
ritentando stamattina...tutto funzionava...forse inserivo date inesistenti
ora ho modificato con la query4 che ti dicevo cosi' mi esce una query con la
data di lunedi' della settimana mancante questo xche' i dipendenti
inseriscono le settimane immettendo la data del lunedi e della domenica
grazie...tante ore mensili di lavoro risparmiate!
ciao
