problemas con 2 browses en mysql ooSql

31 views
Skip to first unread message

Edson Granados

unread,
Feb 24, 2025, 9:44:47 AM2/24/25
to oohg

Buenos dias mi gente,es mi turno de enviar la consulta por segunda vez al grupo.



Tengo 2 browses en Mysql que gestiona los permisos que tiene cada usuario en los modulos del sistema

el primer browse son los Usuarios
image.png

El segundo modulo son los modulos que tiene cada usuario y los permisos 

El tema principal es que al mover el usuario del primer modulo no actualiza el segundo browse, siempre muestra la informacion del primero...   Si me salgo y vuelvo a entrar si me muestra la informacion del segundo usuario..

Facilmente se nota que el tema es el refresh del segundo browse, pero he leido todos los mensajes de este foro y no he encontrado solucion al mismo...

No se si pueda ser un error de la clase ooSql, o si alguno sabe que puede pasar por favor orientacion.



PROCEDURE Busca_usuarios()
Local oQuery
oQuery:=oServer:Query("Select * From general.programa Where cusuario='"+NOMBASE:FieldGet('cusuario')+"'")
If oQuery:NetErr()
    MsgExclamation('Error '+oQuery:Error()+chr(13)+'Actualizando Contenido...','Actualizaciones ...') ; Return
EndIf
bd_programa:=ooSQL():New(oQuery)
bd_programa:oQuery:Refresh()
nRec:=bd_programa:Recno()
bd_programa:oQuery:=oQuery               //Actualizo oBaseClie con el nuevo oQuery -Actualiza automaticamente el WorkArea del xBrowse-
oQuery:Goto(nRec)      

Win_1X.Browse_2.Refresh  
Return




EDSON GRANADOS

--

EDSON ARAMIS GRANADOS GOMEZ
Administrador Informatico
Asesor Organismos de Transito.

Ciro Vargas C

unread,
Feb 24, 2025, 2:36:36 PM2/24/25
to oo...@googlegroups.com
Le consulte a deepseek tu problema


Esta es la respuesta ojalá re sirva 
No tengo como probarla. 


El problema que describes parece estar relacionado con la actualización del segundo `xBrowse` después de moverte entre los registros del primer `xBrowse`. Aunque realizas un `Refresh` en el segundo `xBrowse`, parece que no se está actualizando correctamente con los datos del usuario seleccionado en el primer `xBrowse`.

Aquí hay algunas sugerencias para solucionar el problema:

### 1. **Verifica la sincronización entre los dos `xBrowse`**
   Asegúrate de que el segundo `xBrowse` esté correctamente vinculado al resultado de la consulta que depende del usuario seleccionado en el primer `xBrowse`. Parece que estás utilizando `bd_programa` para manejar los datos del segundo `xBrowse`, pero no está claro si este objeto está correctamente asociado con el `xBrowse`.

### 2. **Actualiza el `xBrowse` correctamente**
   En lugar de solo llamar a `Win_1X.Browse_2.Refresh`, asegúrate de que el `xBrowse` esté correctamente vinculado a los datos actualizados. Puedes intentar forzar una actualización completa del `xBrowse`:

   ```xBase
   Win_1X.Browse_2:SetData(bd_programa)  // Asigna los nuevos datos al Browse
   Win_1X.Browse_2:Refresh()            // Refresca el Browse
   ```

### 3. **Asegúrate de que la consulta se ejecute correctamente**
   Verifica que la consulta `oQuery` esté devolviendo los datos correctos para el usuario seleccionado. Puedes agregar un mensaje de depuración para asegurarte de que la consulta se esté ejecutando con el valor correcto de `cusuario`:

   ```xBase
   MsgInfo("Consulta ejecutada para el usuario: " + NOMBASE:FieldGet('cusuario'))
   ```

### 4. **Revisa el manejo del `Recno`**
   Asegúrate de que el `Recno` se esté manejando correctamente. Si el `Recno` no está en la posición correcta después de la actualización, el `xBrowse` podría no mostrar los datos correctos. Puedes intentar moverte al registro correcto después de la actualización:

   ```xBase
   bd_programa:GoTo(nRec)  // Asegúrate de que el registro esté en la posición correcta
   ```

### 5. **Considera usar eventos**
   Si estás utilizando `xBrowse`, puedes considerar usar el evento `OnChange` del primer `xBrowse` para actualizar automáticamente el segundo `xBrowse` cuando el usuario seleccione un registro diferente.

   ```xBase
   METHOD OnChange() CLASS Win_1X.Browse_1
      LOCAL cUsuario := NOMBASE:FieldGet('cusuario')
      oQuery := oServer:Query("Select * From general.programa Where cusuario='"+cUsuario+"'")
      If oQuery:NetErr()
         MsgExclamation('Error '+oQuery:Error()+chr(13)+'Actualizando Contenido...','Actualizaciones ...') 
         Return
      EndIf
      bd_programa := ooSQL():New(oQuery)
      Win_1X.Browse_2:SetData(bd_programa)
      Win_1X.Browse_2:Refresh()
   RETURN
   ```

### 6. **Revisa la clase `ooSQL`**
   Si el problema persiste, podría ser un problema con la clase `ooSQL` o cómo se está manejando el `Refresh`. Asegúrate de que la clase `ooSQL` esté correctamente implementada y que el método `Refresh` esté actualizando los datos como se espera.

### 7. **Depuración adicional**
   Si ninguna de las soluciones anteriores funciona, considera agregar más mensajes de depuración para verificar el flujo del programa y asegurarte de que los datos se estén actualizando correctamente en cada paso.

### Ejemplo de código revisado:

```xBase
PROCEDURE Busca_usuarios()
   LOCAL oQuery, nRec

   // Obtén el usuario seleccionado en el primer Browse
   LOCAL cUsuario := NOMBASE:FieldGet('cusuario')

   // Ejecuta la consulta para obtener los módulos del usuario
   oQuery := oServer:Query("Select * From general.programa Where cusuario='"+cUsuario+"'")
   
   If oQuery:NetErr()
      MsgExclamation('Error '+oQuery:Error()+chr(13)+'Actualizando Contenido...','Actualizaciones ...') 
      Return
   EndIf

   // Asigna la consulta a bd_programa
   bd_programa := ooSQL():New(oQuery)
   
   // Guarda la posición actual del registro
   nRec := bd_programa:Recno()
   
   // Actualiza el segundo Browse con los nuevos datos
   Win_1X.Browse_2:SetData(bd_programa)
   Win_1X.Browse_2:Refresh()

   // Vuelve a la posición del registro
   bd_programa:GoTo(nRec)
   
RETURN
```

Este código debería asegurar que el segundo `xBrowse` se actualice correctamente con los datos del usuario seleccionado en el primer `xBrowse`. Si el problema persiste, revisa la implementación de la clase `ooSQL` y asegúrate de que los datos se estén manejando correctamente.

--
Has recibido este mensaje porque estás suscrito al grupo "[oohg]" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a oohg+uns...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/oohg/CAHm7snhmBSQGMCJLdB39PdWXmMSL%3DUpQVA7BDXkievZSe5ssQw%40mail.gmail.com.

Edson Granados

unread,
Feb 24, 2025, 2:52:15 PM2/24/25
to oo...@googlegroups.com

Excelente ciro, muchas gracias, voy a revisar lo citado y te comento como me fue.. muchas gracias.

Edson Granados


Reply all
Reply to author
Forward
0 new messages