Duda con Consulta SQL

19/04/2010 - 21:33 por gustavo gutierrez morales | Informe spam
Buenas tardes a todos:

Tengo dos tablas de access: Cuentas y Movimientos, con relación uno a
muchos. El problema es que quiero actualizar un campo de la tabla de cuentas
con el total de dos campos de la tabla de movimientos, siempre y cuando un
campo de fecha de la tabla de movimientos contenga un valor anterior a
cierta fecha. Para esto, hago así:

cnConn.Execute ("UPDATE Cuentas, Movimientos SET Cuentas.Salini" & _
" = Cuentas.Salini + Movimientos.Ingreso -
Movimientos.Egreso " & _
"Where Movimientos.Cuenta = Cuentas.Clave and
Movimientos.Fecha < #" & Format(datFein, "dd/mm/yyyy") & "#")

Con esta instrucción no me actualiza el valor del campo salini. si le quito
la parte de la fecha ya lo hace, pero obviemente usando todos los valores de
la tabla de movimientos. La pregunta es ¿Por qué no puedo seleccionar los
movimientos de antes de la fecha limite?

Les agradezco de antemano su valiosa ayuda.

gustavo gutierrez morales

Preguntas similare

Leer las respuestas

#1 Saga
19/04/2010 - 22:23 | Informe spam
No se si esto sea tu problema, pero estas formateando la fecha
incorrectamente:

No:
Movimientos.Fecha < #" & Format(datFein, "dd/mm/yyyy") & "#")



Debes usar el formato mm/dd/yyyy:
Movimientos.Fecha < #" & Format$(datFein, "mm/dd/yyyy") & "#")



Saludos, Saga


"gustavo gutierrez morales" wrote in
message news:%23fsJBd$
Buenas tardes a todos:

Tengo dos tablas de access: Cuentas y Movimientos, con relación uno a
muchos. El problema es que quiero actualizar un campo de la tabla de
cuentas con el total de dos campos de la tabla de movimientos, siempre y
cuando un campo de fecha de la tabla de movimientos contenga un valor
anterior a cierta fecha. Para esto, hago así:

cnConn.Execute ("UPDATE Cuentas, Movimientos SET Cuentas.Salini" & _
" = Cuentas.Salini + Movimientos.Ingreso -
Movimientos.Egreso " & _
"Where Movimientos.Cuenta = Cuentas.Clave and
Movimientos.Fecha < #" & Format(datFein, "dd/mm/yyyy") & "#")

Con esta instrucción no me actualiza el valor del campo salini. si le
quito la parte de la fecha ya lo hace, pero obviemente usando todos los
valores de la tabla de movimientos. La pregunta es ¿Por qué no puedo
seleccionar los movimientos de antes de la fecha limite?

Les agradezco de antemano su valiosa ayuda.

gustavo gutierrez morales



Respuesta Responder a este mensaje
#2 gustavo gutierrez morales
19/04/2010 - 22:39 | Informe spam
Gracias!. eso era el problema.
Parece que nunca acabo de enredarme con los formatos de fecha.
Muchas gracias, Saga!

"Saga" escribió en el mensaje
news:eaFk94$

No se si esto sea tu problema, pero estas formateando la fecha
incorrectamente:

No:
Movimientos.Fecha < #" & Format(datFein, "dd/mm/yyyy") & "#")



Debes usar el formato mm/dd/yyyy:
Movimientos.Fecha < #" & Format$(datFein, "mm/dd/yyyy") & "#")



Saludos, Saga


"gustavo gutierrez morales" wrote
in message news:%23fsJBd$
Buenas tardes a todos:

Tengo dos tablas de access: Cuentas y Movimientos, con relación uno a
muchos. El problema es que quiero actualizar un campo de la tabla de
cuentas con el total de dos campos de la tabla de movimientos, siempre y
cuando un campo de fecha de la tabla de movimientos contenga un valor
anterior a cierta fecha. Para esto, hago así:

cnConn.Execute ("UPDATE Cuentas, Movimientos SET Cuentas.Salini" & _
" = Cuentas.Salini + Movimientos.Ingreso -
Movimientos.Egreso " & _
"Where Movimientos.Cuenta = Cuentas.Clave and
Movimientos.Fecha < #" & Format(datFein, "dd/mm/yyyy") & "#")

Con esta instrucción no me actualiza el valor del campo salini. si le
quito la parte de la fecha ya lo hace, pero obviemente usando todos los
valores de la tabla de movimientos. La pregunta es ¿Por qué no puedo
seleccionar los movimientos de antes de la fecha limite?

Les agradezco de antemano su valiosa ayuda.

gustavo gutierrez morales







Respuesta Responder a este mensaje
#3 Waldo
20/04/2010 - 17:03 | Informe spam
Hola, ya lo hablamos varias veces, yo prefiero usar "yyyy/mm/dd" ese
formato no falla nunca, el motor sabe que siempre atras del año viene el
mes.
Usando dd/mm/yyyy o mm/dd/yyyy, segun la configuracion regional o
instalacion del servidor puede fallar.

Saludos

Waldo
Respuesta Responder a este mensaje
#4 Victor Koch
20/04/2010 - 18:11 | Informe spam
Hola

La configuración regional no tiene nada que ver con el formato en que espera
recibir la base de datos.
Cuando se envía el SQL a la base de datos esta recibe un string tal cual lo
escribimos, por ejemplo:

UPDATE MiTabla SET MiFecha='xxxxxxxx'

En ese string que se envía no se lo asocia con la configuración regional ni
nada que se le parezca. Así que cuando el motor desarma el string sabe que
debe actualizar el campo fecha con el valor 'xxxxxxxx' y ese valor debe
venir con el formato que el motor espera recibir, para el caso de MSAccess
el formato es mm/dd/yyyy, formato yanqui, y encerrado entre almohadillas
(#).

Las almohadillas le dicen al motor que la fecha viene en "notación humana",
es decir de la forma dd/mm/yyyy. Lo que intenta hacer el motor es fijarse si
las posiciones 1 y 2 son mayores a 0 y menores a 13, si esas posiciones son
mayores a 12, por ejemplo 15 y las posiciones 4 y 5 son menores a 12
entonces supone que el formato en que viene la fecha es dd/mm/yyyy.

Este es el motivo por el cual algunos programadores hacen esta consulta al
grupo:

Tengo problemas cuando quiero guardar campos fecha en Access, cuando el día
es mayor a 12 lo hace bien pero cuando el día es menor a 12 lo guarda al
revés, el SQL es el siguiente:

SQL= "UPDATE MiTabla SET MiFecha=#" & format(fecha,"dd/mm/yyyy") & "#"

La configuración regional la tengo bien, ¿ no será un error de Access o de
VB6 ?

Veamos un ejemplo para la fecha 15 de Marzo de 2010, el SQL quedaría:

SQL= "UPDATE MiTabla SET MiFecha=#15/03/2010#"

Aclaro que el motor espera recibir 03/15/2010 (mm/dd/yyyy), toma el mes para
este caso seria 15, toma el día 03, como el mes no puede ser mayor a 12 y el
día es 03 entonces supone que recibió la fecha en el formato dd/mm/yyyy,
deduce que 15 es el día y 03 el mes, el Jet esta en lo cierto !!!!.

Veamos otro ejemplo para la fecha 06 de Marzo de 2010, el SQL quedaría:

SQL= "UPDATE MiTabla SET MiFecha=#06/03/2010#"

Devuelta aclaro que el motor espera recibir 03/06/2010 (mm/dd/yyyy), toma el
mes para este caso seria 06, toma el día 03, ambos datos son lógicos, el mes
no es mayor a 12 y el día tampoco en mayor a 12 entonces asume que la fecha
vino en el formato Standard que el motor espera recibir (mm/dd/yyyy) con lo
cual asume que 06 es el mes y 03 es el día, que nos hizo MSAccess ??, nos
invirtió el día y el mes, o mejor dicho el programador le invirtió el día y
el mes al pobre Jet de MSAccess.

Un Saludo, Víctor Koch



"Waldo" <[waldodj2000] a r r o b a [yahoo Punto com Punto ar]> escribió en
el mensaje news:
Hola, ya lo hablamos varias veces, yo prefiero usar "yyyy/mm/dd" ese
formato no falla nunca, el motor sabe que siempre atras del año viene el
mes.
Usando dd/mm/yyyy o mm/dd/yyyy, segun la configuracion regional o
instalacion del servidor puede fallar.

Saludos

Waldo


Respuesta Responder a este mensaje
#5 Victor Koch
20/04/2010 - 18:16 | Informe spam
Hola

La configuración regional no tiene nada que ver con el formato en que espera
recibir la base de datos.
Cuando se envía el SQL a la base de datos esta recibe un string tal cual lo
escribimos, por ejemplo:

UPDATE MiTabla SET MiFecha='xxxxxxxx'

En ese string que se envía no se lo asocia con la configuración regional ni
nada que se le parezca. Así que cuando el motor desarma el string sabe que
debe actualizar el campo fecha con el valor 'xxxxxxxx' y ese valor debe
venir con el formato que el motor espera recibir, para el caso de MSAccess
el formato es mm/dd/yyyy, formato yanqui, y encerrado entre almohadillas
(#).

Las almohadillas le dicen al motor que la fecha viene en "notación humana",
es decir de la forma dd/mm/yyyy. Lo que intenta hacer el motor es fijarse si
las posiciones 1 y 2 son mayores a 0 y menores a 13, si esas posiciones son
mayores a 12, por ejemplo 15 y las posiciones 4 y 5 son menores a 12
entonces supone que el formato en que viene la fecha es dd/mm/yyyy.

Este es el motivo por el cual algunos programadores hacen esta consulta al
grupo:

Tengo problemas cuando quiero guardar campos fecha en Access, cuando el día
es mayor a 12 lo hace bien pero cuando el día es menor a 12 lo guarda al
revés, el SQL es el siguiente:

SQL= "UPDATE MiTabla SET MiFecha=#" & format(fecha,"dd/mm/yyyy") & "#"

La configuración regional la tengo bien, ¿ no será un error de Access o de
VB6 ?

Veamos un ejemplo para la fecha 15 de Marzo de 2010, el SQL quedaría:

SQL= "UPDATE MiTabla SET MiFecha=#15/03/2010#"

Aclaro que el motor espera recibir 03/15/2010 (mm/dd/yyyy), toma el mes para
este caso seria 15, toma el día 03, como el mes no puede ser mayor a 12 y el
día es 03 entonces supone que recibió la fecha en el formato dd/mm/yyyy,
deduce que 15 es el día y 03 el mes, el Jet esta en lo cierto !!!!.

Veamos otro ejemplo para la fecha 06 de Marzo de 2010, el SQL quedaría:

SQL= "UPDATE MiTabla SET MiFecha=#06/03/2010#"

Devuelta aclaro que el motor espera recibir 03/06/2010 (mm/dd/yyyy), toma el
mes para este caso seria 06, toma el día 03, ambos datos son lógicos, el mes
no es mayor a 12 y el día tampoco en mayor a 12 entonces asume que la fecha
vino en el formato Standard que el motor espera recibir (mm/dd/yyyy) con lo
cual asume que 06 es el mes y 03 es el día, que nos hizo MSAccess ??, nos
invirtió el día y el mes, o mejor dicho el programador le invirtió el día y
el mes al pobre Jet de MSAccess.

Un Saludo, Víctor Koch



"Waldo" <[waldodj2000] a r r o b a [yahoo Punto com Punto ar]> escribió en
el mensaje news:
Hola, ya lo hablamos varias veces, yo prefiero usar "yyyy/mm/dd" ese
formato no falla nunca, el motor sabe que siempre atras del año viene el
mes.
Usando dd/mm/yyyy o mm/dd/yyyy, segun la configuracion regional o
instalacion del servidor puede fallar.

Saludos

Waldo


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida