none
Consulta por rango de Fechas de 2 DateTimePicker y un textbox BD Access RRS feed

  • Pregunta

  • Buenas tardes

    antes que nada agradesco sus aportaciones pues si bien me han ayudado bastante aclarando dudas con todo su conocimiento, pero ahora, no encuentro solucion a mi problema por mas que he buscado no doy con la solucion y solicito porfavor me ayuden a resolverlo

    Resulta que tengo un form con dos datetimepicker "Desde" "Hasta"  un Datagridview donde se supone me debe de cargar la informacion a consultar de mi textbox y mi boton Consulta

    pues bien el problema radica que al momento de realizar la consulta a la BD Access el campo fecha de mi BD esta con el Formato "dd/MM/yyyy" pero al generar la consulta los valores de mis DatetimePicker los toma en formato "MM/dd/yyyy" por lo cual no me arroja ningun resultado, me podrian ayudar para que al momento de llamar al evento de consulta me pueda dar el Resultado deseado? aqui les dejo el codigo que estoy utilizando

    Public Class FRM_MOVIMIENTOS
    Dim adaptador As OleDb.OleDbDataAdapter
        Dim tabla As New DataTable
    
        Private Sub todo()
    
    
    
            adaptador = New OleDb.OleDbDataAdapter("SELECT * FROM Movimientos WHERE Fecha BETWEEN#" & dtfecha1.Value & " #AND# " & dtfecha2.Value & " #AND Clave = '" & txt_consulta.Text & "'", conexion.conexion)
            tabla = New DataTable
            adaptador.Fill(tabla)
    
            DataGridView1.DataSource = tabla
            DataGridView1.Columns("Hora").DefaultCellStyle.Format = "T"
    
    
    
            For Each Columna As DataGridViewColumn In DataGridView1.Columns
    
                Columna.SortMode = DataGridViewColumnSortMode.Programmatic
    
            Next
    
            Dim dtView As DataView = Nothing
    
    
            dtView = New DataView(tabla)
    
    
            Me.DataGridView1.DataSource = dtView
    
    
            dtView.Sort = "Fecha DESC, Hora DESC"
    
    
        End Sub
    
    
    
    
    
    Private Sub FRM_MOVIMIENTOS_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            
    
            enlace()
            lbl_estado.Text = estado
    
            If lbl_estado.Text = "Conectado" Then
                ProgressBar1.Increment(100)
            Else
                ProgressBar1.Increment(30)
                lbl_estado.Text = "Error en conexion a Base de Datos"
            End If
    
    End Sub
    

    Espero me puedan ayudar porfavor de antemano muchas gracias

    martes, 6 de agosto de 2019 6:16

Respuestas

  • Hola Poeta,  al principio de la función, uno para cada datetimePicker y en la consulta colocas las variables en vez del dtFecha

     

    Private Sub todo() Dim DatD As Date = dtFecha.value.ToString("dd/MM/yyyy") Dim DatH As Date = dtFecha2.Value.ToString("dd/MM/yyyy") adaptador = New OleDb.OleDbDataAdapter("SELECT * FROM Movimientos WHERE Fecha BETWEEN#" & DatD.Value & " #AND# " & DatH.Value & " #AND Clave = '" & txt_consulta.Text & "'", conexion.conexion) tabla = New DataTable

    ..................

    Lo escribí a mano alzada, controla errores

     Por otra parte trada de verificar que lo que carga sea correcto ya que puede pasar, que si bien corrige la cultura, que sea ej: 06/08/2019 23:07

    En tal caso evalúa  tomar el Text  (dtFecha.Text)

    Provoca un Messenger.Show para verificar el resultado

    Saludos

    Edito: Disculpas


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗



    • Editado Marcelo PF miércoles, 7 de agosto de 2019 2:18
    • Marcado como respuesta PoetaMaldito miércoles, 7 de agosto de 2019 4:18
    miércoles, 7 de agosto de 2019 2:09
  • efectivamente ejecuto todo () desde un boton

    te comento que ya logre que me mostrara los datos que requiero pero el problema ahora radica en que no me los filtra segun el intervalo de fechas que ponga en los dtp 

    el codigo quedo asi:

    Private Sub todo()
    
            Dim DatD = dtfecha1.Value.ToString("dd/MM/yyyy")
            Dim DatH  = dtfecha2.Value.ToString("dd/MM/yyyy")
            adaptador = New OleDb.OleDbDataAdapter("SELECT * FROM Movimientos WHERE Fecha BETWEEN#" & DatD & " #AND# " & DatH & " #AND Clave = '" & txt_consulta.Text & "'", conexion.conexion)
            tabla = New DataTable

    yo tengo registros del dia 27/07/2019 y un registro del 06/08/2019 el problema ahora es que si yo pongo los dtp del 01/08/2019 al 31/08/2019 me manda todos los registros desde el 27/07/2019

    que tengo que modificar para que si yo selecciono los dias del 01/08/2019 al 31/08/2019 me muestre solo el registro que tengo con la fecha 06/08/2019

    • Marcado como respuesta PoetaMaldito miércoles, 7 de agosto de 2019 4:18
    miércoles, 7 de agosto de 2019 3:46

