border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

Cuenta Bancaria en EEUU
  #1 (permalink)  
Antiguo 12-03-2008, 18:30:58
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 170
El_Principiante Valoración +2
Predeterminado 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
Imágenes Adjuntas
Tipo de Archivo: jpg contratos.jpg (27,3 KB, 41 visitas)
__________________
El exito no es un milagro, es una Recopensa
Responder Con Cita
  #2 (permalink)  
Antiguo 12-03-2008, 19:21:45
Avatar de acalanto
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.308
acalanto ha deshabilitado la reputación
Predeterminado

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.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 12-03-2008, 19:31:51
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 170
El_Principiante Valoración +2
Predeterminado

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
Responder Con Cita
  #4 (permalink)  
Antiguo 12-03-2008, 21:08:58
Avatar de acalanto
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.308
acalanto ha deshabilitado la reputación
Predeterminado

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.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #5 (permalink)  
Antiguo 13-03-2008, 14:23:25
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 170
El_Principiante Valoración +2
Predeterminado

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
Responder Con Cita
  #6 (permalink)  
Antiguo 13-03-2008, 15:36:41
Avatar de acalanto
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.308
acalanto ha deshabilitado la reputación
Predeterminado

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?
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #7 (permalink)  
Antiguo 13-03-2008, 16:39:40
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 170
El_Principiante Valoración +2
Predeterminado

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
Responder Con Cita
  #8 (permalink)  
Antiguo 13-03-2008, 17:50:29
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 170
El_Principiante Valoración +2
Predeterminado

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
Responder Con Cita
  #9 (permalink)  
Antiguo 13-03-2008, 19:01:57
Avatar de acalanto
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.308
acalanto ha deshabilitado la reputación
Predeterminado

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)
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Restar dos Fechas Claudia VBA (Excel, Word, Outlook, Access) 0 17-01-2008 01:08:01
restar fechas mediante macros en excel agri13 VBA (Excel, Word, Outlook, Access) 4 13-07-2007 00:33:55
Restar Fechas y Horas Claudia Visual Basic 6.00 1 05-12-2005 15:57:17
Mostrar fechas en MSHflexGrid Guido Visual Basic 6.00 2 27-09-2005 14:36:08
Restar dos fechas ELNORTINO Visual Basic 6.00 2 26-02-1970 18:57:50


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

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right