Acquista i nostri libri consigliati su Amazon.it
Discussione chiusa
Visualizzazione dei risultati da 1 a 2 su 2

[VBA-JET] Tutorial uso campi data

  1. #1
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Ci sarebbe da capire come principio che la data andrebbe manipolata in formato STANDARD ISO 8601… cosa assai antipatica allo standard JET.

    Il problema di base è aver chiara la distinzione di chi manipola il dato e come.
    Ad esempio dire Access o JET sono proprio 2 cose molto diverse... e sostanzialmente il nocciolo della difficoltà è proprio quello.
    Access lavora in un modo(visuale di interpretazione) mentre JET lavora in accezione anglosassone...

    Faccio un'esempio concettuale usando un predicato SQL:
    1° ESEMPIO
    "SELECT * FROM T1 WHERE [Data]=Forms!NomeMaschera!ControlloData"
    
    2° ESEMPIO
    "SELECT * FROM T1 WHERE [Data]=#" & Format$(Forms!NomeForm!ControlloData,"mm/dd/yyyy") & "#"
    
    3° ESEMPIO
    "SELECT * FROM T1 WHERE [Data]=" & Clng(Forms!NomeForm!ControlloData)
    
    4° ESEMPIO
    "SELECT * FROM T1 WHERE [Data]=’" & CDate(Forms!NomeForm!ControlloData) & “’”
    
    Il passo da fare è comprendere cosa distingue queste 4 sintassi che restituiscono lo stesso risultato...
    1°) Questa operazione impone al valutatore di espressioni di JET... ho detto di JET(quello che lavora in accezione anglosassone), di convertire il riferimento implicito [Forms!NomeMaschera!ControlloData]
    JET per rendere esplicito il valore risolve il dato applicando a questo la sintassi richiesta dal DataType... quindi interpreta autonomamente la data imponendo quello che serve per riconoscerla in modo corretto.
    Si faccia attenzione che il riferimento è inserito nella stringa SQL non è esterno.
    Apparentemente questo sembra risolvere tutti i problemi... non ci si deve occupare della formattazione.
    Questo codice non è PORTABILE è riconoscibile solo ed esclusivamente da JET, se io effettuassi il Porting su SQL_SERVER avrei fatto un'errore strutturale tale da vanificare la potenza di un Database Server.
    Perchè questo, perchè non essendo il Server in grado di risolvere il riferimento esclude la condizione WHERE ed invia via rete tutti i dati senza quindi filtrarli(limitarli), lasciando a JET in locale l'onere dell'applicazione della WHERE.
    Cosa che si converrà con me, è decisamente assurda, motivo per il quale è preferibile effettuare una conversione ESPLICITA esterna e dare in pasto a JET il valore premasticato.

    2°) Elaboro esternamente il valore ma mi devo preoccupare di far si che JET lo capisca senza condizionarlo… questo richiede la formattazione in accezione anglosassone e l’apposizione degli #...# anche questo valido solo per JET, struttura tuttavia ottimizzabile anche in caso di Porting.

    3°) Il campo data JET lo salva come Type Double… quindi numerico… solo però che nel caso in cui non siano presenti “hh:mm:ss” il dato è interpretato come Long… quindi per JET lo elaboro esternamente con LONG.
    Se servisse inserire "hh:mm:ss" serve usare la conversione in Double... ma si rischia di avere un conflitto con il separatore decimale, quindi per ovviare al problema si chiede al sistema di interpretare il separatore in base alle impostazioni... come...? Così:
         "SELECT * FROM T1 WHERE [Data]=" & str(cdbl(Me!ControlloData))
    
    Questo a mio avviso è il metodo migliore.

    4°) Il campo data viene convertita con cdate una stringa… poi riapplicati gli apicetti di stringa…
    Questo metodo che sembra furbo… è in realtà poco furbo, in quanto è simile al 1° obbliga JET ad effettuare una conversione del DataType.

    Detto questo...
    Ultima modifica di @Alex; 02-08-2011 19:53 
    ℹ️ Leggi di più su @Alex ...

  2. #2
    AntAje non è in linea Novello
    Grazie Alez questa spiegazione è chiarissima. Mi è servita per risolvere un problema in una query con ricerca nelle date. Saluti

Discussione chiusa

Potrebbero interessarti anche ...

  1. filtro su pui campi data
    Da mxcmas nel forum Microsoft Access
    Risposte: 8
    Ultimo Post: 23-01-2017, 19:01
  2. Estrazione data MAX da più Campi
    Da Bairos nel forum Microsoft Access
    Risposte: 7
    Ultimo Post: 15-05-2014, 18:18
  3. data e ora in campi diversi
    Da the_nutria nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 03-12-2013, 19:56
  4. appello agli esperti : tutorial su data/ora
    Da MaurizioBruni nel forum Microsoft Access
    Risposte: 7
    Ultimo Post: 25-02-2011, 23:37
  5. Operatore Between in campi data
    Da asia nel forum Microsoft Word
    Risposte: 4
    Ultimo Post: 19-04-2005, 12:52