hmpaquito wrote:Entiendo que te refieres a Viktor. Przemek no aparece en el hilo.
Tienes razón, me lié porque fue Przemek quien me lo explicó en su momento y como se hacía.
hmpaquito wrote:Por otra parte. Imagínate un extracto de artículos vendidos a todos los clientes. Estando sobre una linea, pulsas y te muestra un nuevo extracto con los articulos vendidos al cliente de la linea. Ahí hay reentrada, incluso en modo ST. El uso de static en esas condiciones dará lugar a errores, sino se lleva cuidado.
Me parece que no es el tipo de reentrada al que se refiere el problema con las STATICs, independientemente del cuidado que hay que tener en la programación de cosas expuestas a eventos como es la programación en Windows. Los problemas de alto nivel se pueden superar con buena programación, los de bajo nivel son significatívamente más complejos.
hmpaquito wrote:PD 2. Ya tengo en marcha la exportacion mysql rapida y desatendida solo con codigo prg.
¿Y que pasa que no nos lo cuentas? Jaja.
Justamente en este momento me encuentro haciendo algo parecido: traspasar los datos de unas dbfs al servidor MySQL a medida que se escribe la aplicación nueva y se van usando los dos sistemas en paralelo. Sincronizar una tabla de pacientes es algo así como:
- Code: Select all Expand view RUN
WITH OBJECT oPacientes:= TModel():New( oServer, 'pacientes' )
USE (cDirData+'paciente.dbf' ) SHARED READONLY NEW
GO TOP
WHILE !Eof()
IF :GetById( Field->NroPac )
ELSE
:Blank()
:Id:= Field->NroPac
ENDIF
MsgWOn( 'Paciente '+Field->NroPac ) // Esto es para ir mostrando que registro estoy actualizando
:FromWorkArea()
// Las fechas vacías tienen que ir como NIL sino casca.
IF Empty(Field->FecAnam)
:FecAnam:= NIL
ENDIF
IF Empty(Field->VtoCarnet)
:VtoCarnet:= NIL
ENDIF
IF !:Update()
MsgAlert( 'Error al sincronizar: '+oServer:ErrorMessage())
QUIT
ENDIF
SKIP
ENDDO
END
La clase TModel se encarga de enviar solo lo que realmente cambia, con lo que minimiza los cambios y si no se actualiza nada no me modifica el timestamp 'updated_at' en el MySQL.