Newsgroup: it.comp.appl.access
Titolo: roberto da casa o dal portatile .... aiuto

Mi dispiace disturbarti, ma nessuno mi risponde! Ormai sto perdendo le
speranze! Forse tu mi sai dire da che parte sbattere la testa, se è
impossibile o dove andare a cercare un esempio.
Premetto non sono una professoressa, la tabella sotto è una semplificazione
di quella che devo costruire.
devo creare una maschera così:
data       |01/01/01|02/01/01|03/01/01| ... eccetera
---------|----------|-------------------------------------
Nome1   | presente | presente |assente   | ... eccetera
---------|----------|----------------------------------------
Nome2   | presente | presente |assente   | ...ecc.
---------|----------|--------------------------------------
Nome3   | presente | presente |presente | ...ecc
---------|----------|--------------------------------------
Nome4   | presente | presente |assente   | ...ecc
era un foglio excel. Per ogni giorno dell'anno devo vedere se NomeX è
presente o assente.
Da notare che presente o assente (e altri valori che non sto a elencare ora)
vengono inseriti automaticamente da un'altra maschera (registro, che non ho
ancora pensato) e devo poterli modificare manualmente da qui.  Non so da che
parte cominciare! Non so né se sia possibile né eventualmente cosa cercare
(esempi su sitocomune o help) per capire come procedere.
Non so nemmeno come costruire le tabelle : non dovrò mica costruire una
tabella con 365 campi per ogni giorno dell'anno vero? O SI?
O una tabella col campo Data che contenga 365 record. uno per ogni giorno
dell'anno (e l'anno prossimo? e l'anno bisestile?) e come poterla collegare
alla tabella nomi per avere come risultato la tabella sopra?
Dimmi almeno che non si può o che non  lo sai neanche tu che almeno mi metto
il cuore in pace!
Ieri ho provato a vedere il sitocomune ma mi si bloccava Explorer ogni volta
che cliccavo un link!
grazie
smak
Mia

 impossibile o dove andare a cercare un esempio.
