Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138

    [vb express 2008] problema strano con la ricerca delle date usando BETWEEN

    devo fare una ricerca che mi dia come risultato i valori compresi tra una data A e una data B usando 2 DateTimePicker.. il comando funziona ma quando inserisco i numeri 8,9,10,11,12 di luglio per effettuare la ricerca succede una cosa strana ! mi riporta solo il valore della data più alta qualora essa rientri tra la data A e B ! invece se per esempio la data più alta è il 28 di luglio e io come data B imposto il 27 e come data A un giorno compreso tra 8 e 12 non mi rileva niente ?? mah..
    ho provato così
    codice:
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim valore1 As New System.DateTime(DateTimePicker1.Value.Ticks)
            Dim valore2 As New System.DateTime(DateTimePicker2.Value.Ticks)
            Dim ricerca As New OleDb.OleDbDataAdapter("SELECT* FROM Articoli_anagrafica WHERE Data_scadenza BETWEEN #" + valore1.ToShortDateString + "# AND #" + valore2.ToShortDateString + "#", archivio)
            Dim da As New DataSet
            ricerca.Fill(da, "Articoli_anagrafica") 'FILL scrive il risultato di LEGGEREDATI dentro il dataset DA
            DataGridView1.DataSource = da.Tables(0) 'DATASOURCE indica al datagridview di leggere i dati del dataset DA
            Codice_barraTextBox.Text = ""
        End Sub
    e mi riporta l'errore descritto sopra.. mentre se formatto le date così:
    codice:
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim valore1 As New System.DateTime(DateTimePicker1.Value.Ticks)
            Dim valore2 As New System.DateTime(DateTimePicker2.Value.Ticks)
            Dim ricerca As New OleDb.OleDbDataAdapter("SELECT* FROM Articoli_anagrafica WHERE Data_scadenza BETWEEN #" + Format(CDate(valore1.ToShortDateString), "MM/dd/yyyy") + "# AND #" + Format(CDate(valore1.ToShortDateString), "MM/dd/yyyy") + "#", archivio)
            Dim prm As New OleDb.OleDbParameter()
            prm.Direction = ParameterDirection.InputOutput
            prm.DbType = DbType.Date
            Dim da As New DataSet
            ricerca.Fill(da, "Articoli_anagrafica") 'FILL scrive il risultato di LEGGEREDATI dentro il dataset DA
            DataGridView1.DataSource = da.Tables(0) 'DATASOURCE indica al datagridview di leggere i dati del dataset DA
            Codice_barraTextBox.Text = ""
        End Sub
    non mi riporta proprio niente !

  2. #2
    impariamo a fare un po' di debug

    innanzitutto separa la generazione del comando

    Dim QueryCmd as string= "SELECT* FROM Articoli_anagrafica WHERE Data_scadenza BETWEEN #" + Format(CDate(valore1.ToShortDateString), "MM/dd/yyyy") + "# AND #" + Format(CDate(valore1.ToShortDateString), "MM/dd/yyyy") + "#"

    qui puoi mettere un punto di interruzione e controllare la stringa

    poi semplifichi l'istanza così

    Dim ricerca As New OleDb.OleDbDataAdapter(QueryCmd, archivio)

    più pulito, non credi? comunque, ispeziona QueryCmd e vedi cosa effettivamente invii al db

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    ho fatto come dici tu ma quando clicco sul button mi scompare in contenuto del datagridview...

  4. #4
    Perché ti complichi la vita con la formattazione delle date nei comandi SQL? Usa le query parametriche e dimenticati di questi e molti altri problemi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    Potresti suggerirmi una guida sulle query parametriche perché non le ho mai usate

  6. #6
    Originariamente inviato da frank095
    Potresti suggerirmi una guida sulle query parametriche perché non le ho mai usate
    http://www.blakepell.com/Main/BlogEn...a-cc10bc20502d
    Comunque basta cercare con Google, c'è una marea di materiale.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da frank095
    Potresti suggerirmi una guida sulle query parametriche perché non le ho mai usate
    Puoi anche scaricarti il mio progetto che vedi nella mia firma.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    da quello che ho capito si fà così...
    codice:
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim valore1 As New System.DateTime(DateTimePicker1.Value.Ticks)
            Dim valore2 As New System.DateTime(DateTimePicker2.Value.Ticks)
            Dim ricerca As New OleDb.OleDbDataAdapter("SELECT* FROM Articoli_anagrafica WHERE Data_scadenza BETWEEN @valore1 AND @valore2 ", archivio)
            Dim prm As New OleDb.OleDbParameter()
    
            prm.Direction = ParameterDirection.Input
            prm.DbType = DbType.Date
            prm.Value =valore1.ToShortDateString + valore2.ToShortDateString
    
            Dim da As New DataSet
            ricerca.Fill(da, "Articoli_anagrafica") 'FILL scrive il risultato di LEGGEREDATI dentro il dataset DA
            DataGridView1.DataSource = da.Tables(0) 'DATASOURCE indica al datagridview di leggere i dati del dataset DA
            Codice_barraTextBox.Text = ""
        End Sub
    e come si fa a legare "ricerca" con prm??

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    138
    nesuno ?

  10. #10
    codice:
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim valore1 As New System.DateTime(DateTimePicker1.Value.Ticks)
            Dim valore2 As New System.DateTime(DateTimePicker2.Value.Ticks)
            Dim comando As New OleDb.OleDbCommand("SELECT* FROM Articoli_anagrafica WHERE Data_scadenza BETWEEN @valore1 AND @valore2 ")
            comando.Parameters.AddWithValue("@valore1", valore1)
            comando.Parameters.AddWithValue("@valore2", valore2)
            Dim ricerca As New OleDb.OleDbDataAdapter(comando, archivio)
            Dim da As New DataSet
            ricerca.Fill(da, "Articoli_anagrafica") 'FILL scrive il risultato di LEGGEREDATI dentro il dataset DA
            DataGridView1.DataSource = da.Tables(0) 'DATASOURCE indica al datagridview di leggere i dati del dataset DA
            Codice_barraTextBox.Text = ""
        End Sub
    Nota che non devi formattare il dato in alcuna maniera: passa direttamente l'oggetto di tipo DateTime, provvederà il provider OleDb a girarlo ad Access nel modo giusto.
    Amaro C++, il gusto pieno dell'undefined behavior.

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