Page 1 of 1

Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 2:51 pm
by horacio
Colegas, cuando intento modificar el dato de la columna el programa se friza y no obtengo error, este es código

Code: Select all  Expand view

Case 3
    :aCols[ i ] : bStrData        := { || oQry2 : caracter }
    :aCols[ i ] : nDataStrAlign  := 2
    :aCols[ i ] : nEditType      := EDIT_LISTBOX
    :aCols[ i ] : aEditListTxt   := { "Titular", "Suplente", "Contratado", "Prov." }
    :aCols[ i ] : aEditListBound := { "T", "S", "C", "P" }
    :aCols[ i ] : bOnPostEdit    := { | o, x, n | If( n != VK_ESCAPE, UpdateCaracter( x ), ) }
    Exit
 


Y este es el código de la función UpdateCaracter

Code: Select all  Expand view

//----------------------------------------------------------------------------//
Function UpdateCaracter( x )

    Local cUpdate := 'update from legajo set caracter = ' + ClipValue2Sql( x )
   
    oVar : oServer : Execute( cUpdate )
    Return 0

 


Alguna idea ? Muchísimas gracias

Saludos

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 3:04 pm
by cnavarro
Horacio, que version de Fwh utilizas?, Harbour o XHarbour?

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 3:10 pm
by horacio
Gracias Cristobal por contestar, Mis herramientas son FWH 14.12, BCC 5.82 y Harbour 3.2.0dev (r1412151448)

Saludos

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 3:13 pm
by cnavarro
Has comprobado si la instruccion se ejecuta correctamente ?

Code: Select all  Expand view


//----------------------------------------------------------------------------//
Function UpdateCaracter( x )

    Local cUpdate := 'update from legajo set caracter = ' + ClipValue2Sql( x )
    ?     ClipValue2Sql( x )
    oVar : oServer : Execute( cUpdate )
   ? 1
    Return 0


 

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 3:20 pm
by horacio
Cristobal, la actualización la hace ( arreglé el código de la función ) y se friza al picar sobre la opción del combo.

Saludos

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 3:21 pm
by cnavarro
O sea, ejecuta la funcion y no vuelve al browse?

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 3:22 pm
by horacio
Exacto, no vuelve al browse, se friza antes

Saludos

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 3:27 pm
by horacio
También he notado que si oprimo la tecla ESC. la primera vez cierra el combo pero si lo vuelvo a abrir ya no vuelve a cerrarlo oprimiendo ESC.

Saludos

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 4:14 pm
by horacio
Estuve mirando en samples el programa testxbrw.prg y la edición de celdas funciona perfectamente con arrays. Yo estoy utilizando Mysql con TDolphin. Alguien que utilice esta librería y haya implementado la edición de datos con xbrowse me puede contar su experiencia. Muchísimas gracias.

Saludos

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 4:32 pm
by joseluisysturiz
horacio wrote:Estuve mirando en samples el programa testxbrw.prg y la edición de celdas funciona perfectamente con arrays. Yo estoy utilizando Mysql con TDolphin. Alguien que utilice esta librería y haya implementado la edición de datos con xbrowse me puede contar su experiencia. Muchísimas gracias.

Saludos

Horacio, si no me equivoco no importa si usas TDolphin ya que si haces edicion de celdas en un xBrowse lo haces es a un array, si pones algo de codigo creo sera mas facil entender tu problema y ayudarte en alguna solucion, gracias, saludos... :shock:

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 4:37 pm
by horacio
Gracias José Luis, aquí posteo el código

Code: Select all  Expand view

#include 'fivewin.ch'
Static oBrw2
Static oQry2

