Page 1 of 1

SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Sun Aug 07, 2022 3:58 pm
by joseluisysturiz
Buen dia, asi como dice, tengo un xbrowse con data de un array con set check y todo bien, pero con data de un query en el xbrowse, como uso el setcheck sin tener que crear un campo logico en la tabla mysql.? creo ese tema ya se pregunto, pero no resuelvo con lo que lei, alguna idea o sugerencia que no sea crear un campo logico en la tabla..gracias... :shock:

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Mon Aug 08, 2022 12:22 pm
by cmsoft
José Luis:
Creo que puedes mostrarlo, pero no hacerlo de edición, ya que no podrás grabar la variable si no es un campo lógico de la tabla.
Code: Select all  Expand view

#include "FiveWin.ch"
#include "xbrowse.ch"
FUNCTION Main()

   local oChild, oBrw, oCol, oTimer, oServer, oQry, cSql
   local cServer := 'localhost', cUser := 'miusuario', cPassword := 'mipassword', cDBName := 'test', nPort := "3306"
   FWCONNECT oServer HOST cServer USER cUser PASSWORD cPassword DB cDBName PORT VAL(nPort)
   DEFINE WINDOW oChild TITLE "Auto edit browse"

   oQry := oServer:Query("SELECT codigo as codigo,nombre as nombre, if(codigo > 3,true,false) as logico FROM articulos")
   @ 0,0 XBROWSE oBrw DATASOURCE oQry  ;
         COLUMNS "codigo","nombre","logico";
         HEADERS "Cod.","Descripcion Articulo","?";
         SIZES 100,250,50 OF oChild

   WITH OBJECT oBrw
      :CreateFromCode()
      :aCols[3]:SetCheck()
      :aCols[3]:bEditValue := {|| IF( oQry:logico == 1, .t., .f. )  }
   END
   oChild:oClient := oBrw  
   ACTIVATE WINDOW oChild
   
RETURN NIL
 

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Thu Aug 11, 2022 6:33 pm
by joseluisysturiz
cmsoft wrote:José Luis:
Creo que puedes mostrarlo, pero no hacerlo de edición, ya que no podrás grabar la variable si no es un campo lógico de la tabla.
Code: Select all  Expand view

#include "FiveWin.ch"
#include "xbrowse.ch"
FUNCTION Main()

   local oChild, oBrw, oCol, oTimer, oServer, oQry, cSql
   local cServer := 'localhost', cUser := 'miusuario', cPassword := 'mipassword', cDBName := 'test', nPort := "3306"
   FWCONNECT oServer HOST cServer USER cUser PASSWORD cPassword DB cDBName PORT VAL(nPort)
   DEFINE WINDOW oChild TITLE "Auto edit browse"

   oQry := oServer:Query("SELECT codigo as codigo,nombre as nombre, if(codigo > 3,true,false) as logico FROM articulos")
   @ 0,0 XBROWSE oBrw DATASOURCE oQry  ;
         COLUMNS "codigo","nombre","logico";
         HEADERS "Cod.","Descripcion Articulo","?";
         SIZES 100,250,50 OF oChild

   WITH OBJECT oBrw
      :CreateFromCode()
      :aCols[3]:SetCheck()
      :aCols[3]:bEditValue := {|| IF( oQry:logico == 1, .t., .f. )  }
   END
   oChild:oClient := oBrw  
   ACTIVATE WINDOW oChild
   
RETURN NIL
 


CMSOFT, lo que necesito es algo como eso, crear el campo logico virtual pero que no sea de la tabla, pero que se pueda cambiar al hacer click para seleccionar los registros y luego realizar X operacion en los registros que contengan el check en positivo, espero explicarme bien, lo que no quiero es tenet que agregar campos logicos a la tabla, ni tampoco quiero usar array que seria una solucion, probare lo que me sugieres, gracias... :shock:

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Thu Aug 11, 2022 10:02 pm
by cmsoft
A menos que me equivoque, no te va a dejar cambiar ese valor, a menos que sea un campo real de la tabla.
Tal vez Mr. Rao que es el experto en la clase nativa de MySql y Xbrowse pueda darte una mejor opinión y un mejor ejemplo.
En todo caso, una opción alternativa es crear una tabla temporal de MySql que contenga los campos que quieres mostrar y el valor logico que quieres cambiar, y la llenas con la información de la tabla con el filtro que necesitas.
Si los datos no son extremadamente grande, tiene un funcionamiento bastante aceptable.

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Thu Aug 11, 2022 10:46 pm
by joseluisysturiz
cmsoft wrote:A menos que me equivoque, no te va a dejar cambiar ese valor, a menos que sea un campo real de la tabla.
Tal vez Mr. Rao que es el experto en la clase nativa de MySql y Xbrowse pueda darte una mejor opinión y un mejor ejemplo.
En todo caso, una opción alternativa es crear una tabla temporal de MySql que contenga los campos que quieres mostrar y el valor logico que quieres cambiar, y la llenas con la información de la tabla con el filtro que necesitas.
Si los datos no son extremadamente grande, tiene un funcionamiento bastante aceptable.


