Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Filtrar una tabla por fechas

Estas en el tema de Filtrar una tabla por fechas en el foro de Bases de Datos General en Foros del Web. Tengo una BD Access y una tabla con un campo "fecha" de tipo Fecha/hora; fecha corta, 00/00/0000. Estoy haciendo una aplicación para VB 2010. Quiero ...
  #1 (permalink)  
Antiguo 22/01/2012, 13:11
 
Fecha de Ingreso: febrero-2011
Mensajes: 29
Antigüedad: 13 años, 2 meses
Puntos: 0
Filtrar una tabla por fechas

Tengo una BD Access y una tabla con un campo "fecha" de tipo Fecha/hora; fecha corta, 00/00/0000. Estoy haciendo una aplicación para VB 2010.
Quiero ejecutar una orden SQL para seleccionar los registros con "fecha" entre dos límites que entro en dos TextBox. Es decir, teclear
sql = "SELECT ... WHERE fecha >= TextBox1.Text AND fecha <= TextBox2.Text".
He hecho infinidad de formas para conseguir que me funcione, por ejemplo poner en vez de TextBox MaskedTextBox, y nada; también he puesto Format(TextBox1.text, "dd-mm-yyyy") y me contesta que la cadena "31/12/2011" no la puede convertir a Date. Otra curiosidad es que donde me da el error aparece como sí aceptada esta fecha (31/12/2011) mientras que si pongo en TextBox1.Text "01/01/2011" me sale el campo vacío. Por supuesto he hecho las mil combinaciones con los paréntesis, sin obtener errores en tiempo de diseño; de todas maneras no me hace el filtrado. En los libros que tengo no me soluciona esta cuestión y en la red unas soluciones son para VB6.0, otras para C#, etc., pero que me cuadre, ninguna. He intentado también con el wizard de VB2010 pero también me da errores.
¿Me podéis ayudar? Gracias.
  #2 (permalink)  
Antiguo 23/01/2012, 02:59
 
Fecha de Ingreso: julio-2006
Ubicación: Madrid
Mensajes: 943
Antigüedad: 17 años, 9 meses
Puntos: 56
Respuesta: Filtrar una tabla por fechas

Hola,

Yo creo que debe ser más o menos así:

sql = "SELECT ... WHERE fecha >= " & TextBox1.Value & " AND fecha <= " & TextBox2.Value

O cuando menos deben ir por ahí los tiros.

Saludos
  #3 (permalink)  
Antiguo 23/01/2012, 03:45
 
Fecha de Ingreso: febrero-2011
Mensajes: 29
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Filtrar una tabla por fechas

Cita:
Iniciado por jchuk Ver Mensaje
Hola,

Yo creo que debe ser más o menos así:

sql = "SELECT ... WHERE fecha >= " & TextBox1.Value & " AND fecha <= " & TextBox2.Value

O cuando menos deben ir por ahí los tiros.

Saludos
Gracias por tu respuesta. Me da el error:
'Value' no es un miembro de 'System.Windows.Forms.TextBox'.
Por si acaso esa "rareza" de que parezca como aceptada 31/12/2011 y no aparezca como aceptada 02/01/2011 se debiera a algún formato interno que fuera yyyy/mm/dd y no dd/mm/yyyy, he dado también este formato (yyyy/mm/dd) aunque no coincida con el del campo y sigo obteniendo errores. Como digo, he hecho las distintas variaciones, combinaciones y permutaciones (je).
Para mayor información aquí copio las opciones que he presentado y los errores que me da:
'query = "SELECT COUNT(*) FROM Rendimiento WHERE fecha >= '" & CDate(Format(TextBox3.Text, "yyyy/mm/dd")) & " ' AND fecha <= '" & CDate(Format(TextBox4.Text, "yyyy/mm/dd")) & " ' & and titular = '" & titu & "' and clase = 'Acciones'"
'La conversión de la cadena "dd-mm-yyyy" en Date no es válida
'query = "SELECT COUNT(*) FROM Rendimiento WHERE fecha >=#" & Format(MaskedTextBox1, "yyyy/mm/dd") & "# AND fecha <=#" & Format(MaskedTextBox2, "yyyy/mm/dd") & "# AND titular = '" & titu & "' AND clase = 'Acciones'"
'No se puede convertir un objeto de tipo Windows...MaskedTextBox en IConvert
query = "SELECT COUNT(*) FROM Rendimiento WHERE fecha >= " & TextBox1.Value & " AND fecha <= " & TextBox2.Value & " &"
''Value' no es un miembro de 'System.Windows.Forms.TextBox'
Seguiremos con el tema. Gracias.

Última edición por amg39; 23/01/2012 a las 03:54
  #4 (permalink)  
Antiguo 23/01/2012, 04:53
 
Fecha de Ingreso: febrero-2011
Mensajes: 29
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Filtrar una tabla por fechas

Me has dado una pista excelente. Muchas gracias. Es así:

query = "SELECT COUNT(*) FROM Rendimiento WHERE fecha >= " & DateValue(TextBox2.Text) & " AND fecha <= " & DateValue(TextBox4.Text) & " AND titular = '" & titu & "' AND clase = 'Acciones'"
'
  #5 (permalink)  
Antiguo 23/01/2012, 11:17
 
Fecha de Ingreso: febrero-2011
Mensajes: 29
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Filtrar una tabla por fechas

Muchas gracias por tu tiempo. He estado dándole al coco y finalmente me rula sin problemas con alguna modificación. Por si es de utilidad a alguien tan ignorante como yo, aquí copio el código que será una simpleza, pero después del tiempo que me ha llevado es como si el Real Madrid ganara al Barça en el Bernabéu (perdón a los madridistas).
Me queda como cosa que entenderé cuando sea mayor (sólo tengo 73 años) por qué en SUM y COUNT(*) el AS no me sirve para nada y tengo siempre que ir al ds.Tables().Rows(0).Item(0) para conocer el resultado. No es un trabajo, pero sí una curiosidad porque en todos los libros dice que debería funcionar. Muchas gracias.
El objetivo del código es filtrar (contar en este caso) los registros entre dos fechas de un campo entradas en dos TextBox

Dim con As OleDbConnection = New OleDbConnection
Dim Expr1 As Integer
Dim DateBegin, DateEnd As Date
con.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=c:\Users\Mis documentos\bd4.mdb"
DateBegin = DateValue(TextBox2.Text)
DateEnd = DateValue(TextBox4.Text)
query5 = "SELECT COUNT (*) As Expr1 FROM rendimiento WHERE (fecha >= #" & DateBegin & "# AND fecha <= #" & DateEnd & "# AND titular = '" & titu & "' AND clase = 'Acciones')"

MsgBox("1 Expr1 " & Expr1) ' Da mal resultado
Dim da5 As New OleDbDataAdapter(query5, con)
Dim ds5 As New DataSet
da5.Fill(ds5, "cuacc")
cuantasacc = ds5.Tables("cuacc").Rows(0).Item(0)
MsgBox(" 2 Cuantos dividendos " & cuantasacc) ' Da buen resultado
con.Close()

Etiquetas: access
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:34.