FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour SET CHECK EN BROWSE CON DATA DE UN QUERY
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Sun Aug 07, 2022 03:58 PM

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:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Mon Aug 08, 2022 12:22 PM
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 (fw): Select all Collapse
#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
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Thu Aug 11, 2022 06:33 PM
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 (fw): Select all Collapse
#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... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Thu Aug 11, 2022 10:02 PM

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.

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Thu Aug 11, 2022 10:46 PM
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... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Fri Aug 12, 2022 04:42 PM
Prueba esta opcion a ver si te sirve:
Es creando una tabla en memoria con la query con los condicionales que desees
Code (fw): Select all Collapse
#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
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Sat Aug 13, 2022 06:33 PM

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:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Tue Aug 30, 2022 05:36 PM
Use
Code (fw): Select all Collapse
oBrw:SetMultiSelCol()


This does all the work for you

Please see fwh\samples\xbmulsel.prg
Regards



G. N. Rao.

Hyderabad, India
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Tue Aug 30, 2022 08:51 PM

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?

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: SET CHECK EN BROWSE CON DATA DE UN QUERY
Posted: Tue Aug 30, 2022 11:52 PM
Code (fw): Select all Collapse
oBrw:aSelected

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



G. N. Rao.

Hyderabad, India

Continue the discussion