Page 1 of 1

Xbrowse, FastEdit y xBrw:Edit() RESUELTO

Posted: Mon Jul 17, 2023 7:00 pm
by jose_murugosa
Quisiera consultar a mis compañeros del foro sobre la edición in line y oBrw:Edit(lappend) en xBrowse.
Trato hace dos semanas de crear una función que me permita hacer un browse de una tabla con una barra de botones "NUEVO EDITAR" que permita la edición en línea del xbrowse y también hacerlo en formulario a través de oBrw:Edit()

No logro que sea un browse editable pese a que me aseguré de que la cláusula oBrw:nEditTypes := EDIT_GET estuviera.
No puedo editar en línea ni tampoco hacerlo con el oBrw:Edit.

Por lo demás todo funciona

Supongo que para variar soy yo el torpe :oops: pero no puedo darme cuenta que está mal.

//Script de la tabla
aAdd( aSql, 'SELECT l.id, l.lugar, l.numerodellaves FROM llaves AS l ORDER BY l.id' )
//campos y cabezales para el xbrowse
aAdd( aCampos, { 'id', 'lugar', 'numerollaves' } )
aAdd( aHeaders, { 'Id.', 'Lugar', 'Cant. Llaves' } )
//Título del browse
aAdd( aTitleBrw, 'Llaves' )

Ejecución de la función: BrwSql( aSql[1], aCampos[1], aHeaders[1], aTitleBrw[1] )

Aquí les dejo la función lo más simplificada que pude y reproduce los errores mencionados.

Code: Select all | Expand

#include "Fivewin.ch"
#include "xbrowse.ch"

STATIC oRs, oBrw, oWndChild

FUNCTION Brwsql( aSql, aCampos, aHeaders, aTitleBrw )

     oRs:= oCn:Rowset( aSql, .t. )

     IF oWndChild == NIL
          IF oRs != nil
          
               DEFINE WINDOW oWndChild MDICHILD OF oWnd TITLE ( "Tabla: " + atitlebrw )
               
                    @0,0 XBROWSE oBrw OF oWndChild DATASOURCE oRs HEADERS aHeaders ;
                         AUTOCOLs AUTOSORT FASTEDIT LINES CELL
                         
                    aEval( oBrw:aCols, { |oCol| oCol:cHeader := Upper( Left( oCol:cHeader, 1 ) ) + ; 
                           Lower( Substr( oCol:cHeader, 2 ) ) } )
                    oBrw:nEditTypes := EDIT_GET
                    
                    //oBrw:bPopUp := { |o| ColMenu( o ) }
                    Barrabot2()
                    oBrw:CreateFromCode()
                    oWndChild:oClient := oBrw
                    
                    SET MESSAGE OF oWndChild TO ;
                         "Doble click le permite modificar una fila o agregar una nueva.." CENTERED 2010
                         
               ACTIVATE WINDOW oWndChild MAXIMIZED  Valid( oWndChild := NIL, .T. )
               oRs:Close()
          ELSE
               oCn:ShowError()
          ENDIF
     ELSE
          oWndChild:Setfocus()
     ENDIF
     
RETURN nil

//----------------------------------------------------------------------------
FUNCTION Barrabot2()
     LOCAL oBar
     DEFINE BUTTONBAR oBar SIZE 100,24 OF oWndChild 2007
          DEFINE BUTTON OF oBar PROMPT 'Nuevo'  ACTION oBrw:Edit(.t.)
          DEFINE BUTTON OF oBar PROMPT 'Editar' ACTION oBrw:Edit()
RETURN oBar
//----------------------------------------------------------------------------

Re: Xbrowse, FastEdit y xBrw:Edit() tratando de entender...

Posted: Tue Jul 18, 2023 5:20 am
by artu01
Hola no lo he probado a ver si te ayuda

Code: Select all | Expand

   for each cCol in aheaders
      WITH OBJECT oBrw:oCol( cCol )
         :nEditType     := EDIT_GET
      END
   next
 

Re: Xbrowse, FastEdit y xBrw:Edit() tratando de entender...

Posted: Tue Jul 18, 2023 9:14 pm
by jose_murugosa
Gracias por Contestar Artu01.
Ya lo he probado, pero sin éxito.

