|
| Autor |
Mensaje |
Baldomero Usuario Iniciado
Registrado: 24 Oct 2011 Mensajes: 15
|
Publicado: Dom 22 Ene, 2012 21:15 pm
Título del mensaje: Filtrar una tabla por fechas |
|
|
Buenas noches.
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. |
|
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 2084 Ubicación: y*width+x
|
|
| Volver arriba |
|
|
Baldomero Usuario Iniciado
Registrado: 24 Oct 2011 Mensajes: 15
|
Publicado: Lun 23 Ene, 2012 15:26 pm
Título del mensaje: Re: Filtrar una tabla por fechas |
|
|
Gracias por tu respuesta. Muy agudo de lo "vamos haber" o "vamos a ver", yo añadiría: "bamos haber", je.
Tengo varios errores;
1) "Replace" no es un miembro de System.Windows.TextBox. La verdad es que como las fechas no las entro en MaskedTextBox sino en TextBox, no le veo mucha razón a cambiar "/" por "-" mediante código.
2) "fecha" no está declarado (??). Pero es un campo de la tabla en que estamos. Si entro tabla.fecha tampoco lo reconoce.
3) En cuanto a las uniones de cadenas, vengo de VB6.0 donde así se hacían y tampoco he recibido mensajes de error. De hecho con tu mensaje es la primera vez que veo el "+" para unir, en fin si me funcionara todo... aunque sea con pegamento.
De todos modos muchas gracias por tu ayuda. |
|
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 2084 Ubicación: y*width+x
|
Publicado: Lun 23 Ene, 2012 15:49 pm
Título del mensaje: Re: Filtrar una tabla por fechas |
|
|
| Baldomero escribió: | 1) "Replace" no es un miembro de System.Windows.TextBox. La verdad es que como las fechas no las entro en MaskedTextBox sino en TextBox, no le veo mucha razón a cambiar "/" por "-" mediante código.
|
Mea culpa (no es que me haga pis sobre mi culpa) , tienes razón, es que ando trabajando y no he tenido mucho tiempo para tu problema. Me comí el Text. Por lo que debería quedar así.
| Código: | TextBox1.Text.Replace("/","-")
TextBox2.Text.Replace("/","-")
|
Porque Replace es un miebro de String, como te indicaba el mensaje de error. Y el miebro Text de TextBox es un String que almacena la cadena.
| Baldomero escribió: | 2) "fecha" no está declarado (??). Pero es un campo de la tabla en que estamos. Si entro tabla.fecha tampoco lo reconoce.
|
Como decimos en mi tierra; "AAAAAAmigo!!!" Entonces lo dejamos casi como estaba.
| Código: | TextBox1.Text.Replace("/","-")
TextBox2.Text.Replace("/","-")
sql="SELECT ... WHERE fecha >= "+TextBox1.Text"+" AND fecha <= "+TextBox2.Text
|
Ahora, si no te funciona la sentencia... sabes lo que te comenté antes. Pero si tengo tiempo investigaré la sentencia, aunque si te soy sincero tengo trabajo hasta la noche y lo me quiero quietar YAAAAA !!!!
PD. Si, creo que en VB se usaba el "&" el "espermasan"  |
http://www.youtube.com/watch?v=-lT1zCukNQY
|
|
| Volver arriba |
|
|
Baldomero Usuario Iniciado
Registrado: 24 Oct 2011 Mensajes: 15
|
Publicado: Lun 23 Ene, 2012 18:52 pm
Título del mensaje: Re: Filtrar una tabla por fechas |
|
|
Muchas gracias por tu tiempo. He estado dándole al coco y finalmente me rula. 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
| Código: | 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() |
|
|
|
|
| Volver arriba |
|
|
WhiteSkull Moderador Global

Registrado: 20 Mar 2009 Mensajes: 2084 Ubicación: y*width+x
|
|
| Volver arriba |
|
|