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

Problema con MsFlexgrid

Estas en el tema de Problema con MsFlexgrid en el foro de Visual Basic clásico en Foros del Web. Hola! Tengo un problema, tengo un boton que cuando lo ejecuto debe cargarme unos datos en un Msflexgrid el problema esta en que el archivo ...
  #1 (permalink)  
Antiguo 14/05/2010, 06:26
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Problema con MsFlexgrid

Hola!

Tengo un problema, tengo un boton que cuando lo ejecuto debe cargarme unos datos en un Msflexgrid el problema esta en que el archivo tiene varios registros pero en cambio solo me carga uno ¿Donde he cometido el error?

Un saludo y muchas gracias

Este es el codigo del boton.:
Código vb:
Ver original
  1. 'Botón para posicionarse en el registro de la semana actual
  2. '###########################################################
  3.  
  4. Private Sub cmd_actual_Click()
  5. LimpiarGrid
  6. FunSemanaActual
  7.  
  8. Get #Numero, RegTemp, Horas
  9. Do
  10.     CargarDatos
  11.     VisualizarDatos
  12.     RegTemp = RegTemp - 1
  13.    
  14. Loop While dia_C > "lunes"
  15.  
  16. End Sub

Y aqui esta el codigo de las funciones que aparecen en el boton .:

Código vb:
Ver original
  1. ' ---------------------------------------------------------------------------
  2. ' \\ -- Función para asignar los Datos de un registro del archivo Horas.dat a
  3. ' -----  las variables internas.
  4. ' ---------------------------------------------------------------------------
  5. Private Sub CargarDatos()
  6.  
  7. 'Asignamos contenidos de las variables con datos de Horas.dat.
  8. With Horas
  9.  
  10. inicio1_C = .inicio1
  11. fin1_C = .fin1
  12. inicio2_C = .inicio2
  13. fin2_C = .fin2
  14. inicio3_C = .inicio3
  15. fin3_C = .fin3
  16. tiempo_C = .tiempo
  17. dia_C = Trim(.dia)
  18. fecha_C = .fecha
  19. semana_C = .semana
  20. mes_C = .mes
  21. año_C = .año
  22. npedido_C = .npedido
  23. Totalhoras_C = .Totalhoras
  24.  
  25. End With
  26.  
  27. End Sub
  28.  
  29. ' ---------------------------------------------------------------------------
  30. ' \\ -- Subrutina que Visualiza los datos en el MSFlexGrid
  31. ' ---------------------------------------------------------------------------
  32. Private Sub VisualizarDatos()
  33.  
  34. 'Mostramos los datos en las celdas
  35. Dim Columna As Single
  36. Select Case dia_C
  37. Case "lunes": Columna = 0
  38. Case "martes": Columna = 1
  39. Case "miercoles": Columna = 2
  40. Case "jueves": Columna = 3
  41. Case "viernes": Columna = 4
  42. Case "sabado": Columna = 5
  43. Case "domingo": Columna = 6
  44. End Select
  45.  
  46. MSFlexGrid.TextMatrix(0, Columna) = fecha_C
  47. MSFlexGrid.TextMatrix(1, Columna) = inicio1_C
  48. MSFlexGrid.TextMatrix(2, Columna) = fin1_C
  49. MSFlexGrid.TextMatrix(3, Columna) = inicio2_C
  50. MSFlexGrid.TextMatrix(4, Columna) = fin2_C
  51. MSFlexGrid.TextMatrix(5, Columna) = inicio3_C
  52. MSFlexGrid.TextMatrix(6, Columna) = fin3_C
  53. MSFlexGrid.TextMatrix(7, Columna) = tiempo_C
  54.  
  55. End Sub
  56.  
  57. ' ---------------------------------------------------------------------------
  58. ' \\ -- Limpia el MSFlexGrid.
  59. ' ---------------------------------------------------------------------------
  60. Private Sub LimpiarGrid()
  61.  
  62. Dim i As Integer, c As Integer
  63.  
  64. For i = 1 To 7
  65.     For c = 0 To 6
  66.     MSFlexGrid.TextMatrix(0, c) = ""
  67.     MSFlexGrid.TextMatrix(1, c) = ""
  68.     MSFlexGrid.TextMatrix(2, c) = ""
  69.     MSFlexGrid.TextMatrix(3, c) = ""
  70.     MSFlexGrid.TextMatrix(4, c) = ""
  71.     MSFlexGrid.TextMatrix(5, c) = ""
  72.     MSFlexGrid.TextMatrix(6, c) = ""
  73.     MSFlexGrid.TextMatrix(7, c) = ""
  74.     Next c
  75. Next i
  76.    
  77. End Sub
  78.  
  79. ' ---------------------------------------------------------------------------
  80. ' \\ -- Subrutina para para posicionarse en el registro de la semana actual.
  81. ' ---------------------------------------------------------------------------
  82. Private Sub FunSemanaActual()
  83.  
  84. Dim i As Integer
  85.  
  86. SemanaActual = Format(Date, "WW")
  87.  
  88. D = LOF(Numero) / 94
  89.  
  90. For i = 0 To D
  91.  
  92.     Get #Numero, RegActual, Horas
  93.     SemanaTemp = Horas.semana
  94.        If SemanaTemp = SemanaActual Then Exit For
  95.             If SemanaTemp < SemanaActual Then
  96.             RegActual = RegActual + 1
  97.             ElseIf SemanaTemp > SemanaActual Then
  98.             RegActual = RegActual - 1
  99.        End If
  100.  
  101. Next i
  102. RegTemp = RegActual
  103. End Sub
  #2 (permalink)  
