Page 1 of 1

Refresh query en xbrowse con JOIN

Posted: Thu Feb 04, 2021 9:46 pm
by nlerdafehn
Hola nuevamente,

Estoy atorado con este problema.

Tengo una función que muestra información de movimientos en un xbrowse y hago un join para traer diferentes datos de unos clientes.

Esta funcion es para que elija que movimiento anular.

Este es el codigo:

Code: Select all

function AnulMov2
local cSql, hvcoti, rere
rere:= .f.

hvnum = hb_hash()

modelo:=oodbc:query('SELECT fecha, hora, caja, b.razon razon, moneda, tipo, vcotiza cotiza, vmoneda monto, vpesos pesos, a.orden orden FROM mv_cambio AS a LEFT JOIN m_cliente AS b ON a.cliente = b.codigo WHERE fecha >= date_sub(CURRENT_DATE(), INTERVAL 1 MONTH) order by a.orden DESC' )

   DEFINE FONT oBold NAME 'TAHOMA' SIZE 0,-25

   DEFINE dialog ownd2  TITLE "Anulación de Operaciones del ultimo mes"  ICON "#8001"
  
   saxx = .t.

@ 0,0 XBROWSE oBrw  OF ownd2 DATASOURCE MODELO AUTOSORT  CELL update FONT oFuentbd ; 
columns 'fecha','hora','caja','razon','tipix','moneda','cotiza','monto','pesos';
headers 'FECHA','HORA','CAJA','CLIENTE','TIPO','MONEDA','COTIZACION', 'MONTO', 'PESOS'

     oBrw:TIPO   := { || saberElTipo2( modelo:tipo ) }
     oBrw:MONTO:cEditPicture := '@e 999,999,999.99'
     oBrw:PESOS:cEditPicture := '@e 999,999,999.99'
     oBrw:COTIZACION:cEditPicture := '@e 999,999,999.99'
     oBrw:lFastEdit := .f.
     oBrw:nMoveType := 5 
     obrw:nHeaderHeight   := 40
     oBrw:bClrHeader      := { || {CLR_BLACK, METRO_GRIS7b, METRO_GRIS7b } }
     oBrw:bClrFooter      := oBrw:bClrHeader
     oBrw:nRowHeight      := 32
     oBrw:bClrRowFocus  := { || { CLR_BLACK, RGB( 185,220,255 ) } }
     oBrw:bClrSelFocus    := {|| { CLR_WHITE,CLR_7}}
     oBrw:nMarqueeStyle   := MARQSTYLE_HIGHLCELL
     oBrw:nColorPen       :=  METRO_GRIS7A
     oBrw:lFullGrid       := .f.
     oBrw:l2007           := .f. 
     oBrw:lmultiselect    := .f.
     oBrw:lExcelCellWise  := .t.
     oBrw:lFlatStyle      := .t.
     oBrw:lRecordSelector := .f.
     oBrw:lSeekWild       := .t.
     oBrw:bClrStd  := { || If( Eval( oBrw:bKeyNo,,oBrw) % 2 == 0, { METRO_GRIS5, RGB( 253, 254, 254 ) }, { METRO_GRIS5, RGB( 244, 246, 246 ) } ) }
     oBrw:lColDividerComplete := .t.
     oBrw:SetDolphin(modelo)

     oBrw:bKeyChar := { |n| If( n == VK_RETURN, 0, nil ) }
/* Aqui esta el problema */
     oBrw:bKeyChar        :=  { |n| If( n == 13,( DelMovi2(modelo:orden,2), modelo:refresh(), oBrw:SetFocus(), obrw:refresh(),  ) ,)}
     oBrw:bLDblClick      :=  { || DelMovi2(modelo:orden,2), modelo:Refresh(), oBrw:SetFocus(), oBrw:Refresh() }
/* HASTA AQUI */

     AEval( oBrw:aCols,  { |o| o:oHeaderFont := aFont1[2] } )

     sysrefresh()
       
  oBrw:CreateFromCode()
  oWnd2:oClient := oBrw

  ACTIVATE dialog oWnd2  on init( BtnBaranu05( oWnd2, obrw,oBold, 'Anular operaciones' ), oWnd2:Maximize(), oWnd2:Resize() )
  modelo:end()
return  .t.
Como veran, las dos lineas de codigo que me generan problemas son estas:

Code: Select all

oBrw:bKeyChar        :=  { |n| If( n == 13,( DelMovi2(modelo:orden,2), modelo:refresh(), oBrw:SetFocus(), obrw:refresh(),  ) ,)}
     oBrw:bLDblClick      :=  { || DelMovi2(modelo:orden,2), modelo:Refresh(), oBrw:SetFocus(), oBrw:Refresh() }
Si el usuario hace doble click o hace enter ejecuta un pop-up que le pregunta si desea eliminar o no el registro. Luego deberia actualizar la pantalla del xbrowse.

El problema radica en que si, yo en la query NO incluyo un JOIN, se genera todo perfectamente. Pero al poner un JOIN, al ejecutar modelo:Refresh(), el resultado me arroja como si en el SELECT hubiese puesto "*", ya que al abrir el objeto e inspeccionarlo, devuelve todos los datos de ambas tablas.

El xBrowse se actualiza y funciona bien, pero al devolver TODOS los datos de ambas tablas, dejan de funcionar los valores que comparten el mismo nombre en ambas tablas (ejemplo: campo orden (ID unico) ) y a su vez, pierden el alias todas las columnas.

Hay alguna manera de que el Refresh() no actue de esa manera? u otro procedimiento?

Muchas gracias.

Re: Refresh query en xbrowse con JOIN

Posted: Thu Feb 04, 2021 10:10 pm
by nlerdafehn
Es gracioso, porque estoy horas buscando una respuesta, y cuando me decido a ponerla en el foro, y sigo buscando termino encontrandola jaja :mrgreen: :lol:

Adjunto resolución por si a alguien le sirve:

Code: Select all

modelo:LoadQuery()
Hace toda la magia y ejecuta exactamente de nuevo la misma query.

Re: Refresh query en xbrowse con JOIN

Posted: Fri Feb 05, 2021 2:24 am
by nageswaragunupudi
If you use the built-in FWH MySql library, life is much easier.

oBrw:Delete() is just one call that does everything for you.