[CUT]
Innanzitutto ti ringrazio per la fiducia che mi accordi; è da quando che hai
postato la prima volta il tuo quesito che ci rimugino, ma mi vengono in
mente sempre soluzioni contorte.
Fammi rimuginare ancora un po'; appena avrò una soluzione decente ti
prometto che mi farò vivo.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:DRKq7.15431$Lp6.5...@news.infostrada.it...
Il vero problema, secondo me, è che non è facile simulare un foglio
elettronico con una maschera di un database relazionale; naturalmente non è
impossibile, ma mancando strumenti standard adatti all'uopo, c'è Da
smacchinare molto con query e codice VBA.
Cominciamo comunque a mettere dei punti fermi circa la struttura delle
tabelle.
A mio avviso devi avere una tabella chiamata tblAnagrafe che contiene
contiene i dati anagrafici dei tuoi nominativi; ipotizziamo che tblAnagrafe
ha come chiave primaria un campo di tipo contatore che si chiama
IDNominativo ed inoltre contiene tra l'altro un campo di tipo testo chiamato
CognomeNome.
Inoltre penso che dovrai crearti una tabella tblPresenze che potrebbe avere
questa struttura:
IDPresenza            Contatore e chiave primaria
IDNominativo        Numerico
DataPresenza         Data/ora
Presenza                Testo
Ipotizziamo anche che le due tabelle siano in relazione uno-a-molti in base
ai campi IDNominativo e che a detta relazione è stato aggiunta l'integrità
referenziale con l'opzioe Elimina record correlati a catena.
Ti propongo di arrivare per gradi alla soluzione finale, cominciando ad
esaminare una soluzione più consona ad un database relazionale.
Crea una query di selezione che chiamerai Query1 basata su tblPresenze e che
abbia il seguente codice SQL:
SELECT tblPresenze.IDPresenza, tblPresenze.IDNominativo,
tblPresenze.DataPresenza, tblPresenze.Presenza
FROM tblPresenze
WHERE (((Year([DataPresenza]))=[Forms]![frmAnagrafe]![CercaAnno]) AND
((Month([DataPresenza]))=[Forms]![frmAnagrafe]![CercaMese]));
Ora creiamo una maschera con visualizzazione a Maschera singola chiamata
frmAnagrafe; tale maschera deve avere come origine record la tabella
tblAnagrafe; fai in maniera che i controlli della maschera abbiano lo stesso
nome dei campi di tblAnagrafe cui sono associati.
Nell'intestazione  di frmAnagrafe (bada bene nell'intestazione e non nel
corpo) inserisci tre caselle combinate chiamate rispettivamente CercaNome,
CercaAnno e CercaMese.
La combo CercaNome deve avere due colonne di cui visibile solo la seconda,
la proprietà Tipo origine riga impostata a Tabella/query e come origine riga
deve avere il seguente codice SQL:
SELECT DISTINCTROW tblAnagrafe.IDNominativo, tblAnagrafe.CognomeNome FROM
tblAnagrafe ORDER BY tblAnagrafe.CognomeNome;
La combo CercaAnno deve avere una sola colonna, la proprietà Tipo origine
riga impostata a Elenco valori e come origine riga deve avere il seguente
elenco di valori:
1999;2000;2001
e come valore predefinito:
Year(Date())
La combo CercaAnno deve avere una sola colonna, la proprietà Tipo origine
riga impostata a Elenco valori e come origine riga deve avere il seguente
elenco di valori:
1999;2000;2001
e come valore predefinito:
Year(Date())
La combo CercaMese deve avere due colonne di cui visibile solo la seconda,
la proprietà Tipo origine riga impostata a Elenco valori e come origine riga
deve avere il seguente elenco di valori:
1;"Gennaio";2;"Febbraio";3;"Marzo";4;"Aprile";5;"Maggio";6;"Giugno";7;"Lugli
o";8;"Agosto";9;"Settembre";10;"Ottobre";11;"Novembre";12;"Dicembre"
e come valore predefinito:
Month(Date())
A fronte dell'evento "Dopo aggiornamento" della combo CercaNome genera il
seguente codice VBA:
Dim Criteri As String
Criteri = "IDNominativo=" & Me!CercaNome
Me.Filter = Criteri
Me.FilterOn = True
Ora crea una maschera con visualizzazione a Maschere continue e chiamala
Presenze; tale maschera dovrà avere come origine record Query1; i controlli
di questa maschera debbono avere gli stessi nomi dei campi di Query1 cui
sono associati.
In frmAnagrafe inserisci con l'autocomposizione un controllo sottomaschera
chiamato Presenze e di al wizard di autocomposizione che deve contenera la
maschera Presenze di cui il capoverso precedente.
A fronte di entrambi gli eventi "Dopo aggiornamento" delle due combo
CercaAnno e CercaMese genera la seguente riga di codice VBA:
Me!Presenze.Requery
Arrivata a questo punto, se apri la maschera frmAnagrafe e selezioni un
nominativo dalla combo CercaNome, un anno dalla combo CercaAnno e un mese
dalla combo CercaMese, nel corpo della maschera principale vedrai i dati
anagrafici del nominativo selezionato e nella sottomaschera vedrai le
presenze di quel nominativo relative all'anno ed al mese selezionati.
Tutti i controlli sono aggiornabili, quindi con questa
maschera/sottomaschera, oltre a visualizzare i dati, potrai inserire,
modificare e cancellare i record delle tue due tabelle.
Siamo lontani dal "tabellone" che volevi, ma penso che siamo approdati
comunque una soluzione funzionante (e spero per te funzionale) e propria di
un database relazionale.
Valutala e dimmi cosa ne pensi: intanto continuo a rimuginare per una
visualizzazione a "tabellone"; male che va quello che abbiamo già fatto lo
userai per aggiornare le due tabelle.
****** FINE DELLA PRIMA PUNTATA ******


[CUT]
sei un grande!!!


: )
e adesso all'opera! aspettami è, che per la prossima puntata ci tengo ad
esserci! fammi studiare bene quello che mi hai scritto (non l'ho ancora
guardato, sono troppo felice che tu mi abbia risposto!)
SMAK
Mia
grazie!

