Newsgroup: it.comp.appl.access
Titolo: ancora Fabio

Vi spiego meglio il mio ennesimo problema : ho un' intervallo di celle excel
che collego ad un DB in Access.
I dati che fanno parte dell'intervallo rappresentano una serie di importi
per date progressive ....esempio:
DATA    IMPORTI
08/05/02  +100000
09/05/02  +12000
10/05/02  +150000
11/05/02 SABATO
12/05/02 DOMENICA
13/05/02   -125000
14/05/02   -280000
15/05/02  +152000
......
......
Ora ecco il mio problema: vorrei creare una query (forse è una query a campi
incrociati...anche se ho provato a crearla ma senza buoni risultati) dove
nelle righe appaiano gli importi e nelle colonne  le date.
Ho parlato di date (e non una sola quindi ) perché con questa query vorrei
creare delle date incrementate di giorni non festivi....a partire da una
data che l'utente immette in fase di lancio della query.mi spiego meglio
ritornando al mio esempio:
vorrei ottenere questa visualizzazione:
x una data immessa dall'utente pari a 08/05/02
  DATA  OVERNIGHT(=DATA) SPOT (DATA+2GG NON FESTIVI)    TERM (SPOT+1 GG NN
FESTIVO)
08/05/02 08/05/02   10/05/02   13/05/02
IMPORTI +100000 +100000   150000    -125000
Ecco cosa dovrebbe accadere x una data pari a 09/05/02
  DATA  OVERNIGHT(=DATA) SPOT (DATA+2GG NON FESTIVI)    TERM (SPOT+1 GG NN
FESTIVO)
09/05/02 09/05/02   13/05/02   14/05/02
IMPORTI +12000  +12000   -125000     -280000
Ecco il mio problema...credo si possa realizzare dato che  ho visto fare in
Access cose ben superiori ma per ora non ci sto' riuscendo
Grazie a chi volesse e/o provasse ad aiutarmi.ciao a tutti!!!

 ha scritto nel messaggio
news:jbAC8.35117$5k4.7...@twister2.libero.it...

Ciao
Innanzitutto due osservazioni:
- Non è corretto riproporre a distanza di poche ore lo stesso problema
- Come ti ha già fatto notare Antonio, nell'oggetto si deve spiegare
succintamente l'argomento ('a sunto' lo chiamano gli spagnoli).
A prima vista il tuo problema non sembra eccessivamente complicato (se ho
capito bene):
1) individuo tre date (quella immessa dall'operatore, quella che viene due
giorni lavorativi dopo, quella che viene tre giorni lavorativi dopo)
2) individuo i tre importi che, nel foglio Excel collegato, corrispondono
alle tre date di cui sopra
3) mostro le tre date e i tre importi in una maschera
Mi sfugge qualcosa?
Vai su 
www.sitocomune.com
, sezione General e vedi la Faq 'Conteggio dei
giorni lavorativi tra due date'. Tu dovrai utilizzare la funzione 'Festivo'
(ti servirà anche la funzione 'Pasqua', che verrà però richiamata
direttamente dalla funzione 'Festivo').
Partendo dalla data immessa dall'operatore, con la funzione DateAdd aggiungi
un giorno, con la funzione Festivo accertati che il giorno così ottenuto sia
lavorativo, altrimenti aggiungi un altro giorno e così via. In questo modo
puoi ottenere le altre due date che ti servono.
Con la funzione DLookUp trovi nel foglio collegato i tre corrispondenti
valori.
Prova un poco e, se hai qualche difficoltà in qualche punto, fatti sentire.
Ciao
--
Alberto

