Access - consulta dsum

 
Vista:
sin imagen de perfil
Val: 32
Ha aumentado su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

consulta dsum

Publicado por Didac (27 intervenciones) el 02/05/2017 14:41:14
Hola a todos de nuevo;

Alguien sabe por que en esta consulta de DSUM me da error?, lo que quiero hacer es sumar todos los errores con fecha de hoy

1
2
3
4
5
6
Private Sub Comando36_Click()
Dim contrechazo As String
 
contrechazo = DSum("[count]", "dbo_defectos", "[fecha]" = Now)
MsgBox contrechazo
End Sub

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

consulta dsum

Publicado por Anonimo (3316 intervenciones) el 02/05/2017 14:59:09
No creo que de error, lo mas probable es que no encuentre datos que coincidan en el dia + la hora + el minuto + el segundo, de cuando se ejecute la función.

Probablemente si en lugar de 'Now' se utiliza 'Date' (que no discrimina la parte horaria) se logre un resultado mas acorde con lo deseado.

Si el dato que aporta 'Fecha' tiene parte horaria, lo correcto seria escribir la condición asi:
..... dbo_defectos", "Int([fecha])" = Date)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 32
Ha aumentado su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

consulta dsum

Publicado por Didac (27 intervenciones) el 02/05/2017 15:05:31
no tiene parte horaria solo el dia en formato dd/mm/aaaa

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jesus
Val: 149
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

consulta dsum

Publicado por Jesus (54 intervenciones) el 02/05/2017 20:07:30
Tienes que usar el formato de fecha yanqui:

1
contrechazo = DSum("[count]", "dbo_defectos", "[fecha]" = Format(Now,"mm/dd/yyyy"))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta dsum

Publicado por Anonimo (3316 intervenciones) el 03/05/2017 00:38:15
Date representa a la parte entera de la fecha, es lo suficiente internacional para no precisar formato, utilizar NOW y aplicarle formato es complicar lo sencillo.

Aconsejar la utilización de INT con la fecha guardada, evitara problemas si en algún registro se utilizo NOW (aunque no se muestre la hora)

El uso de INT es optativo (incluso innecesario) si existe la plena seguridad de que esos registros carecen de parte horaria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 32
Ha aumentado su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

consulta dsum

Publicado por Didac (27 intervenciones) el 03/05/2017 14:18:39
Creo que el problema que tengo es la definicion de datos en el SQL, lo tenia como nchar, y tendria que ponerlo en date. Es correcto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta dsum

Publicado por Anonimo (3316 intervenciones) el 03/05/2017 15:32:17
Dejando a un lado la utilización de DATE (solo el dia) o de NOW (dia + hora) hay un error en esa expresión.
El error consiste en que el signo de igualdad ha de ir 'dentro' de las dobles comillas, dejando fuera solo el referente (personalmente utilizaría DATE, esto es el día actual sin parte horaria),

Quedaría algo así:

Original:
contrechazo = DSum("[count]", "dbo_defectos", "[fecha]" = Now)

Corregido:
contrechazo = DSum("[count]", "dbo_defectos", "[fecha] = " & Date)

Lo correcto (dado que la función DSum devolverá una cifra) es que la variable 'contrechazo' sea de tipo numérico (adecuado a los valores que pudiera haber en el campo 'Count' de la tabla).

La sentencia ideal (que evitaría posibles valores inadecuados por una utilización incorrecta de NOW en la toma de datos) seria esta:

contrechazo = DSum("[count]", "dbo_defectos", "Int([fecha]) = " & Date)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 32
Ha aumentado su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

consulta dsum

Publicado por Didac (27 intervenciones) el 03/05/2017 15:49:34
Tengo contrechazo declarado como integer y he probado con
1
contrechazo = DSum("[count]", "dbo_defectos", "Int([fecha]) = " & Date)
de esta manera me sale un error de SQL dice que los tipos de operandos: date es incompatible con float.

Mientras que si utilizo
1
contrechazo = DSum("[count]", "dbo_defectos", "[fecha] = " & Date)
me sale el error "uso no valido de null"

Alguna explicacion?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta dsum

Publicado por Anonimo (3316 intervenciones) el 03/05/2017 17:45:39
Lo que Access interprete tras las conversiones de tipos es muy libre, si tratamos los datos en su formato original evitaremos las conversiones inadecuadas.

Para Access las fechas son simples números, ello le permite presentarlas en cualquier formato (fechas cortas, largas, formato americano, europeo o japonés)
Diferencias entre DATE y NOW:

1
2
3
4
5
?Date,, Cdbl(date)
03/05/2017                   42858
 
?Now, Cdbl(now)
03/05/2017 17:29:02          42858,7284953704

Una (Date) devuelve un valor entero, la otra (Now) le añade la parte decimal que representa la fracción del dia

Como no nos interesa utilizar la parte horaria, en lugar de un numero doble ( CDbl ), utilizamos un entero ( Cnlg )
1
2
3
4
5
?date,, clng(date)
03/05/2017                   42858
 
?Now, clng(now)
03/05/2017 17:25:52          42859
Le aplicamos la función a ambos términos de la igualdad:
original:

1
contrechazo = DSum("[count]", "dbo_defectos", "[fecha] = " & Date)

Corregida:

1
contrechazo = DSum("[count]", "dbo_defectos", "CLng([fecha]) = " & CLng(Date))

Ya no aparecerán problemas de fechas sean estas con o sin horas, incluso esta es plenamente funcional:
1
contrechazo = DSum("[count]", "dbo_defectos", "CLng([fecha]) = " & CLng(Now))

Nota adicional:
Siempre se aconseja (en cualquier lenguaje de programación) no utilizar las palabras reservadas como nombres de los objetos, para evitar posibles errores de interpretación al evaluar las expresiones , count y fecha como nombres de campos (ambas pertenecen al grupo de palabras reservadas) incumplen esta recomendación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 32
Ha aumentado su posición en 8 puestos en Access (en relación al último mes)
Gráfica de Access

consulta dsum

Publicado por Didac (27 intervenciones) el 05/05/2017 09:35:59
Pues me sigue mostrando un mensaje de error diciendome que uso no valido de null. Nose????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar