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

Ordenar por Fechas

Estas en el tema de Ordenar por Fechas en el foro de Visual Basic clásico en Foros del Web. Hola compañeros, tengo una pregunta:? Resulta que por medio de una consulta muestro algunos registros utilizando esta sentencia: Código: If Rs.State = 1 Then Rs.Close ...
  #1 (permalink)  
Antiguo 22/07/2008, 10:23
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 6
Ordenar por Fechas

Hola compañeros, tengo una pregunta:?

Resulta que por medio de una consulta muestro algunos registros utilizando esta sentencia:

Código:
      If Rs.State = 1 Then Rs.Close
         Rs.Open "SELECT * FROM Ppagos WHERE NOMBRE = '" & .TxtActualizarNombre.Text & "' ORDER BY FECHA ASC", cnn, adOpenStatic, adLockOptimistic
         Rs.Requery
         Call .FlexGridCargar(.GrillaDiezmos)
Mi problema es que no me muestra en el orden de las fechas, aunque le estoy dicien que me los ordene por las Fechas en Forma ASC

Donde estara mi problema?
  #2 (permalink)  
Antiguo 22/07/2008, 16:48
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 7
Respuesta: Ordenar por Fechas

Hola!

En el caso que pones, la ordenación la realiza el sistema gestor de base de datos, así que en principio no lo puedes controlar desde VB sin agregar bastante código.

¿Qué motor de base de datos usas? ¿El campo "fecha" está definido como tal, como cadena o como numérico? Esto es lo más probable. Si no es esto, y el gestor de base de datos te lo permite, deberías reindexar esa tabla.
__________________
wile sona li mute e sona
  #3 (permalink)  
Antiguo 23/07/2008, 07:36
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Ordenar por Fechas

En mi Base de Datos tengo el Nombre del Campo como Fecha y en Tipo de Datos lo tengo como Fecha/Hora y en el Formato Fecha Corta es decir siempre me escribe las fechas como este formato. dd/MM/yyyy, hasta ahora no habia tenido problemas de ordenamiento porque esa consultas las manejo en varios procedimientos. pero especialmente en esta me esta dando este problema considero que lo mas seguro es que no me esta tomando encuenta el ORDER BY Fecha ASC. Alguna otra sugerencia.
  #4 (permalink)  
Antiguo 23/07/2008, 07:48
Avatar de Jhonnyf  
Fecha de Ingreso: septiembre-2007
Ubicación: Dentro de mi
Mensajes: 87
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: Ordenar por Fechas

Dale una leida a esto

http://www.forosenperu.com/foro-de-p...-datetime.html

Y como lo trabajas practicamente como un STRING, lo puedes ordenar sin ningun problema
__________________
*en construccion*
  #5 (permalink)  
Antiguo 23/07/2008, 08:15
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Ordenar por Fechas

Te agradezco Jhonnyf ya lei tu sugerencia, solo que yo no tengo problemas en hacer las consultas, mi problema es el Ordenamiento ORDER BY FECHA ASC ese es mi problema que no me esta ordenando las fechas como deven de ser.
  #6 (permalink)  
Antiguo 23/07/2008, 09:43
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 7
Respuesta: Ordenar por Fechas

Entonces tenemos que ponernos duros

Si has comprobado que te guarda correctamente las fechas en la base de datos, tienes dos opciones: la primera es comprobar con otro programa fuera de VB que una consulta similar a la que quieres ejecutar funciona (desde el generador de consultas de Access, MySQLAdmin, o según el motor de bases de datos que uses). No vamos a descartar que se pueda tratar de un bug, pero para estar seguros, primero hay que saber dónde falla exactamente.

La segunda, es ver qué está concatenando VB. Para ello, sustituye el código que pusiste en el foro:
Código:
    If Rs.State = 1 Then Rs.Close
        Rs.Open "SELECT * FROM Ppagos WHERE NOMBRE = '" & .TxtActualizarNombre.Text & "' ORDER BY FECHA ASC", cnn, adOpenStatic, adLockOptimistic
        Rs.Requery
        Call .FlexGridCargar(.GrillaDiezmos)
Por este otro (no modifica nada, sólo agrega dos líneas):
Código:
    If Rs.State = 1 Then Rs.Close

        Debug.Print "SELECT * FROM Ppagos WHERE NOMBRE = '" & .TxtActualizarNombre.Text & "' ORDER BY FECHA ASC"
        Debug.Assert False

        Rs.Open "SELECT * FROM Ppagos WHERE NOMBRE = '" & .TxtActualizarNombre.Text & "' ORDER BY FECHA ASC", cnn, adOpenStatic, adLockOptimistic
        Rs.Requery
        Call .FlexGridCargar(.GrillaDiezmos)
Cuando lo ejecutes, el programa se detendrá en la línea que pone "Debug.Assert False", y en la ventana Inmediato (Ctrl+G, si no sale debajo del código), te saldrá la instrucción SELECT concatenada que le estás mandando al recordset. Comprueba ahí si la Select es correcta, e incluso copia esa línea y mándanosla aquí para que la podamos analizar entre todos, si no ves antes el problema.

