Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    42

    [ACCESS VBA] "controllo dati"

    Ciao Ragazzi,

    Ho un problema sulla consequenzialità dei dati presenti in una tabella access. vi faccio un esempio:

    Data-ora-valore
    20130101-01-568
    20130101-02-648
    20130101-05-472

    Vorrei realizzare una query che mi restituisca i valori sopra citati ma con ricostruito il buco presente dalle 2 alle 5 ed inserendo come valore "0". Ad esempio:

    Data-ora-valore
    20130101-01-568
    20130101-02-648
    20130101-03-0
    20130101-04-0
    20130101-05-472

    come posso fare?

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Ma sono 3 campo distinti ?
    - Data
    - ora
    - valore

    Nel campo Data hai sempre solamente 1 data come nell'esempio oppure puoi avere piu date ?

    Che formato hanno i 3 campi ?

    Il campo ora va da 00 a 23 ?

    Ti deve integrare solo il 03 e 04 oppure il 03, 04, 06, 07, ..... 22, 23

    Stai pensando a una:
    - Query SQL
    - Tabella temporanea
    - RecordSet
    ???

    Cosa devi fare con il risultato ??


    .

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    42
    ciao nman,

    scusami effettivamente ti ho dato pochissime informazioni.

    La data, ora e valore sono 3 campi distinti.

    il formato ora va dalle 01 alle 24 ed il campo è nel formato numerico

    la data è sotto forma di stringa numerica, ad esempio 20130101 (anno mese giorno) ed il campo è nel formato numerico

    il campo valore ha formato numerico.

    l'algoritmo mi dovrebbe integrare l'ora aggiungendo quella mancante (compresa la data associata ed il valore ponendolo a 0). Considera che i buchi posso esserci anche a cavallo tra due giorni (per esempio dalla 23 alle 05 del giorno successivo)

    io stavo pensando ad una query incorporata ad altre query per non aggiungere ulteriori dati. Questo perchè la tabella da esaminare ha più di 100'000 righe e pesa circa 600 mb.

    il risultato dovrei confrontarlo con un'altra tabella simile che però non ha buchi. Precisamente dovrei eseguire una sottrazione tra i valori delle due tabelle.

    percaso mi sto complicando la vita?

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Non sono sicuro di avere capito bene

    ---- Con questi dati che risultato vuoi?
    20130101-03-568
    20130101-04-648
    20130101-11-472
    20130102-07-125
    20130105-09-741

    ---- Forse questo ?
    20130101-03-568
    20130101-04-648
    20130101-05-0
    .......
    20130101-10-0
    20130101-11-472
    20130101-12-0
    ......
    20130101-24-0
    20130102-01-0
    ......
    20130102-06-0
    20130102-07-125
    20130102-08-0
    .......
    20130102-24-0
    20130103-01-0
    ......
    20130103-24-0
    20130104-01-0
    .......
    20130104-24-0
    20130105-01-0
    .......
    20130105-08-0
    20130105-09-741


    Diversamente quale ??

    .

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    42
    Si esattamente quello vorrei! Praticamente ho bisogno di contiguità per confrontare i dati con l'altra tabella...

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Originariamente inviato da sky998 percaso mi sto complicando la vita?
    Mi sa di si, avresti delle soluzioni piu semplici che ti abbozzo dopo

    Originariamente inviato da sky998 il formato ora va dalle 01 alle 24 ed il campo è nel formato numerico
    Strano il formato numerico se poi hai come valore 01 ( dovrebbe essere 1 )
    Strane anche le ore dalle 01 alle 24 ( dovrebbe essere dalle 00 alle 23 )

    Originariamente inviato da sky998 io stavo pensando ad una query incorporata ad altre query .... il risultato dovrei confrontarlo con un'altra tabella simile che però non ha buchi.
    Pero qui siamo nella sezione Wundows e Software ..... quindi ti rispondo con VBA
    Confesso pero che una query SQL sembra anche a me piu facile.
    anche perche tu dici di avere gia un'altra tabella senza buchi,
    ti basterebbe metterle in JOIN .....

    Originariamente inviato da sky998 .....per non aggiungere ulteriori dati.
    la soluzione proposta utilizza una tabella salvata ma intesa come temporanea, in quanto ad ogni utilizzo viene innanzitutto svuotata di tutti i suoi dati per poi essere ripopolata dalla routine con dati aggiornati.

    __________________________________________________ ____

    Comunque ammesso che la tua tabella si chiami
    ----- Tabe
    TaDax -- Numerico -- la data rappresentata cosi 20130107 - 20131225 (natale)
    Tahhh -- Numerico -- L'ora da 01 a 24
    TaVal -- Numerico --

    Poi hai la tua temporanea
    ----- xxxx
    xxDax -- Testo
    xxhhh -- Testo
    xxVal -- Testo

    Con il codice che ti posto sotto riesci a generarti i tuoi record, ma certamente dovremo rivederlo perche c'è qualche dettaglio sui formati dati che mi sfugge.
    codice:
    Public Function gggg()
    
    
    CurrentDb.Execute "DELETE xxxx.* FROM xxxx;"
    
    Dim gi As Long
    Dim gf As Long
    gi = DMin("[TaDax]", "Tabe", "")
    gf = DMax("[TaDax]", "Tabe", "")
    
    Dim di As Date
    Dim df As Date
    di = Mid(gi, 7, 2) & "/" & Mid(gi, 5, 2) & "/" & Mid(gi, 1, 4)
    df = Mid(gf, 7, 2) & "/" & Mid(gf, 5, 2) & "/" & Mid(gf, 1, 4)
    
    Dim hi As Integer
    Dim hf As Integer
    hi = DMin("[Tahhh]", "Tabe", "Tabe.TaDax = " & gi)
    hf = DMax("[Tahhh]", "Tabe", "Tabe.TaDax = " & gf)
    
    
    ' ((Year(x)) & (Right((0 & Month(x)), 2)) & (Right((0 & Day(x)), 2)))
    ' (Right((0 & y), 2))
    
    Dim x As Date
    Dim y As Integer
    Dim ssq As String
    Dim dd As String
    Dim oo As String
    
    For x = di To di
        For y = hi To 24
            dd = ((Year(x)) & (Right((0 & Month(x)), 2)) & (Right((0 & Day(x)), 2)))
            oo = (Right((0 & y), 2))
        
            If (DCount("*", "Tabe", "Tabe.TaDax = " & dd & " AND Tabe.Tahhh = " & oo)) = 0 Then
                ssq = "INSERT INTO xxxx ( xxDax, xxhhh, xxVal ) SELECT '" & dd & "' AS da, '" & oo & "' AS hh, '" & 0 & "' AS va;"
                CurrentDb.Execute ssq
            Else
                ssq = "INSERT INTO xxxx ( xxDax, xxhhh, xxVal ) SELECT Tabe.TaDax, (Right((0 & Tabe.Tahhh),2)) As hh, Tabe.TaVal FROM Tabe WHERE (((Tabe.TaDax)=" & dd & ") AND ((Tabe.Tahhh)=" & oo & "));"
                CurrentDb.Execute ssq
            End If
        Next
    Next
    
    
    For x = di + 1 To df - 1
        For y = 1 To 24
            dd = ((Year(x)) & (Right((0 & Month(x)), 2)) & (Right((0 & Day(x)), 2)))
            oo = (Right((0 & y), 2))
        
            If (DCount("*", "Tabe", "Tabe.TaDax = " & dd & " AND Tabe.Tahhh = " & oo)) = 0 Then
                ssq = "INSERT INTO xxxx ( xxDax, xxhhh, xxVal ) SELECT '" & dd & "' AS da, '" & oo & "' AS hh, '" & 0 & "' AS va;"
                CurrentDb.Execute ssq
            Else
                ssq = "INSERT INTO xxxx ( xxDax, xxhhh, xxVal ) SELECT Tabe.TaDax, (Right((0 & Tabe.Tahhh),2)) As hh, Tabe.TaVal FROM Tabe WHERE (((Tabe.TaDax)=" & dd & ") AND ((Tabe.Tahhh)=" & oo & "));"
                CurrentDb.Execute ssq
            End If
        Next
    Next
    
    For x = df To df
        For y = 1 To hf
            dd = ((Year(x)) & (Right((0 & Month(x)), 2)) & (Right((0 & Day(x)), 2)))
            oo = (Right((0 & y), 2))
        
            If (DCount("*", "Tabe", "Tabe.TaDax = " & dd & " AND Tabe.Tahhh = " & oo)) = 0 Then
                ssq = "INSERT INTO xxxx ( xxDax, xxhhh, xxVal ) SELECT '" & dd & "' AS da, '" & oo & "' AS hh, '" & 0 & "' AS va;"
                CurrentDb.Execute ssq
            Else
                ssq = "INSERT INTO xxxx ( xxDax, xxhhh, xxVal ) SELECT Tabe.TaDax, (Right((0 & Tabe.Tahhh),2)) As hh, Tabe.TaVal FROM Tabe WHERE (((Tabe.TaDax)=" & dd & ") AND ((Tabe.Tahhh)=" & oo & "));"
                CurrentDb.Execute ssq
            End If
        Next
    Next
    
    
    
    End Function

    Facci sapere

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 © 2025 vBulletin Solutions, Inc. All rights reserved.