El Maestro Rao dice en otro post;
If oCol:nEditType is > 0 and oCol:lReadOnly is .F. ( default ) and oCol:bEditWhen is NIL (default ) or Evaluates to .T.
inline edit of the cell is automatically available (whether oBrw:lFastEdit is .T. or .F. ) ...
Methods oBrw:Edit( lAppend ) and oBrw:EditSource( lAppend ) are provided if the programmer wants to
provide edit of the Row in a dialog form....
Pero sigo sin resultados :(

Gracias por tu ayuda.

Re: Xbrowse, FastEdit y xBrw:Edit() tratando de entender...

Posted: Wed Jul 19, 2023 1:52 am
by cmsoft
Jose, yo no manejo demasiado la clase nativa, pero hice esta prueba y funciona bien
_ que hice son menores, casi puse toda tu funcion

Code: Select all | Expand

#include "fivewin.ch"
#include "xbrowse.ch"
STATIC oCn, oRs , oBrw, oWndChild
function Test()

FWCONNECT oCn HOST "localhost" USER "root" PASSWORD "secret" DB "test"

Brwsql("SELECT * FROM customer",{"FIRST","LAST","STREET","CITY","STATE"},{"Nombres","Apellido","Calle","Ciudad","Estado"},"Personas")   

RETURN nil 


STATIC FUNCTION Brwsql( aSql, aCampos, aHeaders, aTitleBrw )
      oRs := oCn:Rowset( aSql, .f. ) //Aca el 2do parametro lo puse falso - Tambien podrias usar oCn:Query(aSql) y funciona de la misma manera
        
               DEFINE WINDOW oWndChild TITLE ( "Tabla: " + atitlebrw )
               
                    @0,0 XBROWSE oBrw OF oWndChild DATASOURCE oRs HEADERS aHeaders COLUMNS aCampos ;
                         AUTOSORT FASTEDIT LINES CELL 
                         
                    oBrw:nEditTypes := EDIT_GET
                    Barrabot2()
                    oBrw:CreateFromCode()
                    oWndChild:oClient := oBrw
                   
                    SET MESSAGE OF oWndChild TO ;
                         "Doble click le permite modificar una fila o agregar una nueva.." CENTERED 2010
                         
               ACTIVATE WINDOW oWndChild MAXIMIZED  Valid( oWndChild := NIL, .T. )
               oRs:Close()
     
RETURN nil

//----------------------------------------------------------------------------
FUNCTION Barrabot2()
     LOCAL oBar
     DEFINE BUTTONBAR oBar SIZE 100,24 OF oWndChild 2007
          DEFINE BUTTON OF oBar PROMPT 'Nuevo'  ACTION oBrw:Edit(.t.)
          DEFINE BUTTON OF oBar PROMPT 'Editar' ACTION oBrw:Edit()
          DEFINE BUTTON OF oBar PROMPT 'Eliminar' ACTION IF(MsgNoYes("Seguro de borrar?"),oRs:Delete(),nil)
RETURN oBar
//----------------------------------------------------------------------------
 

Re: Xbrowse, FastEdit y xBrw:Edit() tratando de entender...

Posted: Wed Jul 19, 2023 9:55 am
by nageswaragunupudi

Code: Select all | Expand

               ACTIVATE WINDOW oWndChild MAXIMIZED  Valid( oWndChild := NIL, .T. )
               oRs:Close()
 
Recommended

Code: Select all | Expand

oWndChild:bPostEnd := { || oRs:Close() }
ACTIVATE WINDOW oWndChild

Re: Xbrowse, FastEdit y xBrw:Edit() tratando de entender...

Posted: Wed Jul 19, 2023 9:57 am
by jose_murugosa
Gracias César, Gracias Maestro Rao, ya probé y funciona perfectamente.

Maestro Rao, creo que hay un pequeño error en la documentación de la clase nativa de fivewin.

Dice:
1) oRs := oCn:RowSet( cTable(or)cSql, [lShowError] ) // simple and normal

Pero me parece que el segundo parámetro es lreadonly y por eso no funcionaba, porque en .t. no permite editar y al pasarlo a .f. a sugerencia de César funcionó perfectamente.

Consulto porque me llama la atención.

Re: Xbrowse, FastEdit y xBrw:Edit() tratando de entender...

Posted: Wed Jul 19, 2023 3:18 pm
by nageswaragunupudi
You are right
Possible params are:
RowSet( cSql, aParams, lReadOnly )
RowSet( cSql, aParams, nLimit, lReadOnly )
RowSet( cSql, nLimit, lReadOnly )
RowSet( cSql, lReadOnly )

Re: Xbrowse, FastEdit y xBrw:Edit() tratando de entender...

Posted: Thu Jul 20, 2023 12:13 pm
by jose_murugosa
Thanks a lot Mr. Rao.

xbrowse and FWHMariadb works wonderfully!!