Refresh query en xbrowse con JOIN

Post Reply
nlerdafehn
Posts: 8
Joined: Tue Feb 02, 2021 10:21 pm
Location: Buenos Aires, Argentina
Contact:

Refresh query en xbrowse con JOIN

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

Re: Refresh query en xbrowse con JOIN

Post 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.
Nicolás
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Refresh query en xbrowse con JOIN

Post 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.
Regards

G. N. Rao.
Hyderabad, India
Post Reply