Ingannare access bypassando formato data americano

di il
31 risposte

Ingannare access bypassando formato data americano

Buon giorno, espongo subito il mio quesito. Utilizzo un database conesso a tabelle esterne di un altro database.
Ho necessità di correggere (e raramente aggiungere ) le informazioni presenti nella tabella AU dove le colonne DataRilascioAutorizzazione e DataScadenzaAutorizzazione, aimè sono settate con la formattazione di 6 caratteri di "testo breve" coincidenti con il sistema di lettura invertito AAAAMMGG. Ho creato una maschera per le modifiche di AU ed anche qui mi trovo costretto ad inserire la data nello stesso ordine. Ho letto che access nativamente riconduce la data al formato americano e che non si può far nulla.
il database deve essere utilizzato da diversi utenti che mal digerirebbero di editare la data in formato diverso da quello consueto in Italia e comunque potrebbero sbagliare l'ordine dei numeri durante le modifiche.
Pensavo quindi di ingannare l'applicativo Access come in appresso: al momento in cui si apre la maschera m_AU, una istruzione in VBA dovrebbe settare nella tabella AU un nuovo ordine di lettura relativamente all'intera colonna specifica e , magari poi a fine delle operazioni di modifica con un pulsante (di chiusura della form), un'altra istruzione vba riporti la colonna della tabella AU allo stato iniziale e quindi chiuda la mia form m_AU.
Ho provato a modificare la prima colonna della tabella AU usando queste istruzioni che non restituiscono il risultato da me sperato
Private Sub Form_Open(Cancel As Integer)
Dim strsql As String
strsql = "ALTER TABLE AU ALTER COLUMN DataRilascioAutorizzazione = CDate(Right(DataRilascioAutorizzazione, 2) & '/' & Mid(DataRilascioAutorizzazione, 5, 2) & '/' & Left(DataRilascioAutorizzazione, 4))"
DoCmd.RunSQL strsql
End Sub
A prescindere dagli errori e dalle eventuali mancanze di istruzioni dovute alla mia inesperienza in vba (errori che spero qualcuno voglia risolvere), trovate che sia una strada applicabile?

Un'altra idea, ma son so da dove cominciare per realizzarla, potrebbe essere quella di non modificare alcunchè, ma di fare aprire, quando si fa clic nel campo DataRilascioAutorizzazione, una mini maschera che consente di scegliere graficamente l'anno, il mese ed il giorno, preposta ad inserire la data scelta nel formato nativo della tabella AU.

Ringrazio per la collaborazione

31 Risposte

  • Re: Ingannare access bypassando formato data americano

    Non ho capito, forse c'è qualcosa che ti sfugge.
    Perché non inserisci la data nel formato classico italiano e prima di scriverla sul db la trasformi in YYYYMMDD ?

    Ma che c'entra la colonna e l'inganno?
  • Re: Ingannare access bypassando formato data americano

    Idem, non ho capito...

    Comunque, nella tabella lascerei il formato proposto...Pena la confusione del mese col giorno e poi sono guai.

    In visualizzazione ed editazione/inserimento sulla gui con il formato che ritieni opportuno...La giri a piacimento con una riga di codice.
  • Re: Ingannare access bypassando formato data americano

    In teoria il formato breve ti riporta già la data correttamente in formato europeo. A meno che non hai windows in inglese. Comunque il controllo su cui visualizzi ed inserisci le date è impostato come data in formato breve, con eventuale formattazione ggmmaaaa?
  • Re: Ingannare access bypassando formato data americano

    oregon ha scritto:


    Ma che c'entra la colonna e l'inganno?
    L'inganno che immaginavo sarebbe quello di aggirare l'ostacolo, portando tutti i campi della colonna nell'ordine coincidente col mio campo d'immissione della data ed a termine di ogni operazione della maschera, di riportare la colonna nello stadio iniziale. Se non dovesse servire, meglio così, ma evidentemente sono lontano dalla soluzione,

    oregon ha scritto:


    Non ho capito, forse c'è qualcosa che ti sfugge.
    Perché non inserisci la data nel formato classico italiano e prima di scriverla sul db la trasformi in YYYYMMDD ?
    puoi spiegare meglio come e dove inserire la data nel formato classico italiano? se la scrivo direttamente nel campo,
    quello accetta solo quel formato previsto, che ricalca la tabella AU nel suo tipo di formattazione.

    Ed in che modo trasformeresti nel testo da inserire nel campo connesso al record della tabella AU?
  • Re: Ingannare access bypassando formato data americano

    StefBeck ha scritto:


    In visualizzazione ed editazione/inserimento sulla gui con il formato che ritieni opportuno...La giri a piacimento con una riga di codice.
    Puoi spiegarti meglio, intendo in termini più spiccioli ed un pò meno tecnici? L'editazione/inserimento sulla gui di cui parli, è forse la modalità struttura della tabella , in corrispondenza del campo , sostituire da testo breve a data/ora? Inizialmente ci avevo pensato, almeno per fare la prova, ma non capisco perchè mi restituisce la finestra di errore "operazione non supportata per questo tipo di oggetto". In ogni caso, alla fine delle modifiche eseguite nel campo , la tabella per evitare qualsivoglia conflitto con l'altro database, deve tornare esattamente con la formattazione testo breve, 50 caratteri max.
  • Re: Ingannare access bypassando formato data americano

    Cioè hai una data archiviato in un campo testo breve? Auguri.
    Se cosi fosse devi creare un altro campo con data ora, impostare visualizza data breve, ricopiare il valore della vecchia data nel nuovo campo e poi quando hai trasferito tutti i valori puoi anche cancellare il vecchio campo a livello di tabella. Altre soluzioni implicano scrittura di codice vba.
    Se il vecchio campo fosse un campo numerico, access, in base al numero che trova ti restituisce un valore data, a coda di gatto e tutte sballate, ma ci prova. Ma se è un campo testo ti da errore
  • Re: Ingannare access bypassando formato data americano

    fratac ha scritto:


    In teoria il formato breve ti riporta già la data correttamente in formato europeo. A meno che non hai windows in inglese. Comunque il controllo su cui visualizzi ed inserisci le date è impostato come data in formato breve, con eventuale formattazione ggmmaaaa?
    Windows è in Italiano
    il controllo presente nella maschera si limita a leggere il valore presente nel campo presente nella colonna della tabella. Visualizzando in modalità struttura la tabella AU il campo/colonna non è impostato come data in formato breve, piuttosto come testo breve (50 caratteri, tra l'atro uno spreco inutile di spazio), nell'ordine di lettura riconosco l'anno 4 numeri, il mese due numeri ed il giorno 2 numeri; nessun slash o altro carattere di separazione
  • Re: Ingannare access bypassando formato data americano

    Ma chi l ha sviluppato questo database?
    Perche usare un campo breve (che comunque contiene 255 caratteri e non 50) invece di un campo data?
  • Re: Ingannare access bypassando formato data americano

    fratac ha scritto:


    Ma chi l ha sviluppato questo database?
    Perche usare un campo breve (che comunque contiene 255 caratteri e non 50) invece di un campo data?
    Noi io, mi viene consegnato in questa maniera. Anche io resto perplesso, almeno potevano scegliere 8 caratteri, includendo due slash di separazione. Mi ritrovo ad utilizzarlo per esigenze d'ufficio e non posso modificarlo nelle sue caratteristiche. Devo limitarmi a correggere i dati da aggiornare, con la sola possibilità di lavorare sulle tabelle utilizzando un database access esterno (insomma con la sola funzione di software rispetto alle tabelle esterne). In questo software, posso aggiungere le mie queries , le mie forms ed i miei reports. Le tabelle aggiornate con le correzioni vanno poi trasmesse ad altro ufficio esterno che con propri mezzi ne utilizzerà le informazioni interne.
  • Re: Ingannare access bypassando formato data americano

    Solita ciofecata all italiana. Ci scommetto evaristo che trattasi di ufficio pubblico.
    Quindi ricapitoliamo.
    Sicuramente si tratta di un foglio excell importato in una tabella, lavori su un front end che gira su una runtime di access e devi modificare un testo che fa le funzioni di data.
    Quindi, mi domando, che cosa centra access con il problema che hai?
    Access non salva nessuna data.
    Quindi non capisco perché lo devi ingannare, quando non è il problema.
  • Re: Ingannare access bypassando formato data americano

    fratac ha scritto:


    Solita ciofecata all italiana. Ci scommetto evaristo che trattasi di ufficio pubblico.
    CENTRO! Hai salvato Evaristo

    fratac ha scritto:


    Access non salva nessuna data.
    Quindi non capisco perché lo devi ingannare, quando non è il problema.
    Anche a me è chiaro che probabilmente i dati di questo ufficio siano giunti con formato excel, anzi per essere anche più specifici importati da un file in formato .csv (testo separato da virgola o da puntoevirgola) e poi confezionati per gli uffici decentrati in tabelle da lavorare con access. Il problema è che li vogliono restituiti in questo formato e che per facilitarne l'uso vorrei utilizzare solo access. Quindi volevo tentare di risolverlo, anche se le mie conoscenze di access vba sono quelle chi, ragiona sui copia ed incolla, cerca di capire in cosa consiste l'istruzione e poi riesce ad adattarla alle proprie esigenze.

    Praticamente il mio approccio sarebbe, utilizzare una maschera connessa alla tabella AU, inserire codice vba per cambiare l'ordine di questi numeri, passando i primi 4 all''ultimo e gli ultimi due all'inizio, eseguendo l'operazione per tutti i campi della colonna. Ottenendo il corretto ordine, l'operatore che usa la maschera ridurrebbe i margini di errore nell'inserimento della data aggiornata e finita ogni modifica i record, un istante prima di chiudere la maschera, una operazione inversa in vba riporta l'odine dei dati della colonna della tabella AU allo stato originario. Credi sia possibile qualcosa di simile?

    Ovviamente voglio precisare che l mi è già disponibile una maschera di sola visualizzazione che legge i dati della tabella AU, basa la lettura dei suoi campi su una query, dove in corrispondenza del campo di cui ti sto parlando trovi la seguente formula
    
    DataRilascioAU: IIf([DataRilascio];CDate(Right([DataRilascio];2) & "/" & Mid([DataRilascio];5;2) & "/" & Left([DataRilascio];4));[DataRilascio])
    
    Trattandosi, di una formula sostitutiva del vero campo, non consente di modificare la data che ha ottenuto e che viene letta dalla maschera di visualizzazione

    Questo è il motivo per cui pensavo di aggiungere una maschera dedicata alle sole modifiche dei dati di questa tabella, ma mi sono arenato perchè mi trovo questo formato "testo breve" che può equivocare la lettura della data o essere motivo di errore nell'inserimento.

    Una soluzione diversa potrebbe essere di utilizzare una form creata per simulare il datepicker di facility che access offre quando il campo è già settato in formato data. Quindi una form di sola interfaccia che per ogni valre selezionato, ne attribuisca l'ordine nella sequenza corretta in una variabile , stabilendo che il mio campo DataRilascio deve essere uguale alla variabile. Magari ne trovo una già pronta (allego una immagine della form, come potrebbe presentarsi).

    Per ultimo, non ti nascondo che superare gli ostacoli che mi si presentano è sempre stata la mia soddisfazione personale , e ora farmi fermare da un insulso codice, mi da sicuramente fastidio.
    Allegati:
    28081_3a99da472e43b2705eca06c08c087ffb.jpg
    28081_3a99da472e43b2705eca06c08c087ffb.jpg
  • Re: Ingannare access bypassando formato data americano

    Fermo restando che il vero problema da risolvere è l importazione dei dati ed il database in se per se, secondo me devi studiare la manipolazione delle stringhe, quello che praticamente fa la formula che hai postato, poi a mio avviso, non c e bisogno di modificare prima e dopo i dati della tabella, ma formattare una casella di testo con il formato ggmmaaaa o quello che ti serve, in modo che l operatore inserisce la data europea, poi, con la manipolazione delle stringhe inverti giorno e mese e lo salvi nella tabella. L operatore inserisce la data senza errori, e la tabella riceve il dato nel formato americano. Inoltre è più semplice anche la gestione degli errori. La formattazione della textbox impedisce inserimenti sbagliati e il salvataggio lo gestisci come vuoi tu.
  • Re: Ingannare access bypassando formato data americano

    fratac ha scritto:


    ... formattare una casella di testo con il formato ggmmaaaa o quello che ti serve, in modo che l operatore inserisce la data europea, poi, con la manipolazione delle stringhe inverti giorno e mese e lo salvi nella tabella. L operatore inserisce la data senza errori, e la tabella riceve il dato nel formato americano. Inoltre è più semplice anche la gestione degli errori. La formattazione della textbox impedisce inserimenti sbagliati e il salvataggio lo gestisci come vuoi tu.
    quindi dovrei aggiungere alla maschera q_AU una ulteriore casella di testo non associata, settarla nel formato (proprietà) come data. Aggiungere codice VBA all'evento afterupdate del controllo nuovaCasella con il seguente ordine
    Private Sub NuovaCasella_AfterUpdate()
    Dim CopiaMiaData As String  ' quindi testo
    CopiaMiaData = (Right(Me.NuovaCasella, 4) & Mid(Me.NuovaCasella, 4, 2) & Left(Me.NuovaCasella, 2))
    Me.DataRilascio = CopiaMiaData
    End Sub
    Ho provato e funziona, Ti ringrazio molto per avermi avvicinato alla soluzione.

    Riscontro però la poca versatilità della datepicker di default che mi offre access, che è meno versatile di quella che ho mostrato nel mio precedente allegato, infatti quest'ultima, consentirebbe di scegliere l'anno separatamente dal mese, un pò come avviene nelle classiche pagine internet di inserimento dei dati personali. Quella di default, infatti costringe con le frecce a sx o dx di scegliere il mese strettamente connesso all'anno, quindi se ad esempio dovessi andare di 3 anni indietro dovrei fare click tante volte in più inutilmente. Fare da zero una nuova datepicker mi seccherebbe un tantino, essendo consapevole che in rete probabilmente è possibile trovarne di già realizzate , testate e ben funzionanti. Qualcuno saprebbe suggerirmi dove trovarne una?
  • Re: Ingannare access bypassando formato data americano

    Mi sto perdendo. Dici di avere un testo breve, però alleghi l immagine di un un'inserimento data, che non funziona con le text box collegate ad un formato testo. Il codice che hai postato non inverte niente, ma prende solo i valori.
    Inoltre non hai una conoscenza base di access.
    Quando parlo di formattazione, non intendo il formato.
    Il formato è il tipo di dato (testo, long, integer..) la formattazione è invece la modalità di inserimento che si costruisce su una text box, in modo che l utente inserisca i dati in un determinato formato. Come si fa per i codici fiscali, in modo che dove è previsto un numero vengano inseriti solo numeri e dove si devono immettere solo lettere, vengano immesse solo lettere.
    Ed anche con le date si usava forzare l inserimento.
    Però stiamo parlando di versioni di access precedenti al 2000. Ma con che office è stato creato il database?
Devi accedere o registrarti per scrivere nel forum
31 risposte