FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ADO -> Metodo Clone()
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
ADO -> Metodo Clone()
Posted: Tue Jun 02, 2009 08:14 AM

Hola a todos,

Alguien me podria explicar para q carajos sirve hacer un ::Clone() de un oRS. Vale, ya se q hace una copia referencial del oRS, pero q ventajas aporta y para y cuando se debe usar ?

Gracias.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: ADO -> Metodo Clone()
Posted: Tue Jun 02, 2009 01:41 PM

Yo lo utilizo cuando estoy mostrando el recordset en un browse y quiero hacer otra operación con ese recordset. de esta manera cada recordset mantiene su posición. Esta es una, supongo que tendrá más utilidades. Saludos

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: ADO -> Metodo Clone()
Posted: Tue Jun 02, 2009 02:02 PM

Horacio,

Si, ya he probado el tema de realizar busquedas o aplicar filtros. Realmente es mas rapido q volver a crear y ejecutar una nueva select. Entiendo que cualquier operacion que hagas es sobre el conjunto de datos seleccionados previamente con el RecordSet, o puedes realizar una nueva select ? (creo q he dicho una barbaridad...)

Saludos.
C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: ADO -> Metodo Clone()
Posted: Tue Jun 02, 2009 04:57 PM

Carles:

Ummm, me parece que no has dicho una barbaridad, pues tambien puedes hacer un nuevo SELECT de la misma tabla aunque ya tengas uno creado.

Te pongo un ejemplo donde puede aplicarse:

Supongamos que ya tienes creado un record set de toda la tabla de clientes con el cual creas un browse, ahora imagina que deseas registrar un nuevo cliente, obviamente para no duplicar el cliente debes revisar que no este registrado ya, en una aplicación monousuario no habría mayor problema pues simplemente buscas en el recordset que tienes creado y listo peroooo, si es un ambiente multiusuario (que es lo más lógico) debes estar seguro que ningun otro usuario haya dado de alta el cliente que tu pretendes registrar, en este caso con buscar en el recordset no es suficiente.

El problema es que el record set no se auto refresca con los nuevos registros que otro usuario adicione, debes hacerlo tú por código oRs:Refresh(), bien en un timer para que te refresque l recordset cada n tiempo o bien buscarlo en la tabla origen y eso lo harías creando un nuevo recordset seleccionando solamente el cliente que pretendes registrar, si el recordset te queda vacio significa que nadie más lo ha registrado antes que tú.

Aqui estamos creando dos record sets desde una misma tabla.

Ojalá me haya explicado y esto sea la respuesta a tu pregunta.

Saludos

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: ADO -> Metodo Clone()
Posted: Wed Jun 03, 2009 07:58 AM
Armando,

Gracias. He experimentado un poco y mi conclusion es: Nosotros creamos un RecordSet con seleccion de datos a gestionar. Con el :Clone(), podemos rapidamente disponer de un objeto referencia q nos permitira hacer busquedas, filtros, y manipulaciones de los datos clonados. El bookmark siempre es el mismo q el original. Podemos facilmente refrescar el clone si lo necesitamos. Y sobre el hecho de dar de altas, me parece q lo tengo mu claro. Si tengo una clave unica de codigo, manejo el gestor de errores y facilmente se si he actualizado o no. Si ya existe el registro, pues canta...

Code (fw): Select all Collapse
TRY
      ::oRs:Update()

     CATCH oError

       FOR EACH oError IN oConn:Errors
           TAdoError( oError )
       NEXT

END
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix

Continue the discussion