Ricerca DB (mdb) > DATE

di il
14 risposte

Ricerca DB (mdb) > DATE

Ciao

sto provando con un "facile" esempio in VB6 e volevo poter selezionare SOLO i record a partire da una certa data.

Stavo guardando questo esempio MDB in un database dove ho anche un campo DATA col formato (GG/MM/YYYY HH:MM:SS) che il tutto lo apro e vedo in questo modo:
Dim rs_explog As New ADODB.Recordset
rs_explog.Open "ArchivioMDB", CnnList, adOpenDynamic, adLockOptimistic, adCmdTableDirect
e quindi in questo esempio cerco nell'archivio tutti i record/campi
    While Not rs_explog.EOF
        For i = 1 To 62           ' sono 62 campi per ogni record
            If rs_explog.Fields(i - 1).Value = Null Then
                CampoExp(i) = " "
            End If
            rs_explog.Fields(i - 1).Value = "" & rs_explog.Fields(i - 1).Value
            CampoExp(i) = rs_explog.Fields(i - 1).Value
        Next i
   
    ' qui faccio quello che deve fare per ogni campo/record

    ' quindi passo al prossimo record all'interno del WHILE

           rs_explog.MoveNext
    Wend
Alla fine del database ha fatto il suo "lavoro" e questo finchzè non necessito di aprire solo una parte del mdb e non tutto.

Se quindi volessi qui selezionare o partire nel mdb da una determinata DATA di registrazione
(==> ho un campo come descritto >DD/MM/YYY HH:MM:SS<)
al momento ho inserito un semplice

IF SelezioneDATA1 < SelezioneDATA2 Then

e funziona ma purtroppo evidentemente aprendo il file così, mi fa passare sempre tutti i record prima di trovare quelli che sono

> SelezioneData2

E questo è molto lento evidentemente...
Per evitare di passare TUTTI i record, sarebbe possibile aprire il db (mdb) solo dalla data

> SelezioneData2
< SelezioneData2
= SelezioneData2

magari modificando quando lo apro con
Dim rs_explog As New ADODB.Recordset
rs_explog.Open "ArchivioMDB", CnnList, adOpenDynamic, adLockOptimistic, adCmdTableDirect
Grazie mille