impossibile o dove andare a cercare un esempio.
Roberto non solo č bravissimo, ma anche molto, molto disponibile.
Non č corretto approfittarsene perň...
Ciao, warp

 Roberto
Carissimo Roberto,
sono orgogliosa di me perchè la base che ho costruito è proprio simile a
quella hai pensato tu!
OK ... fammi spiegare meglio ...
Degli amici mi avevano chiesto se ero capace di costruire un database per
una serie di dati che gestivano con vari fogli excel (mi pagherebbero). Io
ho detto di si, ma ora ... non so se ce la farò! Uno di questi fogli di
calcolo (che mi sta facendo impazzire) gestiva la disponibilità delle auto
della loro ditta: la benedetta tabella che ben conosci:
la faccio meglio:
 data       |01/01/01|02/01/01|03/01/01|04/01/01 ... eccetera
 ---------|----------|----------|---------|-------------------
 auto1     | libera      | libera      | libera    | ... eccetera
 ---------|----------|----------|---------|---------------------
 auto2     | occupata| occupata| occupata| ...ecc.
 ---------|----------|----------|---------|------------------
 auto3     | libera      | occupata|occupata| ...ecc
 ---------|----------|----------|----------|------------------
 auto4     | libera      | occupata|occupata| ...ecc
...           |     ...        |  ...         |     ...      | ...
autoN     | libera      | occupata|presente | ...ecc
Per ogni giorno dell'anno devono vedere se la tal auto è libera o occupata.
Col database loro vogliono: inserire quando e per quanti giorni qualcuno
prende la macchina, poter aumentare o diminuire il numero di giorni (se la
riporta prima o dopo), vedere sto benedetto foglio (per avere una visione
generale delle auto in uso o no) poterlo modificare e collegarlo ad una
maschera che dia una "anagrafica macchine", aggiungere nuove auto,
eliminare le vendute ... e fare il caffè appena una bella ragazza entra in
ufficio!
Ho costruito:
una tabella CARPLAN con un campo IDauto(contatore,chiaveprimaria), Targa,
Modello ecc
una tabella CALENDARIO con IDauto(numerico), Data e Stato(ovvero
libera/occupata)
Le due tabelle sono collegate con una relazione a integrità referenziale in
relazione uno-a-molti in base ai campi IDauto.
Poi:
Ho creato una query a campi incrociati basata su CALENDARIO che ha come
intestazione di riga IDauto, come intestazione colonne Data (intervallo
data) e Stato come valore delle intersezioni (tipo funzione: Primo).
Questa query andrebbe benissimo ma non posso modificarla nè usarla per
collegarmento a una eventuale maschera con un bottone nè un menù scelta
rapida nè per inserirla in una maschera (ci ho provato, io non ci riesco)
... ti scrivo anche l'SQL qui sotto:
TRANSFORM First(CALENDARIO.Stato) AS PrimoDistato
SELECT CALENDARIO.IDauto
FROM carplan INNER JOIN CALENDARIO ON carplan.IDauto = CALENDARIO.IDauto
GROUP BY CALENDARIO.IDauto
PIVOT Format([data],"Short Date");
ecco, sono ferma qui. Non so come procedere!
Il pezzo che hai fatto tu potrebbe andare bene ... WAW ma certo! se
affiancassi (graficamente: una sull'altra) la maschera che mi hai fatto tu
alla mia query loro potrebbero vedere la mia query e scegliere attraverso la
tua maschera i dati da modificare ... cosa ne dici? Se non c'è altro modo di
sfruttare la mia query ... Ma possibile che non riesca ad incastrare la mia
query in una maschera?
E ... un'altra domandina ... ;)  come faccio a far sì che quando gli dico:
"dal giorno 01/01/01 al giorno 10/01/01 la macchina XY è libera"
lui mi vada ad inserire (o modificare nel caso ci fossero già) nella tabella
CALENDARIO gli 11 record (Recor1: IDauto: XY, Data: 01/01/01, Stato:libera -
Record2: IDauto: XY, Data: 02/01/01, Stato:libera - ... - record11: IDauto:
XY, Data: 10/01/01, Stato:libera)?
...non mi mollare ancora ... (credimi, se lo facessi ti capirei)
grazie per avermi scritto
ah! un'altra cosa che mi sta facendo impazzire: non riesco a vedere il
sitocomune! ci stanno lavorando? Riesco ad aprire la hompage ma se clicco su
un qualsiasi link (query, maschere ecc..) mi si blocca il browser (con altri
siti va tutto bene). Sono io o è il sito?
ciao
SMAK
Mia


Ma dai Warp, ero disperata, non ne uscivo fuori (e non ne sono ancora fuori)
...
non lo farň piů ok?
(no, no, forse lo farň ancora ...  ma il caso č disperato!
smak
Mia
... e il sitocomune non funziona!

 ha scritto nel messaggio
news:9ogb2r$m0$1...@fe1.cs.interbusiness.it...

secondo me non se n'č approfittata, io ho fatto fatica solo a leggerlo il
suo problema, figuriamoci a risolverlo, e poi devo dire che anche io ho
rotto le scatole diverse volte a roberto, una volta mi ha addirittura
inviato un file perchč io cretino, non capivo.
Non ho mai visto nessuno cosě disponibile e in gamba, un grande
complimenti Roberto
mi starň innamorando di te????? ;-))))
by
stwe


