Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [VB.NET] Query su intervallo data in Access

    Salve. Ho un programma in Visual Basic 2005 che dovrebbe stampare tutti i record il cui valore nel campo data è compreso nell'intervallo inserito dall'utente. I valori dell'intervallo sono contenuti in un due variabili che ho provato a dichiarare sia string, sia date, sia datetime, in tutti i modi non trova nessun record con la data che rientra in quell'intervallo, nonostante i record che soddisfano tale condizione siano esistenti.
    L'istruzione Sql che uso è questa:
    "SELECT * FROM verifiche WHERE dataavvenutaverifica BETWEEN @Data1 AND @Data2 ORDER BY idverifica"
    Dove @Data1 e @Data2 sono due variabili associate al comando che vengono valorizzate assegnandole il valore delle due variabili prima citate.
    Con i database Sql non mi dà questo problema... come si fa in Access a trovare tutti i record che hanno la data compresa in un dato intervallo?

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Bisogna vedere come imposti i valori delle date.

    Il tipo DateTime include sempre Data + Ora.
    Lo sai vero che potrebbe essere necessario indicare anche l'ora?

    Vedi questo mio articolo sulle Date in Access (ma vale per qualsiasi database).

    Inoltre, dovresi usare un Command invece di una query (per i soliti classici motivi detti e ridetti più volte)

    Se ti possono essere utili, guarda gli articoli che leggi in firma:
    il primo (ADODB) spiega dettagliatamente i problemi inerenti alle date.
    il secondo (ADO.NET) mostra come usare i Command.


  3. #3
    Ti ringrazio per i link molto utile, il problema però non sono riuscito a risolverlo.
    Per connettermi e fare operazioni nel database usavo Oledb e non ADODB. Sapevo che il tipo Datetime includeva anche l'ora, per questo avevo provato anche con questo tipo e ho usato anche un Command. Il problema è che a me non è che non mi trova tutti i record compresi in quell'intervallo ma è che non me li trova affatto i record. Qualsiasi formato metto le date il risultato è sempre lo stesso!
    Adesso stò provando usando ADODB seguendo i consigli del link nella tua firma, ma come imposto la stringa di connessione? Il Provider non devo specificarlo, o sbaglio?

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Cavaliere Nero
    Ti ringrazio per i link molto utile, il problema però non sono riuscito a risolverlo.
    Ok, vediamo...

    Originariamente inviato da Cavaliere Nero
    Per connettermi e fare operazioni nel database usavo Oledb e non ADODB.
    Non cambia niente. E' il concetto che conta.
    Un'enunciato SQL è universale, ovvero funziona con qualsiasi database, a meno che tu stia usando comandi 'specifici' per un determinato tipo di database.
    Ma il tuo enunciato SQL è standard, cambiano solo i delimitatori di data.


    Originariamente inviato da Cavaliere Nero
    Sapevo che il tipo Datetime includeva anche l'ora, per questo avevo provato anche con questo tipo

    Quel: 'avevo provato anche con questo tipo' non è confortante...
    Non ha molto senso: o è un tipo DateTime oppure non lo è.
    Spiegati meglio cosa itendi.


    Originariamente inviato da Cavaliere Nero
    e ho usato anche un Command.
    Come l'hai usato?
    Se non mostri il codice, non possiamo indovinarlo. Che dici?
    E soprattutto, che risposta possiamo darti?


    Originariamente inviato da Cavaliere Nero
    Il problema è che a me non è che non mi trova tutti i record compresi in quell'intervallo ma è che non me li trova affatto i record. Qualsiasi formato metto le date il risultato è sempre lo stesso!
    Mettere qualsiasi formato è sbagliato!
    Devi usare il formato che vuole il database.


    Originariamente inviato da Cavaliere Nero
    Adesso stò provando usando ADODB seguendo i consigli del link nella tua firma, ma come imposto la stringa di connessione? Il Provider non devo specificarlo, o sbaglio?
    Scusa, ma se stai usando VB.NET devi usare ADO.NET.
    Perchè usare ADODB? Non ha molta logica...


  5. #5
    OK, scusami non sono stato molto chiaro.
    Allora, quel "avevo provato anche con questo tipo" era riferito alle variabili che contengono le date scelte dell'intervallo, non al campo nel database, il campo nel database è di tipo data/ora e non l'ho mai cambiato. Quello che pensavo è che dandogli le date dello stesso formato che usa il database Access sarebbe andato liscio, ma anche dandole nel formato, che credo sia quello giusto, il problema persiste.
    Non avevo postato il codice perché ero convinto che fosse solo un problema del formato del campo data nel database Access, ho sbagliato a non postarlo, adesso riporto tutto.

    Originariamente inviato da gibra
    Mettere qualsiasi formato è sbagliato! Devi usare il formato che vuole il database.
    E l'avevo fatto questo, ma sembra non funzioni lo stesso
    Originariamente inviato da gibra
    Scusa, ma se stai usando VB.NET devi usare ADO.NET. Perchè usare ADODB? Non ha molta logica...
    Ma ADODB l'ho utilizzato aggiungendo il riferimento ad ADODB dai componenti .NET al progetto, non è l'ADO.NET?


    Originariamente inviato da gibra
    Un'enunciato SQL è universale, ovvero funziona con qualsiasi database, a meno che tu stia usando comandi 'specifici' per un determinato tipo di database. Ma il tuo enunciato SQL è standard, cambiano solo i delimitatori di data.
    Però l'impostazione del command non mi sembra la stessa, pensavo potesse dipendere dal fatto che con l'Oledb non riuscivo ad impostare i formati corretti per le date. Comunque visto che l'Oledb va bene lascio come stà e posto il codice:

    codice:
    Imports System.Data
    Imports System.Data.OleDb
    
    Public Class Inserimento_Dati
    
        Dim objConnection_archivio As OleDbConnection
        Dim DataReader As OleDb.OleDbDataReader
    
        Private Sub PrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
    
            Dim strselect As String
    
            'Apro la connessione.
            objConnection_archivio.Open()
    
            Dim Data_iniziale, Data_finale As String
            Data_iniziale = Microsoft.VisualBasic.Left(dtpData_iniziale.Value, 10)
            Data_finale = Microsoft.VisualBasic.Left(dtpData_finale.Value, 10) & " 23.59.59"
    
                Cmd.CommandText = "SELECT SELECT tipologiaverifica, dataavvenutaverifica, importoverifica FROM verifiche WHERE dataavvenutaverifica BETWEEN @Data1 AND @Data2 ORDER BY idverifica"
                Cmd.Parameters.AddWithValue("@Data1", Data_iniziale)
                Cmd.Parameters.AddWithValue("@Data2", Data_finale)
                DataReader = Cmd.ExecuteReader
    
                While DataReader.Read()      'Il problema è qui, in questo ciclo non entra mai.
                    Stampa_verifica()
                End While
    
                DataReader.Close()
                Cmd.Parameters.Clear()
                objConnection_archivio.close()
    
          end sub
    
    end class

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ma ADODB l'ho utilizzato aggiungendo il riferimento ad ADODB dai componenti .NET al progetto, non è l'ADO.NET?
    Secondo te ADODB <---> ADO.NET sono uguali?
    Nel momento in cui usi una connessione OleDbConnection, SqlConnection, ecc... stai usando automaticamente ADO.NET.
    Lascia perdere il vecchio ADODB.

    Ci sono un paio di cose che non capisco:

    1) objConnection_archivio.Open()
    Dov'è la stringa di connessione?
    La Open ha successo?
    Hai fatto il debug del codice passo-passo?

    2) perchè nel CommandText appare 2 volte la SELECT?
    "SELECT SELECT ...."

    3) perchè non hai usato un blocco Try/Catch per intercettare eventuali errori?

    4) Se non arriva mai ad eseguire il ciclo
    While DataReader.Read()
    significa che c'è un errore.

    5) la connessione andrebbe aperta utilizzando
    Using ...
    ' codice
    End Using
    fai riferimento al mio progetto OleDB (in firma) per come fare.


  7. #7
    Originariamente inviato da gibra
    1) objConnection_archivio.Open()
    Dov'è la stringa di connessione?
    La Open ha successo?
    Hai fatto il debug del codice passo-passo?
    Scusami, la stringa di connessione era nell'evento Load del form, ho dovuto riscrivere il codice perché non entrava nel post e mi sono dimenticato di questo particolare.
    La open ha successo, va tutto normale tranne che dopo la lettura mi ritrovo il DataReader vuoto.

    codice:
            objConnection_archivio = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Percorso\Archivio.mdb;Persist Security Info=False;Jet OLEDB:Database Password=pass")
    Originariamente inviato da gibra
    2) perchè nel CommandText appare 2 volte la SELECT?
    "SELECT SELECT ...."
    Errore di riscrittura scusa, c'è un solo SELECT.

    Originariamente inviato da gibra
    3) perchè non hai usato un blocco Try/Catch per intercettare eventuali errori?

    4) Se non arriva mai ad eseguire il ciclo
    While DataReader.Read()
    significa che c'è un errore.
    A quell'istruzione ci arriva, ma non entra mai dentro. Ho provato a togliere dalla SELECT il controllo sulle date e funziona, ci entra nel ciclo.

    Originariamente inviato da gibra
    5) la connessione andrebbe aperta utilizzando
    Using ...
    ' codice
    End Using
    fai riferimento al mio progetto OleDB (in firma) per come fare.
    Non mi apre la connessione con Using, mi appare l'errore che non è stata aperta.
    Ho provato a vedere il tuo progetto, non mi fa effettuare il download, dice: "Non hai accesso alla visione di questo contenuto all'interno del portale".

    Grazie per la pazienza.

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ho provato a togliere dalla SELECT il controllo sulle date e funziona, ci entra nel ciclo.
    Allora significa che la query non restituisce alcun risultato.

    Ho provato a vedere il tuo progetto, non mi fa effettuare il download, dice: "Non hai accesso alla visione di questo contenuto all'interno del portale".
    Devi registrarti per accedere ai download.


  9. #9
    Originariamente inviato da gibra
    Allora significa che la query non restituisce alcun risultato.
    Appunto per questo avevo scritto solo la query all'inizio, ma i record che soddisfano la condizione ci sono.

    Originariamente inviato da gibra
    Devi registrarti per accedere ai download.
    Ero già registrato, non mi dà lo stesso l'accesso a quel file.

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Cavaliere Nero
    Appunto per questo avevo scritto solo la query all'inizio, ma i record che soddisfano la condizione ci sono.
    Ok, ma tu hai mostrato un'enunciato SQL, ma noi non conosciamo né i valori che usi, né i record quinid non possiamo aiutarti un gran chè...
    Se vuoi rendere disponibile il database con lo sola tabella incriminata ed i valori che stai cercando si può vedere di fare qualcosa.

    Originariamente inviato da Cavaliere Nero
    Ero già registrato, non mi dà lo stesso l'accesso a quel file.
    Immagino che tu abbia fatto il login (prima).
    Se mi dici il tuo Username vedo se cìè qualcosa che non va.
    Mandami un messaggio privato.


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.