Todas las respuestas

  • Hola poeta, has probado con To.String ej

    Dim Dat As Date = DateTimePicker1.Value.ToString("dd/MM/yyyy")

    Al caso uno para Desde y otro para Hasta

    Saludos esper te ayude


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    martes, 6 de agosto de 2019 7:16
  • Hola Marcelo Gracias por Contestar, No aun no lo pruebo, esta Dim en que parte del codigo tendria que ponerla?
    miércoles, 7 de agosto de 2019 1:58
  • Hola Poeta,  al principio de la función, uno para cada datetimePicker y en la consulta colocas las variables en vez del dtFecha

     

    Private Sub todo() Dim DatD As Date = dtFecha.value.ToString("dd/MM/yyyy") Dim DatH As Date = dtFecha2.Value.ToString("dd/MM/yyyy") adaptador = New OleDb.OleDbDataAdapter("SELECT * FROM Movimientos WHERE Fecha BETWEEN#" & DatD.Value & " #AND# " & DatH.Value & " #AND Clave = '" & txt_consulta.Text & "'", conexion.conexion) tabla = New DataTable

    ..................

    Lo escribí a mano alzada, controla errores

     Por otra parte trada de verificar que lo que carga sea correcto ya que puede pasar, que si bien corrige la cultura, que sea ej: 06/08/2019 23:07

    En tal caso evalúa  tomar el Text  (dtFecha.Text)

    Provoca un Messenger.Show para verificar el resultado

    Saludos

    Edito: Disculpas


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗



    • Editado Marcelo PF miércoles, 7 de agosto de 2019 2:18
    • Marcado como respuesta PoetaMaldito miércoles, 7 de agosto de 2019 4:18
    miércoles, 7 de agosto de 2019 2:09
  • Hola Marcelo, ya intente con ambos ejemplos que me compartiste pero al momoento de iniciar el depurador paso por paso me percato que la Dim DatD me agrega el valor de Hora en ves de fecha y ninguno de los ejemplos me ha sido util no se que es lo que este haciendo mal, ahora para lo de evaluar con el text, sinceramente no se como realizarlo soy bastante nuevo en esto de la programacion

    Edito

    Tambien me indica que la propiedad value no es miembro de Date

    miércoles, 7 de agosto de 2019 2:23
  • No hay problema, verifica en las propiedades de los DateTImePicker en Format este seleccionado Short

    en cuanto a la sentencia quita los Value a los Dat..  mi error

    imagen de las dos fechas en un msgbox

     adaptador = New OleDb.OleDbDataAdapter("SELECT * FROM Movimientos WHERE Fecha BETWEEN#" & DatD & " #AND# " & DatH & " #AND Clave = '" & txt_consulta.Text & "'", conexion.conexion)


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗


    • Editado Marcelo PF miércoles, 7 de agosto de 2019 2:38
    miércoles, 7 de agosto de 2019 2:36

  • ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    miércoles, 7 de agosto de 2019 2:55
  • te comento 

    al iniciar el Form este es el valor que toma las variables DatD y DatH antes de realizar cualquier cosa

    #12:00:00 AM# 

    y ese valor se mantiene no se por que 

    en verdad ya estoy muy frustrado jejeje no se que alternativas me puedas dar 

    

    miércoles, 7 de agosto de 2019 2:58
  • Tranquilo jeje tus dolores de cabeza recién empiezan...

    dime donde ejecutas todo() si es en el Load del formulario no estaría bien pues siempre te tomará la fecha y el formato por defecto debería ser en um button, asi poder mofificar las fechas para la busqueda. Algo nos está faltando porque la lógica sería que según el pedido modificar las fechas para buscar en la BD no es así?


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    miércoles, 7 de agosto de 2019 3:09
  • efectivamente ejecuto todo () desde un boton

    te comento que ya logre que me mostrara los datos que requiero pero el problema ahora radica en que no me los filtra segun el intervalo de fechas que ponga en los dtp 

    el codigo quedo asi:

    Private Sub todo()
    
            Dim DatD = dtfecha1.Value.ToString("dd/MM/yyyy")
            Dim DatH  = dtfecha2.Value.ToString("dd/MM/yyyy")
            adaptador = New OleDb.OleDbDataAdapter("SELECT * FROM Movimientos WHERE Fecha BETWEEN#" & DatD & " #AND# " & DatH & " #AND Clave = '" & txt_consulta.Text & "'", conexion.conexion)
            tabla = New DataTable

    yo tengo registros del dia 27/07/2019 y un registro del 06/08/2019 el problema ahora es que si yo pongo los dtp del 01/08/2019 al 31/08/2019 me manda todos los registros desde el 27/07/2019

    que tengo que modificar para que si yo selecciono los dias del 01/08/2019 al 31/08/2019 me muestre solo el registro que tengo con la fecha 06/08/2019

    • Marcado como respuesta PoetaMaldito miércoles, 7 de agosto de 2019 4:18
    miércoles, 7 de agosto de 2019 3:46
  • Bueno pero las fechas quedaron correctas? Estoy mirando la sentencia no se sí está bien And ... And ... Pero te propongo que efectues otra pregunta para este caso para que los demás (y más capacitados en SQL) puedan acceder a responderte, eso si las fechas quedaron correctas

    Sigo estudiando la Sentencia

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗


    • Editado Marcelo PF miércoles, 7 de agosto de 2019 4:26
    miércoles, 7 de agosto de 2019 4:15
  • Muchas Gracias Marcelo, en efecto las fechas quedaron Correctas, de antemano muchas gracias por el momento jugare un poco con el codigo que tengo para ver de que modo puedo modificar la sentencia de buscar y si no lo logro ya mañana realizare una pregunta nueva, en verdad Muchas gracias por tu tiempo y sobre todo tu paciencia infinita 
    miércoles, 7 de agosto de 2019 4:21
  • De nada amigo, me quede pensando, para probar la búsqueda, quita la parte de la Clave de la senencia, si la busqueda funciona debería traerte todo lo que tenga ese  el rango de fecha, se ser así la parte errada seria la Clave

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    miércoles, 7 de agosto de 2019 4:39
  • Hola Marcelo Buena noche, te comento que al realizar pruebas me di cuenta que no funciona como debe de ser ya que para que funcione en el dtfecha1 debo poner la fecha 14/08/2019 y en el dtfecha2 la fecha actual para que me traiga todos los registros que coincidan con el textbox Clave 

    popr otro lado quite la parte de clave y tengo que hacer lo mismo que comente arriba, no se que esta pasando o que esta mal en mi codigo 

    jueves, 8 de agosto de 2019 3:47
  • Hola Poeta, lo que asumo que te debe estár pasando es que la comparación la hace en stirng por tanto verifica caracter por caracter ej si fuera 01/01/2008 contra 14/08/ 2009 pondría la comprobación con la segunda fecha primero, esto es lo que supongo, no puede comprobar tu sentencia. Puedes probar pasando a date la columna encuestión. Por otra parte has coloca una nueva pregunta en el foro para verificar esa sentencia, aquí hay gente  de nivel catedratico que te puede ayudar en SQL, ni lo dudes je

    Saludos y a disposición


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    jueves, 8 de agosto de 2019 22:46