ei, sei nottambulo anche tu eh?
Mia

(no, no, forse lo farň ancora ...  ma il caso č disperato!
Ok, ma mettiti al posto suo: non pensi sia un "ricatto" psicologico?
Ciao, warp


No, penso sia una esplicita richiesta di aiuto (che per altro si puň negare
... magari con un "mi spiace non posso" ... forse lui půň piů di noi, per
bravura o tempo)
ciao smak mia

 XY, Data: 10/01/01, Stato:libera)?
Fermo fermo! Ho trovato una procedura che fa al caso mio. Finalmente sono
riuscita a mettere apposto il mio browser e dal sito comune ho trovato un
post che descrive come creare un calendario. Aveva degli errori, li ho
corretti, la metto qui se a qualcuno servisse ancora:
Oggetto: per P.Bianchi (calendario) di :mercoledì 13 giugno 2001 19.41
Il DB ha una tabella "TBL calendario" (campi: giorno, DOW, note)
La maschera "MSK calendario" (non associata) ha due controlli caselle testo
non associati:
"dadata" e "adata"
entrambe con formato "data in cifre".
poi ha un bottone "GeneraCalendario", col seg. codice associato
all'evento click:
---------------------------------------------------------
Private Sub GeneraCalendario_Click()
DoCmd.Hourglass True 'attiva la clessidra
Dim mydb As Object
Dim RScalend, RSfest As Recordset
Dim first, last, data_iesima As Date
Dim i, n As Integer
Dim ID As String
Set mydb = CurrentDb
Set RScalend = mydb.OpenRecordset("select * from [TBL calendario]")
'cancella il calendario precedente
Let n = RScalend.RecordCount
If n > 0 Then
   RScalend.MoveLast
   Let n = RScalend.RecordCount
   RScalend.MoveFirst
   For i = 1 To n
    RScalend.Delete
    RScalend.MoveNext
   Next i
End If
'carica le date inizio fine e iesima
Let first = Me.dadata
Let last = Me.adata
' Genera il nuovo calendario
If first <= last Then
   ' loopa attraverso le date
   Let data_iesima = first
   Do While data_iesima <= last
        ' per ogni giorno e per ogni dipendente aggiunge una riga
        RScalend.AddNew
        ' immette di dati
        Let RScalend!giorno = data_iesima
        Let RScalend!DOW = Weekday(data_iesima, 2)
        If RScalend!DOW = 7 Then
           Let RScalend!note = "domenica"
        ElseIf RScalend!DOW = 6 Then
           Let RScalend!note = "sabato"
        Else
          Let RScalend!note = " "
        End If
        ' li scrive in tabella
        RScalend.Update
      Let data_iesima = data_iesima + 1
   Loop
Else
   MsgBox "data fine inferiore a data inizio"
End If
Set mydb = Nothing
Set RScalend = Nothing
DoCmd.Hourglass False
End Sub

 fagli sapere almeno se sei maschio o femmina!