//----------------------------------------------------------------------------//
Function TablaLegajos( nCodigo, cCliente )

    Local i
    Local oFont1   
    Local oFont2   
    Local oFont3   
    Memvar oVar
   

    nCodigo  := oVar : oQry : id_empleado
    cCliente := oVar : oQry : nombre
    oQry2 := oVar : oServer : Query( 'select a.id_legajo, b.descrip as sub_emp, a.caracter, concat( cast( a.anti_anios as char ), "/", cast( anti_meses as char ) ) as antiguedad, ' +;
                                     'a.cargo, a.estado, a.horas, a.dp, a.dod, a.motivo, a.f_lic, a.f_f_lic, a.goce_sueldo, a.alta, a.suplea, a.desde, a.hasta ' +;
                                                'from legajo a, sub_emp b where id_empleado = ' + Alltrim( Str( nCodigo ) ) +;
                                                ' and a.id_empresa1 = b.empresa1 and b.empresa = ' + Alltrim( Str( oVar : nEmpresa ) ) )
   
    Define Font oFont1 Name "Segoe UI Light" Size 0, -12 Bold
    Define Font oFont2 Name "Segoe UI Light" Size 0, -12
    Define Font oFont3 Name "Segoe UI"       Size 0, -16  

    Define Window oVar : oWndChild2 MDICHILD Of oVar : oWndmain From -10, -10 To -100, -100 Pixel NoSysMenu NoCaption Title 'legajo/s de: ' + Alltrim( cCliente )//Color 0, CLR_BLACK
   
        @ 100, 20 xBrowse oBrw2 DataSource oQry2 Columns 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Size 1300, 400 Pixel Of oVar : oWndChild2 NoBorder
        With Object oBrw2
            For i := 1 To Len( :aCols )
                Switch i
                    Case 1
                        :aCols[ i ] : nWidth        := 60
                        :aCols[ i ] : cHeader       := 'Nº LEG.'
                        :aCols[ i ] : bStrData       := { || StrZero( oQry2 : id_legajo, 6 ) }
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 2
                        :aCols[ i ] : nWidth  := 260
                        :aCols[ i ] : cHeader := 'SECCIÓN'
                        :aCols[ i ] : nGrpHeight := 2
                        Exit
                    Case 3
                        :aCols[ i ] : bStrData        := { || oQry2 : caracter }
                        :aCols[ i ] : nDataStrAlign  := 2
                        :aCols[ i ] : nEditType      := EDIT_GET
                        :aCols[ i ] : bEditValue     := { || Padr( oQry2 : caracter, 1, ' ' ) }
                        //:aCols[ i ] : aEditListTxt   := { "Titular", "Suplente", "Contratado", "Prov." }
                        //:aCols[ i ] : aEditListBound := { "T", "S", "C", "P" }
                        :aCols[ i ] : bOnPostEdit    := { | o, x, n | UpdateCaracter( x ) }
                        :aCols[ i ] : cEditPicture   := '@!'
                        Exit
                    Case 4
                        :aCols[ i ] : nWidth  := 60
                        :aCols[ i ] : cHeader := 'ANTIG.'
                        Exit
                    Case 7
                        :aCols[ i ] : nWidth  := 50
                        Exit
                    Case 8
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'DESCUENTO' + CRLF + 'PRESENTISMO'
                        :aCols[ i ] : bStrData     := { || If( oQry2 : dp, 'SI', 'NO' ) }
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 9
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'DESC. OBLIG.' + CRLF + 'DÍAS'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 10
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'ARTICULO DE' + CRLF + 'LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 11
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'FECHA INICIO' + CRLF + 'DE LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 12
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'FECHA FIN' + CRLF + 'DE LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 13
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'CON O SIN ' + CRLF + 'GOCE SUELDO'
                        :aCols[ i ] : bStrData     := { || If( Valtype( oQry2 : f_lic ) == 'D' .and. !Empty( oQry2 : f_lic ) , If( oQry2 : goce_sueldo, 'CON', 'SIN'), '' ) }
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 14
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'F. DE INGRESO'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 15
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'REEMPLAZA A'
                        //:aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 16
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'F. INICIO DE' + CRLF + 'LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 17
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'F. FIN DE' + CRLF + 'LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                EndSwitch        
                :aCols[ i ] : cHeader := Upper( :aCols[ i ] : cHeader )
                :aCols[ i ] : oHeaderFont   := oFont1
                :aCols[ i ] : oDataFont     := oFont2
                :aCols[ i ] : nHeadStrAlign := 0
            Next
            :bClrHeader         := { || { 0, CLR_WHITE  } }
            :nRowHeight       := 28
            :nHeaderHeight    := 40
            :nColDividerStyle := 1
            :nRowDividerStyle := 5
            :nColAdvance      := 50
            :nColorPen        := nRgb( 225, 225, 225 )
            :nMarqueeStyle    := 3
            :nFreeze          := 2
            :nRecSelColor     := CLR_WHITE
            :bClrSelFocus     := { || { CLR_WHITE, RGB( 43, 87, 154 ) } }
            :nHeaderLines     := 2
            :lVScroll         := .f.
            :lFlatStyle       := .t.
            :l2007            := .f.
            :lKinetic         := .f.
            :lAllowRowSizing  := .f.
            :lExcelCellWise   := .t.
            :lFreezeLikeExcel := .t.
            :lFastEdit        := .t.
            :lColDividerComplete := .t.
            :bKeyDown         := { | nKey | KeyLegajos( nKey ) }  
        :SetGroupHeader( 'DATOS', 3, 14, oFont1 )
        :SetGroupHeader( 'SOLO PARA SUPLENTES', 15, 17, oFont1 )
            :CreateFromCode()
        End
        oVar : oWndChild2 : SetControl( oBrw2 )
   
    Activate Window oVar : oWndChild2 Maximized Valid ( oFont1 : End(), oFont2 : End(), oFont3 : End(), .t. )
    Return 0
   
//----------------------------------------------------------------------------//
Function UpdateCaracter( x )

    Local cUpdate := 'update legajo set caracter = ' + ClipValue2Sql( x ) + ' where id_legajo = ' + Alltrim( Str( oQry2 : id_legajo ) )
   
    ? 'update legajo set caracter = ' + ClipValue2Sql( x ) + ' where id_legajo = ' + Alltrim( Str( oQry2 : id_legajo ) )
    Memvar -> oVar : oServer : Execute( cUpdate )
    oQry2 : Refresh()
    oBrw2 : Refresh()
    Return 0

//----------------------------------------------------------------------------//
Function KeyLegajos( nKey )

    Memvar oVar
   
    Switch nKey
        Case VK_F7
            oVar : nOpcion := 1
            ElijeOpcion()
            Exit
    EndSwitch
    Return 0   
 


Saludos

Re: Error al editar columna en xbrowse

PostPosted: Tue Mar 01, 2016 7:15 pm
by joseluisysturiz
horacio wrote:Gracias José Luis, aquí posteo el código

Code: Select all  Expand view

#include 'fivewin.ch'
Static oBrw2
Static oQry2

//----------------------------------------------------------------------------//
Function TablaLegajos( nCodigo, cCliente )

    Local i
    Local oFont1   
    Local oFont2   
    Local oFont3   
    Memvar oVar
   

    nCodigo  := oVar : oQry : id_empleado
    cCliente := oVar : oQry : nombre
    oQry2 := oVar : oServer : Query( 'select a.id_legajo, b.descrip as sub_emp, a.caracter, concat( cast( a.anti_anios as char ), "/", cast( anti_meses as char ) ) as antiguedad, ' +;
                                     'a.cargo, a.estado, a.horas, a.dp, a.dod, a.motivo, a.f_lic, a.f_f_lic, a.goce_sueldo, a.alta, a.suplea, a.desde, a.hasta ' +;
                                                'from legajo a, sub_emp b where id_empleado = ' + Alltrim( Str( nCodigo ) ) +;
                                                ' and a.id_empresa1 = b.empresa1 and b.empresa = ' + Alltrim( Str( oVar : nEmpresa ) ) )
   
    Define Font oFont1 Name "Segoe UI Light" Size 0, -12 Bold
    Define Font oFont2 Name "Segoe UI Light" Size 0, -12
    Define Font oFont3 Name "Segoe UI"       Size 0, -16  

    Define Window oVar : oWndChild2 MDICHILD Of oVar : oWndmain From -10, -10 To -100, -100 Pixel NoSysMenu NoCaption Title 'legajo/s de: ' + Alltrim( cCliente )//Color 0, CLR_BLACK
   
        @ 100, 20 xBrowse oBrw2 DataSource oQry2 Columns 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 Size 1300, 400 Pixel Of oVar : oWndChild2 NoBorder
        With Object oBrw2
            For i := 1 To Len( :aCols )
                Switch i
                    Case 1
                        :aCols[ i ] : nWidth        := 60
                        :aCols[ i ] : cHeader       := 'Nº LEG.'
                        :aCols[ i ] : bStrData       := { || StrZero( oQry2 : id_legajo, 6 ) }
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 2
                        :aCols[ i ] : nWidth  := 260
                        :aCols[ i ] : cHeader := 'SECCIÓN'
                        :aCols[ i ] : nGrpHeight := 2
                        Exit
                    Case 3
                        :aCols[ i ] : bStrData        := { || oQry2 : caracter }
                        :aCols[ i ] : nDataStrAlign  := 2
                        :aCols[ i ] : nEditType      := EDIT_GET
                        :aCols[ i ] : bEditValue     := { || Padr( oQry2 : caracter, 1, ' ' ) }
                        //:aCols[ i ] : aEditListTxt   := { "Titular", "Suplente", "Contratado", "Prov." }
                        //:aCols[ i ] : aEditListBound := { "T", "S", "C", "P" }
                        :aCols[ i ] : bOnPostEdit    := { | o, x, n | UpdateCaracter( x ) }
                        :aCols[ i ] : cEditPicture   := '@!'
                        Exit
                    Case 4
                        :aCols[ i ] : nWidth  := 60
                        :aCols[ i ] : cHeader := 'ANTIG.'
                        Exit
                    Case 7
                        :aCols[ i ] : nWidth  := 50
                        Exit
                    Case 8
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'DESCUENTO' + CRLF + 'PRESENTISMO'
                        :aCols[ i ] : bStrData     := { || If( oQry2 : dp, 'SI', 'NO' ) }
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 9
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'DESC. OBLIG.' + CRLF + 'DÍAS'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 10
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'ARTICULO DE' + CRLF + 'LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 11
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'FECHA INICIO' + CRLF + 'DE LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 12
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'FECHA FIN' + CRLF + 'DE LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 13
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'CON O SIN ' + CRLF + 'GOCE SUELDO'
                        :aCols[ i ] : bStrData     := { || If( Valtype( oQry2 : f_lic ) == 'D' .and. !Empty( oQry2 : f_lic ) , If( oQry2 : goce_sueldo, 'CON', 'SIN'), '' ) }
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 14
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'F. DE INGRESO'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 15
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'REEMPLAZA A'
                        //:aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 16
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'F. INICIO DE' + CRLF + 'LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                    Case 17
                        :aCols[ i ] : nWidth       := 100
                        :aCols[ i ] : cHeader      := 'F. FIN DE' + CRLF + 'LICENCIA'
                        :aCols[ i ] : nDataStrAlign := 2
                        Exit
                EndSwitch        
                :aCols[ i ] : cHeader := Upper( :aCols[ i ] : cHeader )
                :aCols[ i ] : oHeaderFont   := oFont1
                :aCols[ i ] : oDataFont     := oFont2
                :aCols[ i ] : nHeadStrAlign := 0
            Next
            :bClrHeader         := { || { 0, CLR_WHITE  } }
            :nRowHeight       := 28
            :nHeaderHeight    := 40
            :nColDividerStyle := 1
            :nRowDividerStyle := 5
            :nColAdvance      := 50
            :nColorPen        := nRgb( 225, 225, 225 )
            :nMarqueeStyle    := 3
            :nFreeze          := 2
            :nRecSelColor     := CLR_WHITE
            :bClrSelFocus     := { || { CLR_WHITE, RGB( 43, 87, 154 ) } }
            :nHeaderLines     := 2
            :lVScroll         := .f.
            :lFlatStyle       := .t.
            :l2007            := .f.
            :lKinetic         := .f.
            :lAllowRowSizing  := .f.
            :lExcelCellWise   := .t.
            :lFreezeLikeExcel := .t.
            :lFastEdit        := .t.
            :lColDividerComplete := .t.
            :bKeyDown         := { | nKey | KeyLegajos( nKey ) }  
        :SetGroupHeader( 'DATOS', 3, 14, oFont1 )
        :SetGroupHeader( 'SOLO PARA SUPLENTES', 15, 17, oFont1 )
            :CreateFromCode()
        End
        oVar : oWndChild2 : SetControl( oBrw2 )
   
    Activate Window oVar : oWndChild2 Maximized Valid ( oFont1 : End(), oFont2 : End(), oFont3 : End(), .t. )
    Return 0
   
//----------------------------------------------------------------------------//
Function UpdateCaracter( x )

    Local cUpdate := 'update legajo set caracter = ' + ClipValue2Sql( x ) + ' where id_legajo = ' + Alltrim( Str( oQry2 : id_legajo ) )
   
    ? 'update legajo set caracter = ' + ClipValue2Sql( x ) + ' where id_legajo = ' + Alltrim( Str( oQry2 : id_legajo ) )
    Memvar -> oVar : oServer : Execute( cUpdate )
    oQry2 : Refresh()
    oBrw2 : Refresh()
    Return 0

//----------------------------------------------------------------------------//
Function KeyLegajos( nKey )

    Memvar oVar
   
    Switch nKey
        Case VK_F7
            oVar : nOpcion := 1
            ElijeOpcion()
            Exit
    EndSwitch
    Return 0   
 


Saludos


Horacio, lo unico que he visto es que tratas de hacer una edicion de celdas sobre una Consulta(query), a menos que lo hayan cambiado, hasta donde se no se puede hacer edicion en un query dentro de un xbrowse, revisa que valor te esta entregando "x" en la funcion UpdateCaracter( x ) y lo que no entiendo es porque haces esto...

? 'update legajo set caracter = ' + ClipValue2Sql( x ) + ' where id_legajo = ' + Alltrim( Str( oQry2 : id_legajo ) )

cuando ya asignastes la linea a ejecutar a la variable

Local cUpdate := 'update legajo set caracter = ' + ClipValue2Sql( x ) + ' where id_legajo = ' + Alltrim( Str( oQry2 : id_legajo ) )

confirma si cuando llegas a la funcion UpdateCaracter() te trae un valor diferente al que ves en el xbrowse, hago lo que quieres pero o mostrando la data del query en el xbrowse y luego editando los datos en un Dlg o descargo la consulta en un array que llevo al xbrowse y alli si lo puedo editar en el mismo xbrowse, saludos... :shock: