ADO -> Metodo Clone()

ADO -> Metodo Clone()

Postby Carles » Tue Jun 02, 2009 8: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
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1095
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: ADO -> Metodo Clone()

Postby horacio » Tue Jun 02, 2009 1: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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: ADO -> Metodo Clone()

Postby Carles » Tue Jun 02, 2009 2: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
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1095
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: ADO -> Metodo Clone()

Postby Armando » Tue Jun 02, 2009 4: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
User avatar
Armando
 
Posts: 3065
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: ADO -> Metodo Clone()

Postby Carles » Wed Jun 03, 2009 7: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: Select all  Expand view

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
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1095
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

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