Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Buscar importes entre fechas

Estas en el tema de Buscar importes entre fechas en el foro de Visual Basic clásico en Foros del Web. Hola Tengo un formulario donde ingreso dos años, un año dese y un año hasta. Realizo una consulta para determinar la suma de importes entre ...
  #1 (permalink)  
Antiguo 29/08/2014, 08:45
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Buscar importes entre fechas

Hola

Tengo un formulario donde ingreso dos años, un año dese y un año hasta. Realizo una consulta para determinar la suma de importes entre estos años , pero me da un error que dice:
Mysql ODBC 5.1 Driver You have an error in your SQl sintax...
Quisera que me ayuden a encontrar el error.

El codigo de la consulta es la siguiente:
Cita:
Editado: Código de programación no permitido en foros de BDD.
Código SQL:
Ver original
  1. SELECT SUM(cld_pag)AS tot_ing,DATE_FORMAT(cld_fpa,'dd-mm-yyyy')AS fec
  2. FROM clidet WHERE fec BETWEEN" & fechade & "AND" & fechaha
Gracias.

Última edición por gnzsoloyo; 29/08/2014 a las 09:09
  #2 (permalink)  
Antiguo 29/08/2014, 09:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Buscar importes entre fechas

Lo que tienes es una muy mala construccion de la query a nivel programación.
Debes tener en cuenta que cuando creas una consulta que embeberás por meido de un lenguaje, la query a nivel SQL debe quedar correctamente escrita para que el DBMS la pueda interpretar.
El 99% de las veces que ocurre un error como el indicado es porque arman mal el string de la query...

Veqamos:
Si tenemos dos fechas dadas, como 13/08/2014 y 26/08/2014, por ejemplo, la query debe quedar escrita así:
Código MySQL:
Ver original
  1.     SUM(cld_pag) tot_ing,
  2.     DATE_FORMAT(cld_fpa,'dd-mm-yyyy') fec
  3. FROM clidet
  4. WHERE fec BETWEEN '2014-08-13' AND '2014-08-26'
Es importante que las fechas queden entre apostrofos, o de lo contrario no funcionará la conversión implicita de MyQSL.

¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/08/2014, 08:29
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Buscar importes entre fechas

Cita:
Si tenemos dos fechas dadas, como 13/08/2014 y 26/08/2014, por ejemplo, la query debe quedar escrita así:
Código MySQL:

Ver original

SELECT
SUM(cld_pag) tot_ing,
DATE_FORMAT(cld_fpa,'dd-mm-yyyy') fec
FROM clidet
WHERE fec BETWEEN '2014-08-13' AND '2014-08-26'

Es importante que las fechas queden entre apostrofos, o de lo contrario no funcionará la conversión implicita de MyQSL.
Esta consultas con fechas constantes como lo colocás yo ya lo hice y me salio muy bien. Mi problema es cuando la fechas(o los años como esta en mi programa) son variables. Yo realizo el programa para que el usuario ingrese los años(años desde y años hasta )desde dos cajas de texto(visual basic) y esos años pueden cambiar dependiendo desde que intervalos de años quiere el usuario consultar los pagos que realizo.

Esa parte del código donde se ven que los años son variables y luego armo las fechas con esos años lo sacaron por no pertener al foro de mysql.

Pero resumiendo mi problema es cuando las fechas son variables y no constantes. En ese puento es donde quiero solucionar mi problema.

Gracias.
  #4 (permalink)  
Antiguo 30/08/2014, 09:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Buscar importes entre fechas

Cita:
Pero resumiendo mi problema es cuando las fechas son variables y no constantes.
Mi estimado... Cuando las fechas son "variables" como dices, lo que haces es construir la sentencia SQL transformando dinámicamente el contenido de las variables en cadenas de texto dentro de la query.
Es eso, o se las pasas al controlador de ODBC como parámetros de tipo DateTime, para que sea el conector de ODBC el que resuelva ese punto.
En cualquier caso sigue siendo un error de programación, no de MySQL.

¿Con qué lenguaje estás trabajando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/08/2014, 10:49
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Buscar importes entre fechas

Cita:
¿Con qué lenguaje estás trabajando?
Visual basic 6

Cita:
Mi estimado... Cuando las fechas son "variables" como dices, lo que haces es construir la sentencia SQL transformando dinámicamente el contenido de las variables en cadenas de texto dentro de la query.
Estimado muestreme el còdigo como serìa.

Gracias.
  #6 (permalink)  
Antiguo 30/08/2014, 11:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Buscar importes entre fechas

Movido al foro correspondiente.

Postea el código completo de do de creas y ejecutas la consulta. Será más fácil si se puede ver el contexto completo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 04/09/2014, 20:01
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Buscar importes entre fechas

Este es el còdigo que tengo:
Cita:
i=2
ca = CLng(txtañod.Text)
Do While ca <= CLng(txtañoh.Text)

'Creo una fecha como cadena
fechade = ca & "-" & 1 & "-" & 1
fechaha = ca & "-" & 12 & "-" & 31


'consulta

adoingresos.RecordSource = "select sum(cld_pag)as tot_ing from clidet where cld_fpa between 'fechade' AND 'fechaha'"
adoingresos.Refresh

If IsNull(adoingresos.Recordset.Fields("tot_ing")) = True Then
v(i) = 0
Else
v(i) = adoingresos.Recordset.Fields("tot_ing")
v2(i) = ca
End If
ca = ca + 1
i = i + 1
Loop

Etiquetas: mysql, select, sql
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 00:22.