per regolarsi!  :-))
P.s. Teniamocelo buono a Roberto !!  č un atollo di salvataggio per tutti!
saluti

 ha scritto nel messaggio
news:9og8r0$q2$1...@nreada.inwind.it...
[CUT]
********* SECONDA PUNTATA ********
Le tabelle avranno la struttura stabilita nella PRIMA PUNTATA.
Tenuto conto del limite di Access che, almeno per A97, prevede che la
larghezza di una maschera non possa superare i 55 cm (circa), credo che non
sia logico immaginare una maschera che contenga un numero indefinito di
colonne; pertanto ho ipotizzato che vengano visualizzati,
contemporaneamente, i dati relativi ad un mese.
La mia ipotesi è così articolata.
1) Creare una query a campi incrociati con i dati di tblPresenze relativi ad
un determinato mese/anno.
2) Memorizzare i risultati restituiti dalla query di cui al punto 1) in una
tabella di appoggio, ovvero in un recordset aggiornabile.
3) Creare una maschera con visualizzazione Foglio dati che abbia come
origine record la tabella di appoggio. Usando tale maschera, l'utente avrà
un'operativita simile a quella che ha con un foglio di calcolo Excel, e
potrà aggiornare a suo piacimento i dati contenuti nella tabella di
appoggio.
4) Alla chiusura della maschera di cui al punto 3), aggiornare i dati della
tabella tblPresenze in base ai dati contenuti nella tabella di appoggio
(debitamente modificata dagli interventi effettuati con la maschera di cui
sopra); è previsto di aggiornare i dati di record esistenti oppure, se
necessario, inserire nuovi record.
Quindi creare una tabella chiamata Tabellone che abbia la seguente
struttura:
Anno            Numerico
Mese            Numerico
Nominativo   Testo
Giorno1        Testo
Giorno2        Testo
......
......
Giorno31       Testo
Creare una maschera con visualizzazione a Foglio dati chiamata frmTabellone
e che abbia come origine record la tabella Tabellone.
Creare una query a campi incrociati chiamata tblPresenze_CampiIncrociati che
abbia il seguente codice SQL:
PARAMETERS Forms!frmChiamante!CercaAnno Long, Forms!frmChiamante!CercaMese
Long;
TRANSFORM First(tblPresenze.Presenza) AS [Il valore]
SELECT Format([DataPresenza],"yyyy") AS Anno, Format([DataPresenza],"mm") AS
Mese, DLookUp("CognomeNome","tblAnagrafe","IDNominativo=" & [IDNominativo])
AS Nominativo
FROM tblPresenze
WHERE (((Format([DataPresenza],"yyyy"))=[Forms]![frmChiamante]![CercaAnno])
AND ((Format([DataPresenza],"mm"))=[Forms]![frmChiamante]![CercaMese]))
GROUP BY Format([DataPresenza],"yyyy"), Format([DataPresenza],"mm"),
DLookUp("CognomeNome","tblAnagrafe","IDNominativo=" & [IDNominativo])
PIVOT "Giorno" & Format([DataPresenza],"d") In
("Giorno1","Giorno2","Giorno3","Giorno4","Giorno5","Giorno6","Giorno7","Gior
no8","Giorno9","Giorno10","Giorno11","Giorno12","Giorno13","Giorno14","Giorn
o15","Giorno16","Giorno17","Giorno18","Giorno19","Giorno20","Giorno21","Gior
no22","Giorno23","Giorno24","Giorno25","Giorno26","Giorno27","Giorno28","Gio
rno29","Giorno30","Giorno31");
Creare una maschera a visualizzazione a Maschera singola che si chiami
frmChiamante e che non abbia origine record.
Inserire in frmChiamante due caselle combinate non associate chiamate
CercaAnno e CercaMese e che abbiano le stesse proprietà di quelle usate
nella PRIMA PUNTATA.
Inserire in frmChiamante anche un pulsante di comando ed a fronte
dell'evento "Su clic" di tale pulsante generare il seguente codice VBA:
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Tabellone;"
DoCmd.RunSQL "INSERT INTO Tabellone SELECT " & _
"tblPresenze_CampiIncrociati.* " & _
"FROM tblPresenze_CampiIncrociati;"
DoCmd.SetWarnings True
DoCmd.OpenForm "frmTabellone", acFormDS
A fronte dell'evento "Su chiusura" della maschera frmTabellone generare il
seguente codice VBA:
Dim rstTab As Recordset
Dim rstPippo As Recordset
Dim Conta As Long
Dim DepID As Long
Dim DepData As Date
Dim Criteri As String
Set rstTab = CurrentDb.OpenRecordset("Tabellone")
Set rstPippo = CurrentDb.OpenRecordset("tblPresenze", dbOpenDynaset)
rstTab.MoveFirst
Do Until rstTab.EOF
    DepID = DLookup("IDNominativo", _
    "tblAnagrafe", "CognomeNome=" & Chr$(34) & _
    rstTab!Nominativo & Chr$(34))
    For Conta = 1 To 31
    If Not IsNull(rstTab("Giorno" & Trim$(Conta))) Then
        DepData = DateSerial(rstTab!Anno, _
        rstTab!Mese, Conta)
        Criteri = "IDNominativo=" & DepID & _
        " And DataPresenza=#" & _
        Format$(DepData, "mm/dd/yyyy") & "#"
        rstPippo.FindFirst Criteri
        If rstPippo.NoMatch Then
            rstPippo.AddNew
            rstPippo!IDNominativo = DepID
            rstPippo!DataPresenza = DepData
            rstPippo!Presenza = rstTab("Giorno" & Trim$(Conta))
            rstPippo.Update
        Else
            rstPippo.Edit
            rstPippo!Presenza = rstTab("Giorno" & Trim$(Conta))
            rstPippo.Update
        End If
    End If
    Next Conta
    rstTab.MoveNext
Loop
Set rstTab = Nothing
Set rstPippo = Nothing
A questo punto aprire la maschera frmChiamante, selezionare con le caselle
combinate l'anno ed il mese desiderati, pigiare il pulsante di comando;
modificare i dati visualizzati nella tabella che si aprirà; concluse le
modifiche, chiudere la maschera.
Spero che ciò risolva il tuo problema.


 Mia


 saluti
sono F ... e adesso come vi regolate? ;)
ciao
smak
Mia

 Roberto!! complimenti!! hai fatto strage di cuori!!
