Refresh query en xbrowse con JOIN

Refresh query en xbrowse con JOIN

Postby nlerdafehn » Thu Feb 04, 2021 9:46 pm

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  Expand view  RUN
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  Expand view  RUN
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.
Nicolás
nlerdafehn
 
Posts: 50
Joined: Tue Feb 02, 2021 10:21 pm
Location: Buenos Aires, Argentina

Re: Refresh query en xbrowse con JOIN

Postby nlerdafehn » Thu Feb 04, 2021 10:10 pm

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  Expand view  RUN
modelo:LoadQuery()


Hace toda la magia y ejecuta exactamente de nuevo la misma query.
Nicolás
nlerdafehn
 
Posts: 50
Joined: Tue Feb 02, 2021 10:21 pm
Location: Buenos Aires, Argentina

Re: Refresh query en xbrowse con JOIN

Postby nageswaragunupudi » Fri Feb 05, 2021 2:24 am

If you use the built-in FWH MySql library, life is much easier.

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

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10659
Joined: Sun Nov 19, 2006 5:22 am
Location: India


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 53 guests