no me funciona setcheck

Post Reply
artu01
Posts: 306
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

no me funciona setcheck

Post by artu01 »

Gente:
Con dbf si me salía el check de un campo lógico pero con una tabla temporal en mssql usando ado no lo consigo hacer
clickeo en la columna imprime pero no me aparece el check solo el cuadradito vacio
Espero me puedan ayudar, aquí mi código.

creación de tabla temporal

Code: Select all

    cSQL := "CREATE TABLE #pfac"
    cSQL += "("
    cSQL += "numero CHAR(6) NOT NULL, "
    cSQL += "articu VARCHAR(7) NOT NULL, "
    cSQL += "descr VARCHAR(37), "
    cSQL += "um CHAR(3), "
    cSQL += "cap NUMERIC(4,0), "
    cSQL += "cantid int DEFAULT 0, "
    cSQL += "mts INT DEFAULT 0,"
    cSQL += "precio NUMERIC(12,4),"
    cSQL += "total NUMERIC(10,2),"
    cSQL += "unid int DEFAULT 0, "
    cSQL += "imprime bit DEFAULT 1,"  // campo lógico al cual le hare check
    cSQL += "subart varchar(10), "
    cSQL += "numcpe varchar(10)"
    cSQL += ")"

    Try
        oCon1:Execute( cSQL )
    Catch
        MsgInfo( "Table Create pfac Failed" )
    End try

 
Definición del xbrowse

Code: Select all

    cSQL := "SELECT articu, descr, mts, um, cap, precio, cantid, imprime, total from #pfac "
a.codusu='"+codusu+"'"

    oRs2f := TOleAuto():New( "ADODB.Recordset" )
    oRs2f:CursorLocation     := adUseClient
    oRs2f:CursorType         := adOpenStatic
    oRs2f:LockType           := adLockOptimistic

    TRY
      oRS2f:Open(cSQL,oCon1 )
      lRS := .t.
    CATCH oErr
      MsgInfo( "Error en creacion de RecordSet" )
      oCon1:Close()
      RETURN(.F.)
    END TRY

    REDEFINE XBROWSE oBrwF                              ;
        DATASOURCE oRs2f                                ;
        COLUMNS "articu", "DESCR","UM" ;
               ,"CAP", "PRECIO", "Cantid", "TOTAL", "Imprime" ;   //==> col el cual hare check
        FIELDSIZES 60,200,30,40,50,55,70,70             ;
        HEADERS "Codigo"                                ;
              ,"Descripción"                            ;
              ,"U.M."                                   ;
              ,"Cap"                                    ;
              ,"Precio"                                 ;
              ,"Cant."                                  ;
              ,"Importe"                                ;
              ,"Imprime"                                ;
        PICTURES nil,nil,nil,'9,999', '999.9999', '999,999', '999,999.99', nil ;
        ID 4018 OF oFld:aDialogs[1]                     ;                                    
        UPDATE LINES CELL

        oBrwF:nStretchCol    := STRETCHCOL_WIDEST
        oBrwF:lFastEdit:= .t.
        oBrwF:nMoveType := 0

        oBrwF:aCols[6]:nEditType := EDIT_GET
        oBrwF:aCols[6]:cDataType := "N"
        oBrwF:aCols[6]:bOnPostEdit    := { | o, x, n | UpdateCant( x, oBrwT, n), muestratotalf(oBrwT, @aArray, lCrea)}

        oBrwf:aCols[8]:bEditValue := {|| oRs2f:imprime>0 }
        oBrwf:aCols[8]:cDataType  := 'L'
        oBrwF:aCols[8]:nEditType := EDIT_GET
        oBrwF:aCols[8]:SetCheck()
        oBrwF:aCols[8]:bOnPostEdit    := { | o, x, n | UpdateEstado( x, oBrwT, n), muestratotalf(oBrwT, @aArray, lCrea) }
        oBrwF:nFreeze := 1
        oBrwF:nMarqueeStyle    = MARQSTYLE_HIGHLROW
        oBrwF:aJustify   := {.F.,.F.,.F.,.F.,.T.,.T.,.T.,.F.}
        oBrwF:bClrSel := {|| {  CLR_WHITE, GetSysColor(13 ) } }
        oBrwF:lHScroll := .t.
        oBrwF:lVScroll := .t.

        oBrwF:bLClicked := { |r,c,f,oBrw| IF( oBrwF:MouseColPos( c ) == 8, oBrwF:aCols[8]:CheckToggle(), nil ), ;   //para que sea un solo click el check
                                         oBrwF:RefreshCurrent() }

definición de function updateestado

Code: Select all

Static function UpdateEstado( x, oBrwf, n )
  oRs2f:Fields( "imprime" ):value := iif(x,.t.,.f.)
  oRs2f:Update()
  obrwf:refresh()
return 0
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
User avatar
Antonio Linares
Site Admin
Posts: 37485
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: no me funciona setcheck

Post by Antonio Linares »

Prueba así:

oBrwF:aCols[8]:bOnPostEdit := { | o, x, n | UpdateEstado( x, oBrwT, n), muestratotalf(oBrwT, @aArray, lCrea), x }

Esta línea la puedes simplificar asi:
oRs2f:Fields( "imprime" ):value := x
regards, saludos

Antonio Linares
www.fivetechsoft.com
artu01
Posts: 306
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: no me funciona setcheck

Post by artu01 »

Gracias por responder Antonio pero no logre que en el browse se muestre el check solo aparecia si le daba click a la celda pero inicialmente no mostraba el check a pesar que el dato era un campo booleana con valor 1 como puedes apreciar en mi definición de mi tabla temporal

Lo solucione cambiando el tipo de dato en mi tabla temporal de bit a char(1)

Sera que mi versión de fw es vieja o Mr. Rao falta afinar el xbrowse para que trabaje correctamente con campos booleanos de ms sql?

Code: Select all

    cSQL := "CREATE TABLE #pfac"
    cSQL += "("......"
    cSQL += "imprime char(1) DEFAULT 'S' NOT NULL"
    cSQL += ")"
definición xbrowse

Code: Select all

        oBrwf:aCols[8]:bEditValue := {|| IF( oRs2f:Fields("imprime"):Value = "S" , .T. , .F. )}
        oBrwf:aCols[8]:cDataType  := 'L'
        oBrwF:aCols[8]:nEditType := EDIT_GET
        oBrwF:aCols[8]:SetCheck()
        oBrwF:aCols[8]:bOnPostEdit    := { | o, x, n | UpdateEstado( x, oBrwT, n), muestratotalf(oBrwT, @aArray, lCrea) }

 

Code: Select all

Static function UpdateEstado( x, oBrwf, n )
  oRs2f:Fields( "imprime" ):value := iif(x,"S","N")
  oRs2f:Update()
  obrwf:refresh()
return 0
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Post Reply