La solucion fue cambiar el tipo de datos, ya que la query la obtenia de una tabla temporal con un capo tinyint, que no me lo llenaba.
XBrowse tiene algun tipo de configuracion para ver un campo tinyint como booleano??
- Code: Select all Expand view
REDEFINE XBROWSE oBrw1 DATASOURCE oQry1;
COLUMNS "modulo","detalle","codigo","permiso","permisos";
HEADERS "Modulo","Descripcion Modulo","Orden","Permiso","Permisos";
SIZES 100,250,50,80,113;
ID 200 OF oDlg1
oBrw1:aCols[4]:nEditType := EDIT_GET
oBrw1:aCols[4]:bEditValue := {|| IF( oQry1:permiso="S", .t., .f. ) }
oBrw1:aCols[4]:SetCheck(,.t.)
Lo llenaba con la siguiente instruccion SQL
- Code: Select all Expand view
TEXT into cSql
CREATE TEMPORARY TABLE IF NOT EXISTS `menues_temp` (
`ITEM` int(6) NOT NULL AUTO_INCREMENT,
`CODIGO` varchar(4) NOT NULL DEFAULT ' ' ,
`USUARIO` varchar(15) NOT NULL DEFAULT ' ' ,
`MODULO` varchar(15) NOT NULL DEFAULT ' ' ,
`ETIQUETA` varchar(20) NOT NULL DEFAULT ' ' ,
`DETALLE` varchar(40) NOT NULL DEFAULT ' ' ,
`RECURSO` varchar(10) NOT NULL DEFAULT ' ' ,
`PADRE` varchar(4) NOT NULL DEFAULT ' ' ,
`PERMISOS` varchar(5) NOT NULL DEFAULT ' ',
`REPORTE` varchar(1) NOT NULL DEFAULT ' ',
`PERMISO` tinyint(1) NOT NULL default 0 ,
PRIMARY KEY (`ITEM`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
ENDTEXT
oApp:oServer:Execute(cSql)
oApp:oServer:Execute("TRUNCATE menues_temp")
oApp:oServer:NextResult()
oApp:oServer:Execute("INSERT INTO menues_temp "+;
"(codigo,usuario,modulo,etiqueta,detalle,recurso,padre,permiso,permisos) "+;
"(SELECT m.codigo,"+ClipValue2Sql(usua)+;
",m.modulo, m.etiqueta, m.detalle,m.recurso,m.padre,"+;
"IF(b.codigo IS NOT NULL,1,0) , b.permisos FROM menu_nuevo m "+;
"LEFT JOIN (SELECT codigo,permisos FROM menu_nuevo WHERE usuario = "+ClipValue2Sql(usua)+" "+;
"ORDER BY codigo) b ON m.codigo = b.codigo "+;
"WHERE m.usuario = '%%%%%%' ORDER BY m.codigo)")
oApp:oServer:NextResult()
oQry1 := oApp:oServer:Query( "SELECT * FROM menues_temp")
oQry1:Refresh()
Y lo reemplace con esta otra y funciono:
- Code: Select all Expand view
TEXT into cSql
CREATE TEMPORARY TABLE IF NOT EXISTS `menues_temp` (
`ITEM` int(6) NOT NULL AUTO_INCREMENT,
`CODIGO` varchar(4) NOT NULL DEFAULT ' ' ,
`USUARIO` varchar(15) NOT NULL DEFAULT ' ' ,
`MODULO` varchar(15) NOT NULL DEFAULT ' ' ,
`ETIQUETA` varchar(20) NOT NULL DEFAULT ' ' ,
`DETALLE` varchar(40) NOT NULL DEFAULT ' ' ,
`RECURSO` varchar(10) NOT NULL DEFAULT ' ' ,
`PADRE` varchar(4) NOT NULL DEFAULT ' ' ,
`PERMISOS` varchar(5) NOT NULL DEFAULT ' ',
`REPORTE` varchar(1) NOT NULL DEFAULT ' ',
`PERMISO` varchar(1) NOT NULL default ' ' ,
PRIMARY KEY (`ITEM`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
ENDTEXT
oApp:oServer:Execute(cSql)
oApp:oServer:Execute("TRUNCATE menues_temp")
oApp:oServer:NextResult()
oApp:oServer:Execute("INSERT INTO menues_temp "+;
"(codigo,usuario,modulo,etiqueta,detalle,recurso,padre,permiso,permisos) "+;
"(SELECT m.codigo,"+ClipValue2Sql(usua)+;
",m.modulo, m.etiqueta, m.detalle,m.recurso,m.padre,"+;
"IF(b.codigo IS NOT NULL,'S','N') , b.permisos FROM menu_nuevo m "+;
"LEFT JOIN (SELECT codigo,permisos FROM menu_nuevo WHERE usuario = "+ClipValue2Sql(usua)+" "+;
"ORDER BY codigo) b ON m.codigo = b.codigo "+;
"WHERE m.usuario = '%%%%%%' ORDER BY m.codigo)")
oApp:oServer:NextResult()
oQry1 := oApp:oServer:Query( "SELECT * FROM menues_temp")
oQry1:Refresh()
Lo del ID duplicado no pude detectar que era.
Gracias Mr Rao por su tiempo.
Saludos