Mi punto es que si se pudiese ADICIONAR una columna al xbrowse que se maneje el SETCHECHK creo seria una buena manera de lo que quiero, sin tener que usar array, ni tablas temporales, ni campos logicos en la tabla original,

Nececito toda la tabla en el xbrowse y tildar algunos campos, y luego recorrer el xbrowse y dependiendo del valor del SETCHECK realizar cierta operacion con ese registro de la tabla en otras tablas... en este caso... cambiar unos precios... gracias... :shock:

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Fri Aug 12, 2022 4:42 pm
by cmsoft
Prueba esta opcion a ver si te sirve:
Es creando una tabla en memoria con la query con los condicionales que desees
Code: Select all  Expand view
#include "FiveWin.ch"
#include "xbrowse.ch"
FUNCTION Main()

   local oChild, oBrw, oCol, oTimer, oServer, oQry, cSql
   local cServer := 'localhost', cUser := 'root', cPassword := 'miclave', cDBName := 'test', nPort := "3306"
   FWCONNECT oServer HOST cServer USER cUser PASSWORD cPassword DB cDBName PORT VAL(nPort)
   DEFINE WINDOW oChild TITLE "Auto edit browse"
   cSql:="CREATE TABLE tempor ENGINE=MEMORY "+;
         " SELECT codigo as codigo,nombre as nombre, if(codigo > 3,true,false) as logico " +;
         " FROM articu"
   oServer:Execute( cSql )
   oQry := oServer:Query("SELECT * FROM tempor")
   @ 0,0 XBROWSE oBrw DATASOURCE oQry  ;
         COLUMNS "codigo","nombre","logico";
         HEADERS "Cod.","Descripcion Articulo","?";
         SIZES 100,250,50 OF oChild FASTEDIT

   WITH OBJECT oBrw  
      :aCols[3]:SetCheck()
      :aCols[3]:bEditValue := {|| IF( oQry:logico == 1, .t., .f. )  }
      :aCols[3]:bLDClickData := {|| CambiaChek(oBrw, oQry)}
      :CreateFromCode()
   END
   oChild:oClient := oBrw  
   ACTIVATE WINDOW oChild  
RETURN NIL

STATIC FUNCTION CambiaChek(oBrw,oQry)
oQry:logico := IF(oQry:logico==1,0,1)
oQry:Save()
oQry:Refresh()
oBrw:Refresh()
RETURN nil

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Sat Aug 13, 2022 6:33 pm
by joseluisysturiz
CMSOFT, eso es lo que hacia pero con la tabla original, y es lo que no quiero seguir haciendo, tranquilo, vere que se me ocurre, el de la solucion deberia ser Mr RAO que como dices, es el mejor conocedor del xBrowse, la idea es que se pueda hacer con una query , asi como se hace con un array, gracias... :shock:

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Tue Aug 30, 2022 5:36 pm
by nageswaragunupudi
Use
Code: Select all  Expand view
oBrw:SetMultiSelCol()


This does all the work for you

Please see fwh\samples\xbmulsel.prg

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Tue Aug 30, 2022 8:51 pm
by cmsoft
Estimado Mr. Rao:
Excelente, muchas gracias!
Esto lo tengo que capturar con oBrw:aSelected o hay alguna manera de obtener el conjunto de datos de la query original que han sido seleccionados?

Re: SET CHECK EN BROWSE CON DATA DE UN QUERY

PostPosted: Tue Aug 30, 2022 11:52 pm
by nageswaragunupudi
Code: Select all  Expand view
oBrw:aSelected

List of Record Numbers / BookMarks selected.
But we need to save this information before the browse is closed.