FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Commit y unlock
Posts: 418
Joined: Wed Nov 26, 2008 06:33 PM
Commit y unlock
Posted: Wed Sep 03, 2014 03:17 PM

Saludos.

Una cuestion de que es mejor.

ante un bloque de registro y para liberarlo se usa unlock

el commit debe ir antes del unlock o despues?

como si fuera principiante ante esto...

gracias.

Noé Aburto Sánchez
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Commit y unlock
Posted: Wed Sep 03, 2014 03:51 PM

Antes,

Para forzar el windows a grabar el registro en la base de datos.

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Commit y unlock
Posted: Thu Sep 04, 2014 12:20 AM

dUnlock hace una llamada al metodo SELF_GOCOLD que se encarga de actualizar los buffer internos y de escribir en dico si es necesario por lo que commit está implicito.

______________________________________________________________________________

Sevilla - Andalucía
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Commit y unlock
Posted: Thu Sep 04, 2014 07:23 AM

Manuel,

Aun a pesar de que pienso que conoces las interioridades Rdd de Harbour mejor que yo, veo extraño lo que dices. Simplemente, si COMMIT no hiciera nada, seguro que V. Szatkas ya lo habria eliminado de las funciones de Harbour. :)
Por experiencia, al menos en Clipper, COMMIT producia un volcado de datos.

Pensando en lo que dices, podria ser que COMMIT alzara algun flag que se tendria en cuenta en el dbUnlock(), eso podria explicar lo que tu dices.

Posts: 88
Joined: Wed Apr 28, 2010 06:34 PM
Re: Commit y unlock
Posted: Thu Sep 04, 2014 12:49 PM
Hola Noe Aburto, lo hago de esta manera, hubo un gran debate sobre el tema.

para agregar un nuevo registro
dbAppend( .F. )
IF neterr()
? "no bloqueado récord"
else
replace ......
endif

actualizar un registro
IF Rlock()
dbSetOrder( 0 )
replace ....
dbCommit()
dbUnLock()
dbSetOrder( <oldIndex> )
ELSE
? "no bloqueado récord"
ENDIF

para eliminar un registro
IF Rlock()
dbSetOrder( 0 )
DbDelete()
dbCommit()
dbUnLock()
dbSetOrder( <oldIndex> )
ELSE
? "no bloqueado récord"
ENDIF
Posts: 2706
Joined: Fri Oct 07, 2005 01:50 PM
Re: Commit y unlock
Posted: Thu Sep 04, 2014 01:04 PM

To All

Just a word of caution using dbCommit() .. for just a single record dbCommit() during an update, append or deletion is fine, however, if you are updating many records in a Do While loop, you will notice dbCommit() after each update will cause your Do While loop to become extremely slow. In cases where I am making many record changes in a Do While loop, I issue dbCommit() after the loop is finished.

From the old Clipper days, it was said that if you move the record pointer it forced the workarea buffers to be flushed to disk. In cases where I am in a Do While loop appending or editing many records, I issued a dbSkip(0) after each change. DbSkip(0) technically moves the record pointer back to itself, theoretically flushing the buffers, then once the routine was complete I used dbCommit() to issue a 'hard disk' write.

Rick Lipkin

Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Commit y unlock
Posted: Thu Sep 04, 2014 03:29 PM

No tiene nada que ver una cosa con la otra.
El dbUnLock() hace un dbcommit() pero no al contrario.
Se puede mantener el bloqueo y hacer un commit para que el cambio sea visible para otros usuarios del aplicativo en la red y no puedan borrar o modificar el registro bloqueado.
No sé si me explico bien :-)

PD: Ya hace tiempo que no miro las RDD por dentro y puede que no esté en lo cierto, es cuestión de probar :-)

______________________________________________________________________________

Sevilla - Andalucía

Continue the discussion