Duda a la hora de eliminar un registro

Duda a la hora de eliminar un registro

Postby jfafive » Mon Dec 14, 2009 8:26 am

Hola amigos del foro,

Estoy haciendo una aplicación Cliente-Servidor y me surge la duda siguiente:

Cuando elimino un registro, dicho registro se sigue mostrando en la pantalla de otro usuario.
Si el otro usuario decide eliminarlo tambien, justo después de que ya lo hayan aliminado,
el sistema debería devolver un mensaje de error. Sin emvargo, no devuelve ningún error.

Simplemente, ejecuta la sentencia y refresca el xbrowse con los cambios.

No entiendo porqué dá por buena la sentencia de eliminación cuando ya no hay nada que eliminar.

El código que utilizo es este:

Code: Select all  Expand view

cStrSql := "DELETE FROM codigo WHERE codigo = "A1"

TRY
   oCnnDb:Execute( cStrSql )
CATCH oError
   ShowError( oError, "
89", oCnnDb )
   PostQuitMessage( 0 )
END

oXbr:Refresh()


¿Alguna sugerencia? :?
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: Duda a la hora de eliminar un registro

Postby pablovidal » Mon Dec 14, 2009 11:46 am

Es que MySql para eso no Genera error, lo que tienes que hacer primero es verificar si el codigo existe antes de borrarlo
Saludos,

Pablo Alberto Vidal
/*
------------------------------------------------------
Harbour 3.2.0, Fivewin 17.02, BCC7
------------------------------------------------------
*/
User avatar
pablovidal
 
Posts: 401
Joined: Thu Oct 06, 2005 10:15 pm
Location: Republica Dominicana

Re: Duda a la hora de eliminar un registro

Postby Adolfo » Mon Dec 14, 2009 11:52 am

JfaFive

Si utilizas ADO , tienes en pantalla un recordset, o sea, una imagen de cierta cantidad de 'registros" de la DB resultantes del select que genero el Recordset. Parece que TMysql hace lo mismo ( no la uso , asi que solo estoy asumiendolo )

Eso significa que mientras el otro usuario no "refresque" sus datos, seguira viendo los mismos datos que consulto inicialmente ( aunque esto tenga minutos, horas.. dias ? ).

Tus opciones.
Refrescar automaticamente los datos.
Refrescar antes de eliminar.
Modificar tu funcion de borrado para consultar si el registro existe antes del borrado.

Eso..

Espero que te sirva.

Desde Chile
Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 1 TB NVME M.2, 1 TB SSD, GTX 1650
User avatar
Adolfo
 
Posts: 846
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: Duda a la hora de eliminar un registro

Postby jfafive » Mon Dec 14, 2009 12:17 pm

Muchas gracias por vuestra respuesa.

Al final he implementado un código de comprobación para verificar
si el registro a eliminar, todavia existe.

Code: Select all  Expand view

TRY

   oRsChk := TOleAuto():New( "ADODB.RecordSet" )

   // Definimos el tpo de cursor y de bloqueo.
   oRsChk:CursorLocation := adUseClient      // 3
   oRsChk:lockType          := adLockOptimistic // 3
   oRsChk:cursorType       := adOpenDynamic    // 2

   cStrSqlChk    := "SELECT COUNT(Id) AS num FROM codigos WHERE codigo = 'A1'"
   oRsChk:Source := cStrSqlChk

   oRsChk:activeConnection( oCnnDb )
   oRsChk:Open()

   if oRsChk:Fields( "num" ):Value = 0

      MsgInfo( "Este registro ya ha sido eliminado por otro usuario." )

   else

      ...........

   endif

CATCH oError

   MsgInfo( "No se pudo hacer la comprobación" )

END

 

:wink:
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 72 guests