14 Risposte

  • Re: Ricerca DB (mdb) > DATE

    Ma ArchivioMFB in realtà è una Tabella?

    Comunque tutto quello che fa adesso il codice penso proprio potresti farlo con una sola

    UPDATE.... WHERE...

    dove dopo la where indichi il criterio della data. Devi dare un'occhiata al linguaggio SQL se vuoi lavorare con i DB
  • Re: Ricerca DB (mdb) > DATE

    Ri-ciao Oregon... ci si rilegge:-) ...
    io sempre dalla parte della mazza imbranata...

    È una routine che avevo recuperato in rete ed è pari pari così come l'ho riportata "ho fatto un copia incolla" di un esempio database (mdb access) che girava e che apro in quella routine con:
    Dim rs_explog As New ADODB.Recordset
    rs_explog.Open "ArchivioMDB", CnnList, adOpenDynamic, adLockOptimistic, adCmdTableDirect
    E poi il resto descritto sopra.
    Questa con il resto descritto, mi scuso per la mia incompentenza ma devo per forza chiedere aiuto..., mi fa passare TUTTI i record dal primo all'ultimo.
    Lì estrapolo ogni record (di 62 campi ognuno, con un for 1 to 62 lavoro i campi) e poi passo al prossimo finché non finisce il file nel "While Not rs_explog.EOF"...

    Ora "sempre per me ignorantemente" visto che ho ogni singolo campo, posso "lavorarlo" ho messo che se il FORMATO della campo della data NON è MAGGIORE ad esempio al "01.09.2022 00:00:00", passa al prossimo con

    rs_explog.MoveNext

    FUNZIONA ma se ho 100'000 RECORD e mi interessano SOLO gli ultimi 100 di questo mese... la cosa si fa lunga inutilmente quando potrebbe partire già dal 01.09.2022 00:00:00 o da default selezionare SOLO quelli dopo la data sengnalata.

    Concordo assolutamente con il WHERE, ma non so dove metterlo e come nell'esempio riportato nel codice sopra...


    GRAZIE PER QUALCHE CONSIGLIO
  • Re: Ricerca DB (mdb) > DATE

    Nessun consiglio/aiuto possibile.... ?

    Proprio non ci riesco... non so dove far trattare "SOLO" quelli maggiori ad una determinata DATA, per ora li devo far passare tutti e "trattare" solo quelli :

    "> DD/MM/YYYY HH:MM:SS"

    Ma con 100'000 record, la cosa si fa lunga se devo "trattare" solo ad esempio quelli di "oggi" che potrebbero essere solo un centinaio...

    Nel "code" sopra, proprio non saprei dove e come inserire il "WHERE"...

    Qualcuno saprebbe aiutarmi?

    GRAZIE!
  • Re: Ricerca DB (mdb) > DATE

    Se la UPDATE ti viene difficile (per ora) utilizza una SELECT per limitare i record con cui operare e usa il tuo ciclo.

    Quindi usa una

    "SELECT * FROM ArchivioMDB WHERE TuoCampoData >= #mm/dd/yyyy#"

    in cui ovviamente metterai il nome del tuo campo e la data (o aggiungerai la variabile formattata)
  • Re: Ricerca DB (mdb) > DATE

    Purtroppo non riesco ad inserire il "WHERE"....

    la parte che dovrebbe lavorare il ">=DATA" sarebbe questa:
    Sub Prova()
    Dim rs_explog As New ADODB.Recordset
    rs_explog.Open "ArchivioMDB", CnnList, adOpenDynamic, adLockOptimistic, adCmdTableDirect
    
       While Not rs_explog.EOF
            For i = 1 To 62           ' sono 62 campi per ogni record
                If rs_explog.Fields(i - 1).Value = Null Then
                    CampoExp(i) = " "
                End If
                rs_explog.Fields(i - 1).Value = "" & rs_explog.Fields(i - 1).Value
                CampoExp(i) = rs_explog.Fields(i - 1).Value
            Next i
        ' ...
        ' nel for i = 1 to 62 sopra, memorizzo ogni campo di ogni record nel database in CampoExp(i) e
        ' qui faccio fare quello che deve fare per ogni campo/record ed è dove dovrei dirgli di farlo solo >=data o <=data
        ' ma purtroppo così com'è li deve far passare sempre tutti.
        ' Quindi fatto quel che deve fare, passo al prossimo record all'interno del WHILE fino alla fine del database.
        ' Il campo della DATA/ORA con formato DD/MM/YYYY hh:MM:ss sarebbe il campo  i = 20
        ' ...
               rs_explog.MoveNext           ' quindi fatto quel che deve fare, passo al prossimo record
       Wend
    End Sub
    Provato e riprovato ma tra sintassi corretta e altro, proprio non riesco...

    Grazie mille per un qualche aiuto...
    Anto
  • Re: Ricerca DB (mdb) > DATE

    Ma provato dive? Cosa? La Open è sempre la stessa, non hai modificato nulla... se non provi non posso venire io lì a scrivere...
  • Re: Ricerca DB (mdb) > DATE

    ... non ho idea di dove mettere il "WHERE"....
  • Re: Ricerca DB (mdb) > DATE

    Dove metti la SELECT !

    Nell'apertura del recordset con la Open usa la stringa "SELECT ... FROM ... WHRE ..."

    Ma fai pure qualche ricerca e qualche prova... andiamo
  • Re: Ricerca DB (mdb) > DATE

    >> Dove metti la SELECT !

    non ho una SELECT, uso solo quella sub descritta

    dopo 3 giorni di errori e orrori... ci rinuncio

    vabbè se vuoi darmi una mano ok altrimenti lascia pure perdere le risposte, no problem...
    e vediamo se qualcuno sa indicarmi la sintassi da inserire in quella parte di codice...

    Io non ci riesco

    ciao grazie
  • Re: Ricerca DB (mdb) > DATE

    Nella Open del Recordset al posto di ArchivioMDB ci va la SELECT

    Mi pare di essere chiaro, se non vuoi provare neanche e vuoi la pappa pronta allora come non detto
  • Re: Ricerca DB (mdb) > DATE

    Https://docs.microsoft.com/it-it/troubleshoot/sql/connect/open-ado-connection-recordset-objects
  • Re: Ricerca DB (mdb) > DATE

    Grazie della "direzione dove metterlo",

    finalmente vedo una luce in fondo al tunnel.

    Ci sono "parzialmente" riuscito mettendolo quindi dove non sapevo, così:
    
    rs_explog.Open "SELECT * FROM ArchivioMDB WHERE TDate > #01/08/2022 00:00:00#", CnnList, adOpenDynamic, adLockOptimistic, adCmdTableDirect
    
    TDate è il campo della data.

    NON funziona correttamente penso per eventuali possibili errori di formato della DATA che sono diversi o ho formulato sbagliato il > ##.
    Ho quindi provato con un altro campo: "NOME" mettendogli 'GIOVANNI' così
    rs_explog.Open "SELECT * FROM ArchivioMDB WHERE Nome = 'GIOVANNI'", CnnList, adOpenDynamic, adLockOptimistic, adCmdTableDirect
    e funziona perfettamente lavorando solo i "GIOVANNI"

    mentre il formato che legge della DATA probabilmente non gli piace il

    WHERE Date > #01/08/2022 00:00:00#

    Nell'archivio ho registrato il MDB che se lo apro con ACCESS o altro lo vedo come

    DD.MM.YYYY HH:MM:SS

    ma se lo scrivo così col punto non va...

    Consigli per uscire dal mezzo del tunnel?

    Per ora grazie, per me è già tanto!
  • Re: Ricerca DB (mdb) > DATE

    Nella SELECT devi scrivere prima sempre il mese.
    Ti avevo detto che il formato deve essere mm/dd/yyyy a PRESCINDERE dal formato che usi per la visualizzazione, quindi

    >= #08/01/2022#

    primo agosto 2022
  • Re: Ricerca DB (mdb) > DATE

    Dopo notti insonni dovute agli evidenti miei limiti...
    Nella SELECT devi scrivere prima sempre il mese.
    e lo sapevo pure....

    => GRAZIE

    Per me un traguardo...
    e se a qualcuno limitato come me può servire ho "variabilizzato" il > < = <= >= e la #DATA# con due variabili testo ottenendo quindi questa "semplicissima linea" codice che per me non era così semplicissima...
    rs_explog.Open "SELECT * FROM DatabaseMDB WHERE TDate " & Date1Exp & " #" + Date2Exp + "# ", CnnList, adOpenDynamic, adLockOptimistic, adCmdTableDirect
    TDATE nel "Date2Exp" in formato come sopra elencato MM/DD/YYYY HH:MM:SS
    Date1Exp è il "> < = <= >="

    Sicuramente semplicissimo per tanti ma non per me!
    il "prelievo" dei dati dal MDB con 100'000 record degli ultimi due mesi (5'000 record) impiega 5 secondi!


    GRAZIE DEGLI AIUTI!
Devi accedere o registrarti per scrivere nel forum
14 risposte