Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next 
 
Estaba yo pensando que si en este supuesto debería ser mejorado Result

Código: [Descargar] [Ocultar]
  1.       For n = 0 To resultado.Max 
  2.          .[n, 0].Text = resultado["Descripción"] 
  3.          resultado.MoveNext 
  4.       Next 
  5.       resultado.MoveFirst 'Si no ponemos esto el cursor estaría al final y cuando lo invocas te da un error 
  6.  


Y lo que pasa es que cuando termina el bucle el estado de resultado que no es mas que un Result el puntero esta al final como es de prever. Pero si necesitamos seguir usándolo a mi desde luego me pasa muy a menudo y es que se me olvida volver el puntero al primer elemento con resultado.MoveFirst y lo que propongo es como una regla, cuando metemos un objeto Result en un For-Next tras el final del bucle, este bucle debería saber de forma automática que el Result debería volver a su estado inicial osea hacer automáticamente resultado.MoveFirst

En fin, piénsenlo, debemos de evolucionar, no es una idea para nada ilógica.

Saludos y espero opiniones
 



 
última edición por gambafeliz el Jueves, 11 Junio 2020, 06:35; editado 2 veces 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next 
 
Hola

Me resulta raro usar Result dentro de un bucle, ya que precisamente lo que hace result es iterar en los resultados de la consulta. Me parece un error de diseño o quizás esté equivocado y tenga algún sentido...

De hecho, en la segunda iteración del bucle, el objeto result ya no devuelve resultados como es lógico, a menos que se inicialice de algún modo. ¿Puedes explicar (si te apetece) cuál es la motivación para hacer eso?

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next 
 
jguardon escribió: [Ver mensaje]
Hola

Me resulta raro usar Result dentro de un bucle, ya que precisamente lo que hace result es iterar en los resultados de la consulta. Me parece un error de diseño o quizás esté equivocado y tenga algún sentido...

De hecho, en la segunda iteración del bucle, el objeto result ya no devuelve resultados como es lógico, a menos que se inicialice de algún modo. ¿Puedes explicar (si te apetece) cuál es la motivación para hacer eso?

Saludos


Hooola jguardon

Para mi Result es una tabla por decirlo así. Result en sí no itera nada, aunque si es un objeto como una tabla el cual es posible recorrerlo con sus diferentes propiedades MOVE.

Imaginemos que el Result tiene una lista de 2 elementos y una sola columna.

1. Creamos un bucle For-Next e iteramos o llamamos elemento a elemento.
2. Cuando llega al final de la lista el cursor esta lógicamente al final
3. El bucle termina su iteración y salimos fuera del bucle para proseguir con la siguiente linea de código

Te expongo una breve explicación: Tu y yo somos programadores y sabemos que el cursor tras el bucle queda al final, pero no siempre te das cuenta y escribes nuevo código tras este bucle para seguir usando el Result, (ERROR) tras el bucle, el Result sin acordarte que debes inicializar el cursor al primer elemento, a mi me pasa mucho simplemente me abstraigo y sigo programando. Pero el diseñador de un lenguaje, lo sabe estas en un bucle y sabe que están los dos elementos (For-Next y Result) por que no inicializa el cursor de Result automáticamente sin que intervenga el usuario (el programador) es algo que obliga a recordar y además un Result.MoveFirst después de un bucle es feo.

Por supuesto es una simple opinión, pero creo que se puede hacer, es una evolución del lenguaje, y mejora la usabilidad para el usuario del lenguaje, además que es algo lógico y no es complicado de hacer, también puede ser que como es un objeto independiente (Result), y tiene un funcionamiento como el actual, simplemente no interacciona con su entorno, pero para eso debería estar el compilador, el cual debería evolucionar y detectar errores simples como este, añadiendo de forma automática la linea siguiente al bucle For-Next e implementar Result.MoveFirst por poner un ejemplo.

En fin, esta es mi nueva explicación.

Saludos.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next 
 
sugiero algunas formas de usar un result

Esta para rercorrer el result
Dim res As Result

  While res.Available
    print res["Apellido"]
    res.MoveNext
  Wend
 

Llegado el caso res.MoveFirst asegura la vuelta a empezar

Esta otra forma la uso en evento _Data y uso resShow.MoveTo(Row)
Public Sub GridView1_Data(Row As Integer, Column As Integer)

  Dim fpic As Variant
  Dim fgrp As String
  Dim pic As Picture
  Dim xFld As String
  Dim ipic As String

  For Each fgrp In stxFld
    If ctnGrp.Exist(fgrp) Then
      If ctnGrp[fgrp] = "Image" Then
        fpic = ctnGrp.Key
      Endif
    Endif
  Next

  If resShow.Available Then
    resShow.MoveTo(Row)
    xFld = stxFld[Column]

    GridView1[Row, Column].Text = resShow[xFld]
    If stxUni.Count > 0 Then
      If xFld = stxUni[0] Then
        If fpic <> "" Then
          ipic = adi &/ resShow[fpic]
          If Exist(ipic) Then
            If Stat(ipic).Type = gb.File Then
              pic = Image.Load(ipic).Stretch(GridView1.Rows.Height, GridView1.Rows.Height).Picture
              GridView1[Row, Column].Picture = pic
            Endif
          Endif
        Endif
      Endif
    Endif

    If (Row Mod 2) = 0 Then
      GridView1[Row, Column].Background = Color.TextBackground
    Else
      GridView1[Row, Column].Background = Color.Background
    Endif

  Endif
  GridView1.Refresh

End
 


Saludos
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next 
 
Hola, gambafeliz

Volviendo a leer tu post, ya estoy dudando. Como lo has editado, ya no me acuerdo si al principio declarabas el objeto result dentro o fuera del bucle. En cualquier caso, el objeto y la consulta hay que declararla fuera del bucle, evidentemente, e ir iterando los resultados que devuelve el objeto result. Éste, en mi opinión, sólo es reutilizable si se vuelve a declarar o si -como bien dices- recolocas el cursor al principio. Para mí, lo más limpio es volverlo a declarar y justo después utilizarlo. Eso automáticamente devolverá los resultados de la nueva consulta. O bien, volver a llamar al procedimiento o función que efectúa la consulta.

Pero como cada cual hace las cosas a su manera, mientras no se produzcan errores inesperados, eres libre de mover el cursor donde quieras.

Para la representación gráfica de los resultados, el ejemplo de tincho usando el evento Data es el ideal, en lugar de ir escribiendo mediante bucles las celdas con cada campo.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next 
 
tincho escribió:  
sugiero algunas formas de usar un result

Esta para rercorrer el result
Llegado el caso res.MoveFirst asegura la vuelta a empezar


Gracias, esto me será útil, lo conozco pero se me va la pelota y no lo uso.

Quiero dejar claro que aunque lo agradezco en realidad quería una opinión sobre mi pregunta, pero bueno, lo digo simplemente para centrar el tema.

tincho escribió:  


Esta otra forma la uso en evento _Data y uso resShow.MoveTo(Row)


Esta bien pero se te ha olvidado algo muy importante y es decir en que momento se produce el evento _Data que yo sinceramente lo desconocía. Y que para que sea mas didáctico para los lectores pienso que se debería al menos explicar esto que te cuento, lo hace mas claro para los novatos en gambas como yo.

Gracias tincho y no veas mi conversación como algo atacante sino simplemente constructivo. Saludos.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: No Pensais Que Se Debería Corregirse Result En Un Bucle For-Next 
 
jguardon escribió:  
Hola, gambafeliz

Volviendo a leer tu post, ya estoy dudando. Como lo has editado, ya no me acuerdo si al principio declarabas el objeto result dentro o fuera del bucle.


Nunca se vio la declaración de Result pero para dejarlo claro lo hago evidentemente antes del bucle sino peta el programa.


jguardon escribió:  

En cualquier caso, el objeto y la consulta hay que declararla fuera del bucle, evidentemente, e ir iterando los resultados que devuelve el objeto result. Éste, en mi opinión, sólo es reutilizable si se vuelve a declarar


Vuelvo a declarar pero entonces no estas entendiendo mi solicitud de este hilo, gastando una linea de código para o Declarar nuevamente el Result o para MoveFirst, me temo que estoy perdiendo el tiempo, sino entendéis lo que pretendo, es solo una conversación donde explico un caso y digo que el compilador debe corregir automaticamente lo Result después de un bucle For o While ya que lo saca tincho, da igual es que lo lógico es evitar que pete el programa por algo que el desarrollador del lenguaje conoce que va a pasar por un olvido del programador o usuario de Gambas.

En fin.

jguardon escribió:  

 o si -como bien dices- recolocas el cursor al principio. Para mí, lo más limpio es volverlo a declarar y justo después utilizarlo. Eso automáticamente devolverá los resultados de la nueva consulta.


Esto no lo entiendo del todo, si lo redeclaro de nuevo, esto hace una llamada a la base de datos o en su defecto haces una declaración vinculando el anterior Result.


En fin no te como mas la cabeza, gracias por participar en mi consulta, te mando saludo, joven.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes ¿ Qué Lenguaje De Programación Debería... Shell General 2 Sabado, 09 May 2015, 01:21 Ver último mensaje
Shell
No hay nuevos mensajes Bucle Do While Shell General 2 Martes, 09 Julio 2013, 21:34 Ver último mensaje
Shell
No hay nuevos mensajes [Python] Por Qué Python Debería Ser El P... Shell Python 2 Martes, 04 Julio 2017, 22:01 Ver último mensaje
vuott
No hay nuevos mensajes Salir De Un Bucle tururu Aplicaciones/Fragmentos de Código 4 Jueves, 14 Junio 2012, 20:14 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario