| |  |  | Miembros: Mensajes: Temas: Online: Ultimo Miembro: | | |  | | |
 | 
12-03-2008, 18:30:58
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 170
| | Restar Fechas en MSHFlexGrid Hola que tal una pregunta que se que me van a responder.
1.- Tengo un MshFlexGrid donde cargo los registros de una base de datos en Access 2003 como se muestra en la imagen que adjunto.
2.- en la columna donde dice FALTAN, me tiene que poner TERMINADO
3.- Tomando como referencia las columnas donde dicen F. Inicia y F. Termina
4- Si se fijan en algunos si me los pone pero si se dan cuenta de acuerdo a la fecha del sistemas que en mi caso ahorita es
12-Maz-2008 pues es si el contrato todavia ni inicia y ya me lo puso como terminado.
5.- y en otros ya las fechas se cumplieron pero me los pone como -713 dias.
que estoy haciendo mal adjunto imagen y codigo para que me hechen la mano por favor... Código: Dim dif As Long
'/////Centrar la pantalla del formulario
Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
c = 1
FechaActual = Format(Date, "dd-MMM-yyyy")
Call IniciarConexion 'Iniciamos con la conexión a la base de datos
If rs.State = 1 Then rs.Close
rs.Open "SELECT * FROM contratos WHERE estado = 'ACTIVO'", cnn, adOpenStatic, adLockOptimistic
rs.Requery 1
Call MostrarContratosEventuales(GrillaMostrarContratos) 'Mostramos los registros
While rs.EOF = False
dif = DateDiff("d", FechaActual.Text, rs.Fields(5))
GrillaMostrarContratos.TextMatrix(c, 0) = c
GrillaMostrarContratos.TextMatrix(c, 8) = Str(rs.Fields(8)) + " Dias"
'GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) + " Dias"
'le damos formato a las celdas que se van a mostrar. como son las fechas y los sueldos
GrillaMostrarContratos.TextMatrix(c, 10) = Format(rs.Fields(10), "$ #,##0.00")
GrillaMostrarContratos.TextMatrix(c, 4) = Format(rs.Fields(4), "dd-MMM-yyyy")
GrillaMostrarContratos.TextMatrix(c, 5) = Format(rs.Fields(5), "dd-MMM-yyyy")
GrillaMostrarContratos.TextMatrix(c, 7) = Format(rs.Fields(7), "dd-MMM-yyyy")
If GrillaMostrarContratos.TextMatrix(c, 4) > GrillaMostrarContratos.TextMatrix(c, 5) And _
GrillaMostrarContratos.TextMatrix(c, 5) > FechaActual Then
GrillaMostrarContratos.TextMatrix(c, 9) = "TERMINO"
Else
GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) + " Dias"
End If
'If GrillaMostrarContratos.TextMatrix(c, 9) < Str(0) + " Dias" Then GrillaMostrarContratos.TextMatrix(c, 9) = "TERMINO"
If GrillaMostrarContratos.TextMatrix(c, 9) < FechaActual Then
GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) + " Dias"
End If
c = c + 1
rs.MoveNext
' End If
Wend
Nota: no muestro en la imagen adjunto todas las columnas porque no crei que fuera necesario pero si lo es la puedo subir completa.
gracias por lo pronto
__________________
El exito no es un milagro, es una Recopensa
| 
12-03-2008, 19:21:45
|  | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.308
| | Es difícil darte una respuesta correcta sin conocer el contenido y tipo de las variables que intervienen en este proceso:
dif = DateDiff("d", FechaActual.Text, rs.Fields(5))
En todo caso te aconsejo que para realizar operaciones con fechas, transformes los valores informados a tipo de fecha. Por ejemplo:
dif = DateDiff("d", dConv(FechaActual.Text), dConv(rs.Fields(5)))
El que seguro opera inadecuadamente es:
GrillaMostrarContratos.TextMatrix(c, 5) > FechaActual
pues ambos están en formato de texto y sin lugar a dudas 12/01/1900 siempre será mucho mayor que 30/12/2999 si lo comparas como cadena.
dConv(GrillaMostrarContratos.TextMatrix(c, 5)) > dConv(FechaActual) seguramente te funcionará mucho mejor. | 
12-03-2008, 19:31:51
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 170
| | Mi Estimado acalanto, el dConv me imagino que es una función para convertirlo a Fecha. pero como se usa estoy atrapado.
__________________
El exito no es un milagro, es una Recopensa
| 
12-03-2008, 21:08:58
|  | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.308
| | Me vas a perdonar, porque a veces me 'lio' con otras cosas que nada tienen que ver con VB6.
La función de conversión es CDate() y no dConv() como yo te ponía en el post anterior. | 
13-03-2008, 14:23:25
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 170
| | Ya lo prove igual y en los primeros tres registros me pone el signo - en vez de ponerme que ya se "TERMINO" el contrato y los demas registros si me pone los dias que le faltan y los que todavia no han empezado me los pone como "NO SE HA INICIADO", solo me falta resolver lo de los signos menos no se que estoy haciendo mal..
__________________
El exito no es un milagro, es una Recopensa
| 
13-03-2008, 15:36:41
|  | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.308
| | La verdad es que por lo evidente que resulta me ha costado un poco ver el lugar en el que se esconde el fallo, simplemente porque tal fallo no existe y los días te los está calculando correctísimamente bien.
Piensa...cuantos días pasan desde el 13 de marzo de 2008 al 31 de marzo del 2006 ???
Son negativos 714 días.... ¿no te parece? | 
13-03-2008, 16:39:40
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 170
| | claro y es evidente que el numero me lo va a dar en negativo solo que un numero negativo no me sirve en este caso, por eso opto por poner en la grilla la palabra "TERMINO", y no el numero negativo. solo que eso no logro ponerlo como dije anteriormente solamente los primeros tres registros me los pone como negativo y los demas si me esta respetando la palabra "TERMINO" y es donde estoy atorado. seguiremos intentando y si lo logro lo subire para cuando alguien tengal la misma necesidad que ahora tengo.
__________________
El exito no es un milagro, es una Recopensa
| 
13-03-2008, 17:50:29
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 170
| | Bien, por fin pude resolver mi problema me da las cosas exactamente como las queria y necesitama y quiero agradecer a Acalanto por sus comentarios y su participación y haberce tomado la molestia de atender a este post
bien la respuesta era lo siguiente: espero que le sirva a mas de uno.
anteriormente tenia esta linea que la puse como comentario Código: 'GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) + " Dias" cambiarla por esta otra Código: GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) tambien tenia esto anteriormente Código:
If GrillaMostrarContratos.TextMatrix(c, 4) > GrillaMostrarContratos.TextMatrix(c, 5) And _
GrillaMostrarContratos.TextMatrix(c, 5) > FechaActual Then
GrillaMostrarContratos.TextMatrix(c, 9) = "TERMINO"
Else
GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) + " Dias"
End If
'If GrillaMostrarContratos.TextMatrix(c, 9) < Str(0) + " Dias" Then GrillaMostrarContratos.TextMatrix(c, 9) = "TERMINO"
If GrillaMostrarContratos.TextMatrix(c, 9) < FechaActual Then
GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) + " Dias"
End If cambiarla por esta otra Código: If CDate(GrillaMostrarContratos.TextMatrix(c, 4)) > CDate(GrillaMostrarContratos.TextMatrix(c, 5)) And CDate(GrillaMostrarContratos.TextMatrix(c, 5)) > FechaActual Then
GrillaMostrarContratos.TextMatrix(c, 9) = "TERMINO"
ElseIf CDate(GrillaMostrarContratos.TextMatrix(c, 9)) < 0 Then
GrillaMostrarContratos.TextMatrix(c, 9) = "TERMINO"
ElseIf CDate(GrillaMostrarContratos.TextMatrix(c, 4)) > CDate(FechaActual) Then
GrillaMostrarContratos.TextMatrix(c, 9) = "No Iniciado"
Else
GrillaMostrarContratos.TextMatrix(c, 9) = Str(dif) + " Dias"
End If y listo es todo lo que se necesita. espero no haberlos hecho pelotas. hasta pronto.
__________________
El exito no es un milagro, es una Recopensa
| 
13-03-2008, 19:01:57
|  | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.308
| | Entonces o yo no comprendo o lo que tratas de hacer cuestiona los principios más básicos del álgebra.
Si el contenido que comparas de la grilla es F.Termina (terminación de algo), debería comparar que si la FECHA ACTUAL, es mayor que aquella en la que se termina, está terminado, de lo contrario dime cuantos días faltan (En este caso siempre te saldrán positivos). En mi opinión, sin conocer detalles que seguramente ignoro, lo estás haciendo al revés...pero no lo dudes, la operación te la hace exactamente como tú le solicitas y -que yo sepa- (2-3) = (-1) | | Herramientas | | | | Desplegado | Mode Lineal |
Normas de Publicación
| no Puedes crear nuevos temas no Puedes responder a temas no Puedes adjuntar archivos no Puedes editar tus mensajes Código [IMG] está habilitado Código HTML está deshabilitado | | | La franja horaria es GMT. Ahora son las 07:59:44.
Powered by vBulletin® Version 3.6.8 Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design
|  |