Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Formato Date

  1. #1

    Formato Date

    Salve a tutti.
    Ho creato una funzione VBA che mi lancia una query e mi esporta il suo risultato in file .xls
    Tutto ok, solo che i campi "data" a volte vengono esportati nel formato inglese (mm/gg/aaaa) e altre volte in quello italiano (gg/mm/aaaa). Nella tabella il campo data è nel formato italiano, quindi non è un problema di inserimento del dato.

    A me servirebbe che nel file esportazione tutti i record fossero nello stesso formato, o inglese o italiano.

    Ho già provato a restituire enll'esportazione la data componendola con Day() + Month()+Year() ma non c'è soluzione.

    Posto il codice e spero che qualcuno possa aiutarmi.

    Codice PHP:
    Function creafile()

    //creazione della data di selezione posteriore a oggi
    Oggi Date
    Giorno 
    Day(DateAdd("m"9Oggi))
    Mese Month(DateAdd("m"9Oggi))
           
    //controllo l'anno di creazione della nuova data
    If Month(Oggi) <= 3 Then
           Anno 
    Year(Oggi) - 1
        
    Else
           
    Anno Year(Oggi)
    End If

    Selezione Mese "/" Giorno "/" Anno

    Dim strSQL 
    As String
    Dim rs 
    As New ADODB.Recordset

    strSQL 
    "SELECT data1, campo1, campo2, data2 FROM elenco WHERE data1>=#" Mese "/" Giorno "/" Anno "# AND data_1 <=#" Month(Oggi) & "/" Day(Oggi) & "/" Year(Oggi) & "# OR data_1 Is Not Null AND data_1 <=#" Month(Oggi) & "/" Day(Oggi) & "/" Year(Oggi) & "# AND data_2 Is Null ORDER BY data_1"
    rs.Open strSQLCurrentProject.ConnectionadOpenKeysetadLockOptimisticadCmdText

    Open 
    "C:\export.xls" For Output As #1
    Print #1, "DATA 1" & Constants.vbTab & "CAMPO1" & Constants.vbTab & "CAMPO2" & Constants.vbTab & "DATA2" 
    rs.MoveFirst
    Do Until rs.EOF

    Data_1 
    rs.Fields("data1")
    campo_1 rs.Fields("campo1")
    campo_2 rs.Fields("campo2")
    Data_2rs.Fields("data2")

    rs.MoveNext
    Print #1, Data_1 & Constants.vbTab & campo_1 & Constants.vbTab & campo_2 & Constants.vbTab & Data_2
    Loop
    rs
    .Close
    Set rs 
    Nothing
    Close 
    #1
    End Function 

  2. #2
    Prova a modificare così (non ho provato ma penso che funzioni).

    codice:
    Print #1, CDate(Data_1) & Constants.vbTab & campo_1 & Constants.vbTab & campo_2 & Constants.vbTab & CDate(Data_2)
    Inoltre Qui puoi trovare qualche risposta su un problema simile al tuo.
    A tutti i COBOL-isti/CICS-isti/DB2-isti come me: l'adunanza è iniziata; ne resterà soltanto uno.
    È meglio bruciare subito, che spegnersi lentamente.

    Per fare un fumetto di successo ci voglio le tre "A": Azione - Avventura - Atette
    Ratman

  3. #3
    Nel posto che hai linkato hanno risolto il mio problema facendo uso della funzione Cells,
    potete darmi info? Perchè a me dà errore "Sub non definita". Cioè non me lo legge come comando ma crede che richiamo una funzione che non ho definito!

    Codice PHP:
    Do Until rs.EOF
    1
    Data1 
    rs.Fields("data1")
    Campo_1 rs.Fields("campo1")
    Campo2_2 rs.Fields("campo2")
    Data2 rs.Fields("data2")
    rs.MoveNext
    Print #1, Cells(j, 1) = Data1 & Constants.vbTab & Campo_1 & Constants.vbTab & Campo_2 & Constants.vbTab & Cells(j, 4) = Data2
    1
    Loop
    rs
    .Close
    Set rs 
    Nothing
    Close 
    #1 

  4. #4
    Stai facendo un po' confusione!
    La funzione "CELLS(riga, colonna)" serve a creare un riferimento ad una cella del foglio di lavoro.

    Per farla breve:
    codice:
    a = foglio1.cells(5,2)
    Questo codice permette di leggere il contenuto di una cella; nello specifico la variabile "a" sarà valorizzata col contenuto della cella "B5" del primo foglio di lavoro.

    codice:
    foglio1.cells(8,4) = "Prova"
    Questo codice permette di scrivere dentro una cella di lavoro; in particolare il codice scrive "Prova" dentro la cella "D8" del primo foglio di lavoro.

    Mentre la funzione CDate(data) permette di normalizzare una data.
    A tutti i COBOL-isti/CICS-isti/DB2-isti come me: l'adunanza è iniziata; ne resterà soltanto uno.
    È meglio bruciare subito, che spegnersi lentamente.

    Per fare un fumetto di successo ci voglio le tre "A": Azione - Avventura - Atette
    Ratman

  5. #5
    Riposto perchè ho modificato il msg.
    Nel post che mi hai linkato risolvono il problema usando il Cells, perchè il CDate non risolveva il difetto!

    Il problema mio è implementare l'uso del Cells nel mio cilco. Ma mi da errore, dice che Cells non è una Sub definita.

    Codice PHP:
    Do Until rs.EOF
    1
    Data1 
    rs.Fields("data1")
    Campo_1 rs.Fields("campo1")
    Campo2_2 rs.Fields("campo2")
    Data2 rs.Fields("data2")
    rs.MoveNext
    Print #1, Cells(j, 1) = Data1 & Constants.vbTab & Campo_1 & Constants.vbTab & Campo_2 & Constants.vbTab & Cells(j, 4) = Data2
    1
    Loop
    rs
    .Close
    Set rs 
    Nothing
    Close 
    #1 

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da fraduecenny
    Nel posto che hai linkato hanno risolto il mio problema facendo uso della funzione Cells,
    potete darmi info?
    La tua esportazione NON CREA un VERO file Excel, ma semplicemente un file di testo delimitato da TAB. Per cui è sbagliato a priori indicare l'estensione XLS, che invece dovrebbe essere TXT.

    Tra l'altro hai usato la strada più tortuosa per esportare in XLS, poteva bastare
    codice:
    Dimi sSQL As String
    sSQL = "SELECT * INTO [Excel 8.0;Database=c:\tmp\customers.xls].[Foglio1] FROM Customers"
    myConnection.Execute sSQL
    Dove FROM può essere un'intera tabella (Customers) oppure una query di selezione (SELECT ... FROM ... WHERE ...) del tuo database.

    A parte questi dettagli (comunque importanti!) quando l'utente carica il file in Excel, la data sarà formattata in base alle impostazioni del Formato della cella di Excel in cui andrà scritta la data, se non è definito alcun formato (di solito è così) Excel usa quello predefinito (e da lì non lo schiodi!).

    Logico che usando la tuo routine non hai alcun modo di intervenire per risolvere il problema, e qualsiasi goffo tentativo di modificare il formato della data è deleterio perchè rischi di compromettere il risultato in quanto se la data è identificabile inequivocabilmente allora sarà formattata correttamente, es. 11/25/2009, perchè Excel 'capisce' che la data può essere solo 25/11/2009 (può forse esistere l'11/25/2009' ???, Ovviamente la risposta è NO.).
    Ma nel caso in cui non sia identificabile inequivocabilmente, es. 06/08/2009 Excel non può capire qual'è il mese e qual'è il giorno e per lui potrebbe essere valida sia 06/08/2009 che 08/06/2009.
    Ecco da dove nascono tutti i problemi.

    Ovviamente la questione potrebbe essere soggetto anche alla localizzazione di Excel.

    Il solo modo sicuro è usare l'Automazione di Excel per creare un vero file XLS, trasferire i dati nel foglio ed impostare il formato delle celle usando la proprietà NumberFormat:
    http://msdn.microsoft.com/en-us/library/aa224873(office.11).aspx

    Anche qui vedi esempi sul NumberFormat
    http://www.xtremevbtalk.com/showthre...NumberFormat#3

    Vedi anche questi miei esempi:
    Tramite ADO
    http://forum.masterdrive.it/visual-b...-riga-17415/#9

    Tramite Office Automation
    http://forum.masterdrive.it/visual-b...excel-17343/#7

    Inoltre esiste anche il metodo di Excel CopyFromRecordset
    http://msdn.microsoft.com/en-us/library/aa165427.aspx


    Ti consiglio di consultare la Guida a Microsoft Visual Basic for Applications (che NON è la guida di Excel!!! ) accessibile DOPO essere entrato da Excel nell'ambiente Microsoft Visual Basic Applications (in cui l'IDE è molto simile a quello di VB6).
    Da lì premi F1 e cerchi NumberFormat.

    Questa guida contiene sempre l'esempio per ogni caso, ed è insostituibile.

    Ovvio che in questo caso la tua vecchia routine non serve più a niente.

  7. #7
    Grazie, creando il file direttamente dalla chiamata query, oltre a semplificare il codice, si è risolto anche il problema Data!!!!


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.