Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2718

info.xailer.com: Xailer 8.1 – Mejoras en TMemDataset

$
0
0

Esta es una pequeña mejora, pero creo que es digna de mención ya que puede interesar a más de uno.

Para los puristas del modelo vista-controlador, el uso de los clásicos Data-controls de Xailer no es lo apropiado, ya que todo el proceso de edición se produce también en la vista, cuando debería realizarse en el controlador. La forma más conveniente de evitar este problema es utilizar objetos de tipo TMemDataset que devuelven un recordset de memoria que está completamente desvinculado de la tabla de la cual procede. Pero tiene el inconveniente de que las operaciones de inserción y edición son más complejas ya que requiere de la construcción de las cadenas SQL de insert y update de forma manual. Veamos como resuelve este problema Xailer 8.1 con un pequeño ejemplo:

CLASS TControlador
  oDataSource
  METHOD RSClientes( oRs )
  METHOD ClientesUpdate( oRs, nId )
END CLASS
METHOD RsClientes( oRS as CLASS TMemdataset ) CLASS TControlador
  WITH OBJECT ::oDatasource
    IF oRs != NIL
      :QueryMemDataset("SELECT * FROM CLIENTES", "", oRs )
    ELSE
      oRs := :QueryMemDataset("SELECT * FROM CLIENTES")
    ENDIF
  END WITH 
RETURN oRs
METHOD ClientesUpdate( oRS, nId ) CLASS TControlador
  WITH OBJECT ::oDatasource
    TRY
      :BeginTrans() 
      :Execute(oRs:SqlUpdate("idCliente", nId ))
      // Aquí se pueden hacer más operaciones de forma clara  
      :CommitTrans()  
    CATCH
      :RollbackTrans()
    END
  END WITH 
RETURN NIL

La operación de update se realiza en el controlador con la ventaja adicional de que podemos incluir cualquier operación dentro de la misma transacción. Para ello se utiliza el nuevo método SqlUpdate( aWhereCols, aWhereValues) que crea la instrucción SQL con sólo las columnas que han cambiado su valor. Como se puede imaginar, también hay un nuevo método de nombre SqlInsert().

Otra de las particularidades que tiene este código en su método RsClientes() que creo es muy interesante, es que el objeto TMemDataset se pasa como parámetro, en vez de crearse en el propio método y devolverse como valor de retorno, que podría ser la primera aproximación que haría cualquier programador. Esta técnica tiene una gran ventaja, que consiste en poder incorporar en el propio formulario un TMemDataset vacío e incluso vincularlo con un browse en el cual hemos definido las columnas completamente y todo de forma visual. Si nuestro método fuera el responsable de crear el TMemdatset y lo retornase como valor de retorno para luego asignarlo al browse con oBrowse:oDataset := oControlador:RsClientes(…) observariamos como todas nuestras columnas del browse desaparecerían ya que se ha asignado un nuevo dataset y eso provoca un reset de todo el control. Por el contrario si pasamos el recordset como parámetro todo se mantiene perfectamente.

Y eso es todo por ahora. En breve, más novedades.

Un saludo


Viewing all articles
Browse latest Browse all 2718

Trending Articles


Girasoles para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Tagalog Quotes About Crush – Tagalog Love Quotes


OFW quotes : Pinoy Tagalog Quotes


Long Distance Relationship Tagalog Love Quotes


Tagalog Quotes To Move on and More Love Love Love Quotes


5 Tagalog Relationship Rules


Best Crush Tagalog Quotes And Sayings 2017


Re:Mutton Pies (lleechef)


FORECLOSURE OF REAL ESTATE MORTGAGE


Sapos para colorear


tagalog love Quotes – Tiwala Quotes


Break up Quotes Tagalog Love Quote – Broken Hearted Quotes Tagalog


Patama Quotes : Tagalog Inspirational Quotes


Pamatay na Banat and Mga Patama Love Quotes


Tagalog Long Distance Relationship Love Quotes


BARKADA TAGALOG QUOTES


“BAHAY KUBO HUGOT”


Vimeo 10.7.0 by Vimeo.com, Inc.


Vimeo 10.7.1 by Vimeo.com, Inc.