Prendo atto dei vostri appunti ragazzi e vi ringrazio dato che mi aiutano ad
imparare come funzionano alcune cose e mi scuso x eventuali mie
manchevolezze.
Premesso ciò e rtornando all'argomento che ho introdotto precedentemente
devo dire ad Alberto che le cose stanno a grandi linee
cosi'..............anche se cio' che mi servirebbe vorrei ottenerlo
impostando dei semplici criteri in QBE piuttosto che creare un piccolo
programmino in VBA con un blocco monolitico a quanto ho visto di codice.
Ricapitolando la situazione anche per chiunque altro voglia aiutarmi eccola
sintetizzata:
Io ho una tabella in Access che e' fomata dalle date di un calendario e x
ogni data esiste un record che visualizza gli importi. Questa tabella trae i
suoi dati da una tabella collegata in Excel (ma questo credo poco importi ai
fini della questione che a me interessa)
Ora eccovi il mio problema: devo ottenere una query impostando dei criteri
però abbastanza complessi sul campo data.
Io voglio visualizzare tutti i dati relativi agli importi x quella data
introdotta in input box dall'utente........inoltre voglio visualizzare
l'importo della data + 2 gg  lavorativi (non festivi) e gli importi delle
date successive di giorni  lavorativi (non festivi) fino ad un massimo di 30
giorni.
Ringrazio Alberto x l'aiuto anche perche' e' sempre disponiobile all'ascolto
ma vorrei sapere se esiste la possibilità di creare quanto ho chiesto
tramite criteri in QBE e se si come.(io ho provato ma solo tanti errori)
Se tale possibilità non esiste non mi rimane che impostare delle ruotine in
VBA ma essendo io completamente a digiuno o quasi di questo linguaggio
vorrei avere delle dritte su come impostarle e cosa metterci in
dettaglio........forse pretendo troppo ed in questo caso scusatemi!
Grazie a tutti e scusate x eventuali scocciature.........ciao e buona
domenica!!!!!!


No problem ... ci mancherebbe!
Io penso che la soluzione tramite query - ammesso che sia possibile, ma
penso di sì - sarebbe estremamente più complessa e non potrebbe prescindere
dal richiamare delle funzioni in VBA ... ma non è che sono un grande esperto
in SQL e poi sono istintivamente portato a lavorare in basic. (magari salta
fuori qualcuno con una soluzione più pratica, così imparo qualcosa
anch'io...)
Può esistere - tra SQL e VBA - un limbo di soluzioni un po' contorte e
ibride che io non prenderei neanche in considerazione (specie se servono
solo ad evitare di approfondire un poco - ma dico solo un poco - la materia
:)).
Beh, insomma... se pensi di prendere il codice per le corna fatti vivo.
Ciao
--
Alberto

Ok .....prendiamo il toro x le corna!!! anche perchè ne ho bisogno!!!


Incoraggiante...  va be...
Ho appena fatto questa prova: Ho un database con
- una cartella excel collegata(la cartella si chiama 'tblExcel', il campo
con la data si chiama 'dtmData', il campo con l'importo si chiama
'curImporto')
- una maschera che non è collegata a nessuna tabella, con quattro caselle di
testo con formato data (txtDataIni, txtDataOvernight, txtDataSpot,
txtDataTerm) e tre caselle di testo con formato standard
(txtImportoOvernight, txtImportoSpot, txtImportoTerm) - l'unica casella
abilitata è txtDataIni
A fronte dell'evento 'dopo aggiornamento' della txtDataIni ho inserito il
seguente codice:
Private Sub txtDataIni_AfterUpdate()
    Me.txtDataOvernight = Me.txtDataIni
    Me.txtImportoOvernight = Nz(DLookup("curImporto", _
        "tblExcel", "dtmData = #" & _
        Format$(Me.txtDataOvernight, _
        "m-d-yy") & "#"), 0)
    Me.txtDataSpot = FerialeSuccessivo(Me.txtDataIni, 2)
    Me.txtImportoSpot = Nz(DLookup("curImporto", _
        "tblExcel", "dtmData = #" & _
        Format$(Me.txtDataSpot, _
        "m-d-yy") & "#"), 0)
    Me.txtDataTerm = FerialeSuccessivo(Me.txtDataIni, 4)
    Me.txtImportoTerm = Nz(DLookup("curImporto", _
        "tblExcel", "dtmData = #" & _
        Format$(Me.txtDataTerm, _
        "m-d-yy") & "#"), 0)
