Newsgroup: it.comp.appl.access
Titolo: Formato Data personalizzato e "dipendente" da altro campo

Saluti e buon anno a tutto il NG.
Come da oggetto, avrei la necessità di creare un formato personalizzato di
data per un campo, dipendente da un'altro.
Mi spiego meglio:
ho un DB di catalogazione fumetti (il mio incubo personale).
In una tabella chiamata TABAlbi Italiani ho un campo numero, nel quale
inserire il numero del fumetto (ad esempio: 12),
un campo doppionumero, dove inserire i nn° con doppia numerazione (perdonate
il bisticcio di parole -ad esempio: 12/13),
un campo data, nel quale inserire la data di uscita di un fumetto.
Bene, vorrei che, se il campo doppionumero non è nullo, il formato del campo
data sia Mese/Mese-Anno (ad esempio: Giugno-Luglio 1999).
Altrimenti, se il campo doppionumero é nullo, il formato del campo data
dovrebbe consentirmi di inserire facoltativamente il giorno e/o il mese, ma
obbligatoriamente almeno l'anno.
Se qualcuno mi potesse dare una mano, avrebbe la mia incondizionata
gratitudine.
Grazie in anticipo.
(¯`·.¸SpiderMax¸.·´¯)

 ma obbligatoriamente almeno l'anno.
[...]
    Considera la possibilita' di aggiungere un campo "Numeri" (o come
preferisci chiamarlo) che abbia valore predefinito 1. Per mezzo di questo
campo indicherai se si tratta di numero singolo (1), doppio (2), triplo (3),
ecc. Di modo che ti sara' sufficiente registrare il numero ed il mese
iniziale nei campi NumeroIniziale (Intero) e DataIniziale (Data/ora). In
questo modo anche la ricerca dovrebbe risultare piu' efficace.
    Per esempio:
        Numeri NumeroIniziale DataIniziale
        1      12             1/1/2000
        2      24             1/1/2000
risulterebbero:
        12, gennaio 2000
        24-25, gennaio-febbraio 2000
applicando una funzione tipo la seguente:
Public Function RicavaNumeroEtData( _
  ByVal Numeri As Integer _
, ByVal NumeroIniziale As Integer _
, ByVal DataIniziale As Date _
) As String
  Dim sNum  As String
  Dim sData As String
  sNum = CStr(NumeroIniziale)
  If (Numeri = 1) Then
    sData = Format$(DataIniziale, "mmmm yyyy")
  Else
    sNum = sNum & "-" & CStr(NumeroIniziale + Numeri - 1)
    sData _
      = Format$(DataIniziale, "mmmm") _
      & "-" _
      & Format$( _
            DateAdd("m", Numeri - 1, DataIniziale) _
          , "mmmm yyyy")
  End If
  RicavaNumeroEtData = sNum & ", " & sData
End Function
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

 ha scritto nel messaggio
news:N40T9.95615$Ou4.3...@twister2.libero.it...

Potrei non aver capito il tuo problema, ma se i due campi li dichiari di
tipo Testo, ci scrivi dentro i valori che ti pare e come ti pare, senza
impazzire a fare elucubrazioni strane sui formati.
O sbaglio?
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:5lcT9.97425$Ou4.3...@twister2.libero.it...

Grazie Roberto, ma il campo con la data (di tipo data) mi servirebbe per
fare ricerche e/o ordinamenti.
Con il campo (se di tipo testo) ho risultati "strani" :-)
Saluti


 ha scritto nel messaggio
news:avjj51$fo9dn$1...@ID-52090.news.dfncis.de...
CUT

Grazie Maurizio.
Anche se, trattandosi di aggiungere un nuovo campo (agli innumerevoli che in
questa tabella già ci sono), non sono entusiasta, provo e faccio sapere.


 provo e faccio sapere.



Me ne sono accorto successivamente, scusa.
 Sarà la mia ignoranza, ma poi la funzione devo richiamarla con un call, e,
se si, su quale evento della maschera?
Stò impazzendo, ma continua a darmi il formato Data.
Grazie comunque.
Saluti.


 Stò impazzendo, ma continua a darmi il formato Data.
    Riguardo questa questione del formato data invece non capisco a cosa ti
riferisci.



Non riesco a fare in modo che un campo contenga SOLO il giorno, o il mese, o
l'anno.
Comunque, rileggendo le righe di codice che mi hai gentilmente postato, mi
sono accorto che non posso servirmene.
Mi servirebbe fare in modo da non dover inserire OBBLIGATORIAMENTE il
giorno, il mese e l'anno, ma solo l'anno (è l'unico certo).
Mi spiego meglio:
Se il numero è doppio, inserisco sia il N°AlboItaliano (ad es: 12), sia il
DoppioN°AlboItaliano (in questo caso il 13), e nel campo DataAlboItaliano,
vorrei poter inserire non il giorno (non serve, se, come in questo esempio,
è un mensile od altro), ma solo i due mesi consecutivi e l'anno.
A volte ci sono volumi che (specie i più antichi) sono usciti non in un
giorno ed un mese precisi, ma SICURAMENTE in un determinato anno. E quello
solo vorrei inserire.
Pensavo di creare quattro campi data (uno per il giorno, uno per il mese,
uno per il doppio mese ed uno per l'anno -se il campo doppion° é null,
nascondere il campo giorno e rendere visibile il campo doppio mese e
viceversa-) ed accorparli in un campo non associato con cui fare ordinamenti
e ricerche, ma non so come poi mettere in pratica tutto ciò.
Sperando Roberto non si arrabbi (visto che mi rimprovera spesso,
giustamente, di non dovermi limitare alle mie idee, "ché se erano
funzionanti e funzionali non avrei chiesto aiuto").
Grazie ancora e scusa le mie divagazioni.
Saluti


 Grazie ancora e scusa le mie divagazioni.
    Ri-figurati. :-)
    Ed ora per favore rileggi quel che ho scritto. ;-)))


     Puo' andare, cosi'?
Dovrei testarlo, con la pratica... ...ma, così a braccio, mi va bene (era
quello che avevo usato prima di incontrare questi nn° doppi che non avevo
calcolato in fase di progettazione e che mi hanno mandato in crisi
(HAAAARGGGG -piccolo sfogo neofitico, scusa-)

Ancora grazie per l'aiuto.
(E la pazienza)



L'ho inserito in un campo Testo6 non associato (ho creato un DB apposito per
fare un pò di prove... ...il nome del campo è di defaut) e tutto funge
perfettamente (a parte il fatto che ho aggiunto un pò di codice per
intercettare l'inserimento di un nuovo record, altrimenti mi dava errori con
i campi null).
Ma, se devo filtrare o ordinare su questo campo devo per forza passare da
query?
Saluti.


 come visualizzare questi prodigi?
    Per mezzo della funzione Format. Ma non sono sicuro di aver capito
esattamente cio' che intendi. Per esempio la data odierna, 13/1/2003,
memorizzata in un campo di tipo data di nome Data di una tabella potra'
essere visualizzata come:
        gennaio 2003: Format(Data;"mmmm aaaa")
    -oppure-
        2003: Format(Data;"aaaa")
ecc. Ma pensavo che questa funzione gia' la conoscessi.
    Considera anche che e' poco rilevante come venga visualizzata nella
tabella stessa, anzi e' preferibile nel caso della tabella vedere un formato
il piu' possibile completo per poter controllare come stanno realmente le
cose. La formattazione interessera' semmai le query e sicuramente le
maschere ed i report.
    Una volta stabilito che l'informazione verra' memorizzata in tre campi:
        Numeri
        Numero
        Data
si tratta di studiare una interfaccia coerente che semplifichi l'immissione.
Per esempio vedrei bene in una maschera dei controlli del genere:
        TipoNum NumInizio DataInizio Decodifica
dove TipoNum potrebbe essere una Casella combinata coi valori:
        Singolo 1
        Doppio  2
        Triplo  3
collegata al campo Numeri, NumInizio una Casella di testo che permetta di
immettere solo numeri interi positivi, collegata al campo Numero, e
DataInizio una Casella di testo non associata che permetta di immettere date
in forma libera intendendo con questo date del tipo:
        1932 (solo anno)
        9/1932 (mese anno)
        15/9/1932 (data completa)
che da codice verranno validate ed integrate della parte mancante in modo da
ottenere le date che effettivamente verranno memorizzate:
        1/1/1932
        1/9/1932
        15/9/1932
    Infine, nella casella di testo non associata "Decodifica", per mezzo
della funzione che ho postato nel mio primo intervento in questo 3d,
leggerai numero e data di pubblicazione nel formato di output che
preferisci.


 ha scritto nel messaggio
news:b03884$knc81$1...@ID-52090.news.dfncis.de...

Grazie, Maurizio, per tutte le dritte che mi stai dando.
Era mia ignoranza, il credere che il tipo di campo data fosse "più
flessibile".
Mi rendo conto che lo può essere solo in una maschera (ergo, posso
modificare la VISUALIZZAZIONE dei dati, ma non inserirne di meno -o di
più-).
Comunque, se ho ben capito, da qualche parte, DEVO inserire la data COMPLETA
di giorno, mese ed anno (cosa che volevo evitare).
Per ora ho dei dubbi (non dipendenti dalle tue spiegazioni, ma da mie
considerazioni) nell'implementare la tabella nel modo da te gentilmente
consigliatomi (anche se questo nulla toglie sia un'ottima soluzione).
PS: se DataInizio è dicembre e TipoNumero <> 1, la funzione dovrebbe
comprenderne due (per esempio 2001/2002), mentre, giustamente mi mostra solo
l'anno inserito nel campo DataInizio. Cerco di studiare come fare.
Ancora grazie


 l'anno inserito nel campo DataInizio.
Non ho più dubbi ed ho seguito il tuo valido suggerimento, implementando la
tabella come mi consigliavi.
Va che è una favola.
PS: ma, come chiedevo, come faccio se il mese inserito nel campo data è
uguale a 12 (dicembre) ad utilizzare un formato tipo: "mmmm aaaa" / "mmmm
aaaa" (ad esempio: dicembre 2000/gennaio 2001)?


 aaaa" (ad esempio: dicembre 2000/gennaio 2001)?
    Di questo se ne dovrebbe occupare la funzione RicavaNumeroEtData che ho
postato all'inizio del nostro discorso. Ovvero tale funzione andrebbe
modificata affinche' restituisca la data di pubblicazione (mesi e anni)
nella forma che vuoi.
    Rivediamola:
' (Non ho testato!...)
'
Public Function RicavaNumeroEtData( _
  ByVal Numeri As Integer _
, ByVal NumeroIniziale As Integer _
, ByVal DataIniziale As Date _
) As String
  Dim sNum  As String
  Dim sData As String
  Dim tData As Date
  sNum = CStr(NumeroIniziale)
  If (Numeri = 1) Then
    sData = Format$(DataIniziale, "mmmm yyyy")
  Else
    sNum = sNum & "-" & CStr(NumeroIniziale + Numeri - 1)
    tData = DateAdd("m", Numeri - 1, DataIniziale)
    If (Year(DataIniziale) <> Year(tData)) Then
      sData = Format$(DataIniziale, "mmmm yyyy")
    Else
      sData = Format$(DataIniziale, "mmmm")
    End If
    sData _
      = sData _
      & "-" _
      & Format$(tData, "mmmm yyyy")
  End If
  RicavaNumeroEtData = sNum & ", " & sData
End Function
    Pero'... Pero' trovo che la forma dicembre-gennaio 2002 sia
sufficientemente chiara per far capire a chi legge che con dicembre si
intende dicembre 2001, no?


 ' (Non ho testato!...)
Ho testato io, con mia VIVA SODDISFAZIONEEEEEEEEEEEE (perdona l'urlo).
Grazie Maurizio.
Ora ho questa maschera che fa quello che voglio io e non quello che dice lei
(son anche riuscito a modificare i campi, rendendoli visibili o meno in base
alle necessità, e le etichette, che rispecchiano i contenuti).