approfittane!!
beato te! :-))
ehi! Mia!, ma almeno sei carina?
AUGURI !   :-))))))))))))))

 AUGURI !   :-))))))))))))))
carina ... direi di sě  :-))))))))))))))


Grazie Roberto
ci sto lavorando
purtroppo la maschera deve contenere almeno sei mesi e non uno
Ieri sono stata male e solo oggi l'ho ripreso in mano. Il tuo lavoro mi sta
aiutando moltissimo magari modificandolo per come serve a me. Forse mi hai
fatto capire come usare la mia query a campi incrociati (ma forse! ... te
l'ho detto, sono riuscita a dargli un'occhiata solo adesso).
a presto
SMAK
Mia


Mi ricordi quando Antonio Biso, in un'occasione simile a questa, mi chiese
scherzosamente:
"A Robè, ma che glie fai tu alle donne???"
E con tutta sincerità gli risposi:
"Glie faccio la spesa!!!"
:-))))


 ha ha!!!  bella battuta! e che in fondo nasconde un velo di verità!
come diceva .....Totò?.   le donne! gioie e dolori
mah!
saluti
luigi

carina ... direi di sě  :-))))))))))))))
A questo punto perň vogliamo le prove  ;-)
Ciao, warp

 luigi
si, si, scherzate scherzate, intanto io mi sto perdendo nei meandri bui e
contorti di questo access! Una povera creatura ci si può affogare dentro e
nessuno ..snif se ne accorge ..snif! :-
Mia
P.S.  ... ; ))  mi piace essere F!



Cara Mia, Confidenza per confidenza
se a te piace essere Femmina, a me piacciono le femmine, ancorpiů se sono
carine e si interessano ad Access :-))
regolati!
luigi