End Sub
'Questo codice - con la funzione 'FerialeSuccessivo'
'individua il giorno che segue di due o quattro giorni
' la data iniziale immessa - con la funzione DLookUp
' trova il corrispondente importo'
'Nello stesso modulo di codice inserisco anche queste altre tre funzioni:
Private Function FerialeSuccessivo(dtmData As Date, _
    intGiorni As Integer) As Date
Dim intConta As Long
    intConta = 0
    Do
        dtmData = dtmData + 1
            If Not (Festivo(dtmData)) Then
                intConta = intConta + 1
            End If
    Loop Until intConta = intGiorni
    FerialeSuccessivo = dtmData
End Function
'Questa funzione incrementa di un giorno per
'volta la data iniziale, fino ad aver aggiunto il
'numero voluto di giorni feriali e passa il risultato
'alla funzione precedente
Private Function Festivo(D As Date) As Boolean
   'Autore: Silvio Mazzetto
   'Accetta: una data
   'Restituisce: True se è un giorno festivo
   'Eventualmente inserire anche il Santo Patrono della città
   Dim Anno As Integer, DayMax As Date, DayMin As Date
   Anno = Year(D)
   If Weekday(D) = 1 Or Weekday(D) = 7 Then
      Festivo = True
      Exit Function
   End If
   If Day(D) = 1 And (Month(D) = 1 Or Month(D) = 5 Or Month(D) = 11) Or _
         Day(D) = 6 And Month(D) = 1 Or Day(D) = 25 And (Month(D) = 4 Or _
         Month(D) = 12) Or Day(D) = 15 And Month(D) = 8 Or (Day(D) = 8 Or _
         Day(D) = 26) And Month(D) = 12 Then
      Festivo = True
      Exit Function
   End If
   'intervallo in cui può cadere il Lunedì di Pasqua
   DayMax = DateValue("20/4/" & Anno)
   DayMin = DateValue("20/3/" & Anno)
   If Weekday(D) = 2 And D <= DayMax And D >= DayMin Then
      If D = (Pasqua(Anno) + 1) Then
         Festivo = True
         Exit Function
      End If
   End If
   Festivo = False
End Function
'Questa funzione (richiamata dalla riga
'If Not (Festivo(dtmData)) Then della funzione
'precedente, determina se la data è o meno
'festiva
Private Function Pasqua(Anno As Integer) As Date
   'Autore: G.Paolo Bizzaro
   'Accetta: anno (4 cifre)
   'Restituisce: giorno di Pasqua dell'anno scelto
   'Il metodo è valido per tutti gli anni nel Calendario Gregoriano,
   'ossia dal 1583 in poi
   Dim a%, b%, c%, p%, q%, r%
   a = Anno% Mod 19: b = Anno% \ 100: c = Anno% Mod 100
   p = (19 * a + b - (b \ 4) - ((b - ((b + 8) \ 25) + 1) \ 3) + 15) Mod 30
   q = (32 + 2 * ((b Mod 4) + (c \ 4)) - p - (c Mod 4)) Mod 7
   r = (p + q - 7 * ((a + 11 * p + 22 * q) \ 451) + 114)
   Pasqua = DateSerial(Anno%, r \ 31, (r Mod 31) + 1)
End Function
'Quest'ultima funzione, richiamata dalla riga
'If D = (Pasqua(Anno) + 1) Then
'permette di controllare se il giorno in questione
'coincide con il lunedì di Pasqua
Le ultime due funzioni le ho prese praticamente tali e quali dal sito
comune...
Che altro ti posso dire... prova se ti funzionano e poi magari prova anche a
capire come funzionano (hai sempre a disposizione la guida in linea e
l'aiuto del NG)
Ciao
--
Alberto