#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 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 RUN
#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 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.
#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
oBrw:SetMultiSelCol()
oBrw:aSelected
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 37 guests