Antiguo 14/05/2010, 06:51
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Problema con MsFlexgrid

Hola: Asi a primera vista y sin analizar del todo por si se trata de esto, veo que la función de Lectura la tienes fuera del Bucle:

Creo que en lugar de estar de esta manera

Get #Numero, RegTemp, Horas
Do
CargarDatos
VisualizarDatos
RegTemp = RegTemp - 1
Loop While dia_C > "lunes"


Debería estar de esta otra no ?

Do
Get #Numero, RegTemp, Horas
CargarDatos
VisualizarDatos
RegTemp = RegTemp - 1
Loop While dia_C > "lunes"


De lo contrario, ¿ que sentido tiene el Bucle ? ya que siempre está procesando el mismo contenido de Horas
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 14/05/2010, 07:02
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Problema con MsFlexgrid

Hola erbunson!

De momento ahora me visualiza mas registros me mirare el codigo no sea tenga un error en otro sitio, por lo menos ahora me funciona al 70% ya comentare el donde si consigo encontrar el resto del problema.Ya que me hace el tonto en otras cosas.

Un saludo
  #4 (permalink)  
Antiguo 14/05/2010, 07:15
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Problema con MsFlexgrid

Hola Xyon:

La comparación del Do/Loop me parece que no tiene ningun sentido, ya que se trata de una comparación que no puede funcionar:

lunes
martes
miercoles
jueves
viernes
sabado
domingo

el orden alfabético que tu comparas sería realmente

domingo
jueves
lunes
martes
miercoles
sabado
viernes

¿ podría estar por ahí el problema ?
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #5 (permalink)  
Antiguo 14/05/2010, 07:50
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Problema con MsFlexgrid

Cita:
Iniciado por erbuson Ver Mensaje
Hola Xyon:

el orden alfabético que tu comparas sería realmente

domingo
jueves
lunes
martes
miercoles
sabado
viernes

¿ podría estar por ahí el problema ?
Hola Erbuson!

No comprendo lo que comentas que mi orden de comparación es este .:

domingo
jueves
lunes
martes
miercoles
sabado
viernes

ya que aunque yo leo de mayor a menos que seria asi .:

domingo
sabado
viernes
jueves
miercoles
martes
lunes

en el peor de los casos que solo es que haya un dia y sea lunes o en su defecto tres dias, seria .:

domingo
martes
lunes

pero jamas los puedo tener revueltos o por lo menos asi creo ya que se graba en el archivo y que es secuencial o ¿ estoy equivocado?.

Un saludo
  #6 (permalink)  
Antiguo 14/05/2010, 08:12
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Problema con MsFlexgrid

Hola Xyon:

Suponiendo los días de la semana
1 - Lunes
2 - Martes
3 - Miercoles
4 - Jueves
5 - Viernes
6 - Sabado
7 - Domingo
En una comparacion SIEMPRE 2 es menor que 4

Pero la comparación en VB se realiza según caracteres y el caracter J SIEMPRE es antes que M

Esta es mas o menos la idea que intento explicarte

Si quieres verlo facilmente, inserta un ListBox en tu proyecto y pon su propiedad Sorted a TRUE, entonces pegas este código

List1.AddItem "lunes"
List1.AddItem "martes"
List1.AddItem "miercoles"
List1.AddItem "jueves"
List1.AddItem "viernes"
List1.AddItem "sabado"
List1.AddItem "domingo"

y verás lo que te enseña el ListBox ya que la comparación es por valor ASCII del caracter o sea que 5 es menor que 6 pero JUEVES es menor que MARTES porque la J viene antes que la M

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #7 (permalink)  
Antiguo 14/05/2010, 08:37
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Problema con MsFlexgrid

Ha sido un pequeño reto, aquí te dejo una posible solución:

Public Function DiaNum(DiaEnLetras As String) As Integer
' Recibe el dia semana en letras y devuelve su número Lunes 1, Martes 2, ...
DiaNum = InStr("lmmjvsd", LCase$(Left$(DiaEnLetras, 1)))
If DiaNum = 2 And LCase$(Left$(DiaEnLetras, 2)) = "mi" Then DiaNum = 3
End Function


de este modo la comparación si que debería funcionar

Loop While DiaNum(dia_C) > DiaNum("lunes")

aunque como siempre comparas con Lunes, podrías hacer lo siguiente:

Loop While DiaNum(dia_C) > 1

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #8 (permalink)  
Antiguo 17/05/2010, 00:09
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: Problema con MsFlexgrid

Hola erbuson!

Me has aclarado un tema que me estaba volviendo loco, muchas gracias Pero ahora llega la pregunta del siglo pues hay otro loop que me esta dejando peor que el anterior, resulta que en el Msflexgrid siempre me visualizaba un dia y en el archivo habian dos dias 19 uno en la semana 17 y otro en la 20 pero el resto de dias no me salia, despues de muchas pruebas y analisis decidi modificar el archivo procurando que no hubiese un dia del mes que se duplicase en el archivo es decir 19 de abril y 19 de Mayo eliminando uno de ellos, e aqui la sorpresa que el primer registro que me inserta no era el de la ultima semana el 19 de Mayo sino el de la semana 17 que es el dia 17 abril, si yo le digo que me visualice el ultimo registro ¿porque me sale el de la semana 17 y no el de la semana 20? o es que la lectura es al reves. si quieres te remito nuevamente el proyecto con el archivo para que veas lo que ocurre.

Un saludo

Etiquetas: Ninguno
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 23:16.