Más aún, intenta ejecutar esa línea tal y como te decía en la opción 1, y si es incorrecta por cualquier causa, es fácil que el error que te de sea más descriptivo que cualquier cosa que diga VB.
__________________
wile sona li mute e sona
  #7 (permalink)  
Antiguo 23/07/2008, 10:56
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Ordenar por Fechas

Esta fue la linea que me arrojo en la ventana:
Código:
SELECT * FROM Ppagos WHERE NOMBRE = 'ALMACENES DE ROPA' ORDER BY FECHA ASC
  #8 (permalink)  
Antiguo 23/07/2008, 11:42
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Ordenar por Fechas

Bueno he agregado un Id a esta tabla dandole un numero consecutivo para ver como me ordena las fechas y me he dado cuenta que el orden lo pone bien, solo que me esta cambiando las fechas es decir:

Tengo un registro en mi Base de Datos asi: 04/11/2007 que seria el ultimo que agregue y a la hora de mostrarme este registro me lo muestra obviamente al ultimo pero con este formato 11/04/2007 porque me estara cambiando las Fechas si no estoy aplicando ninguna formato y aunque asi fuese NO me deve cambiar las fechas.

La pregunta es cual sera mi problema. existe alguna solución.?
  #9 (permalink)  
Antiguo 23/07/2008, 12:06
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Ordenar por Fechas

Entonces sí ordena bien, pero en el Grid muestra la fecha en formato americano.

En la función FlexGridCargar formatea el campo fecha a "dd/mm/yyyy"


  #10 (permalink)  
Antiguo 23/07/2008, 12:26
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Ordenar por Fechas

Si de hecho una vez cargado el Grid lo que hago es darle formato a esas fechas tal como me sugieres pero sigo con el mismo problema te pongo todo el codigo le hecho algunas modificacinones y puesto un sin fin de formas y tambien he cambiado el campo a la base de datos pero sin ningun resultado positivo.

Código:
If Rs.State = 1 Then Rs.Close
                
            Rs.Open "SELECT * FROM Ppagos WHERE NOMBRE = '" & .TxtActualizarNombre.Text & "' ORDER BY Format(Ffecha, 'yyyy/mm/dd')", cnn, adOpenStatic, adLockOptimistic
            Rs.Requery
            Call .FlexGridCargar(.GrillaPpagos)
            
            While Rs.EOF = False
                For Fila = 1 To .GrillaPpagos.Rows - 1
                    .GrillaPpagos.TextMatrix(Fila, 0) = Format(.GrillaPpagos.TextMatrix(Fila, 0), "dd/mm/yyyy")
                    .GrillaPpagos.TextMatrix(Fila, 2) = Format(.GrillaPpagos.TextMatrix(Fila, 2), "$ #,##0.00")
                Next Fila
                Rs.MoveNext
            Wend
            .TotalPpagos = Format(Sumar(.GrillaPpagos, 2), "$ #,##0.00")
        .Show vbModal
  #11 (permalink)  
Antiguo 23/07/2008, 14:04
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Ordenar por Fechas

Bueno, Bueno por fin solucione mi problema no esta en la consulta del MySql si no en la Grilla no se porque me mostraba datos de esa forma cambiandome las fechas pero en Fin la Solución fue Esta

Código:
If Rs.State = 1 Then Rs.Close
   Rs.Open "SELECT * FROM Ppagos WHERE NOMBRE = '" & .TxtActualizarNombre.Text & "' ORDER BY Ffecha", cnn, adOpenStatic, adLockOptimistic
            Rs.Requery
            Call .FlexGridCargar(.GrillaPpagos)
            
            Fila = 1
            While Rs.EOF = False
                .GrillaPpagos.TextMatrix(Fila, 0) = Format(Rs.Fields("Ffecha"), "dd-MMM-yyyy")
                .GrillaPpagos.TextMatrix(Fila, 2) = Format(Rs.Fields("Pagos"), "$ #,##0.00")
                Fila = Fila + 1
                Rs.MoveNext
            Wend
            .TotalPpagos = Format(Sumar(.GrillaPpagos, 2), "$ #,##0.00")
        .Show vbModal
Gracias a todos aquellos que muy desinteresadamente me ayudaron.

Hasta pronto y nuevamente Gracias.
  #12 (permalink)  
Antiguo 23/07/2008, 16:20
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 7
Respuesta: Ordenar por Fechas

Me estaba casi empezando a imaginar que iban por ahí los tiros cuando he vuelto a leer el post

Para evitarme problemas de este tipo, suelo definir las fechas como campos numéricos (equivalentes a Long para sólo fechas o equivalentes a Double para horas o fechas y horas). Si sólo vas a acceder a la base de datos con clientes en VB no habría ningún problema con esto, y te ahorras comprobaciones de formatos.

Por otra parte, seguramente el gestor de base de datos que estés utilizando tenga una función de formato que puedas utilizar directamente en la SQL. De esta manera, es el servidor de BD el que hace el trabajo sucio de los formatos (debería estar optimizado para ello) y aceleras así un poco el código en VB. Al menos, Acces e Informix tienen una función análoga a Format (llamada igual, además), y si no recuerdo mal, MySQL también.
__________________
wile sona li mute e sona
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 07:31.