Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Aplicacion en red (https://www.clubdelphi.com/foros/showthread.php?t=72379)

lbidi 15-02-2011 18:34:21

Aplicacion en red
 
Estimados foristas.

No estoy seguro que este hilo este en el lugar adecuado, pido a los moderadores que lo muevan si es necesario..

Hasta ahora he tenido que desarrollar aplicaciones monousuario, ahora me surge un proyecto para utlizarlo en red. Logico.

Mi problema es el siguiente, trabajo con D2007 y Advantage. Las tablas son "planas" y se pueden manejar x SQL o directo.

Hasta ahora yo tenia en mente que cuando haciamos edit sobre un registro,
este se lockeaba hasta hacer el post, pero creo estar equivocado porque sobre la marcha he puesto dos pcs a grabar al mismo tiempo y se me han superpuesto datos.

Como se logra o se evita?? Le he puesto un try.. final.. , pero cuando el segundo pc intenta hacer el try, no puede , se va.. y no me graba..

Me explico??

He revisado casi todo el club pero no he encontrado alguna referencia.

Gracias adelantadas.

Saludos

Leo

rgstuamigo 15-02-2011 20:06:46

Revisa éste hilo haber si te sirve...;)
Saludos...:)

BlueSteel 15-02-2011 20:11:23

y podrias poner el codigo que utilizas, tanto para editar como para actualizar el registro....

cuando realizas una actualización de registro en 2 pcs diferentes, lo que hace el motor de base de datos es guardar los cambios del primer Pc y luego los cambios del segundo pc.... por lo que te quedará los cambios del 2 pc actualizados....

lo más probable es que necesites preguntar antes de editar un registro si esta en estado de edición... si se esta editando en otro pc... lanzas un mensaje que no se puede actualizar... de lo contrario lo actualizas

Salu2:p:cool:

lbidi 15-02-2011 20:55:16

Gracias amigos por responder.

rgs uso Advantage y no mysql.. Advantage tiene transacciones para la version servidor pero tambien tiene una version "local" la cual uso debido al poco tamaño de la bases, en esta version no se pueden usar transacciones.

Por lo cual debo hacer los loqueos y desloques yo mismo. Es una aplicacion de facturacion asi que mi problema se da cuando tengo que actualizar las numeradoras de las facturas.

Cuando un pc entra debo loquear el registro con el ultimo numero, actulizar el resto de las bases, incrementar el mismo y liberarlo. Cuando hay otro pc intentanto hacer lo mismo debe "esperar" ( sin mensaje ) a que se libere el registro, y haga el mismo proceso.

Lo que no puedo o no se hacer es que quede "esperando" hasta que se libere el registro.. Como la mayoria vengo de un ambiente xbase donde se hacia un loop hasta que pasaba, en Delphi no me doy cuenta como lograrlo.

Espero haber explicado un poco mas mi dilema..

El siguiente es parte de mi codigo.

Código Delphi [-]
try

    cTabla_Num.Edit;
    nUltimo := cTabla_Num.FieldByName('Estudios').AsFloat + 1;

    cTabla.First;
    while not cTabla.Eof do
    begin

        nCodigo := cTabla.FieldByName('Codigo').AsInteger;
 
        tbl_Estudios.Append;
        tbl_Estudios.Edit;
        tbl_Estudios.FieldByName('Numero').AsFloat      := nUltimo;
        tbl_Estudios.FieldByName('Fecha').AsDateTime  := edt_Fecha.Date;
        tbl_Estudios.FieldByName('Paciente').AsFloat     := cCodPaciente;
        tbl_Estudios.FieldByName('Ficha').AsFloat         := nFicha;
        tbl_Estudios.Post;

        cTabla.Next;

     end;
finally

    Qry.Close;
    cTabla_Num.FieldByName('Estudios').AsFloat := nUltimo;
    cTabla_Num.Post;

end;

Gracias por la ayuda..

Saludos

Neftali [Germán.Estévez] 16-02-2011 10:12:09

Siguiendo los enlaces de rgstuamigo (y si buscas en el club sobre bloqueos optimistas y pesimistas -seguro que encuentras más, porque hemos hablado otras veces de ellos-, link1, link2, link3) lo primero que debes tener claro es, qué tipo de bloqueos existen y cual de ellos necesitas.

rgstuamigo 16-02-2011 14:18:57

Cita:

Empezado por Neftali (Mensaje 391090)
Siguiendo los enlaces de rgstuamigo (y si buscas en el club sobre bloqueos optimistas y pesimistas -seguro que encuentras más, porque hemos hablado otras veces de ellos-, link1, link2, link3) lo primero que debes tener claro es, qué tipo de bloqueos existen y cual de ellos necesitas.

Es exactamente lo que traté de sugerir al poner el link a ese hilo,pero creo que nuestro amigo lbidi no le dió una leida profunda :D...ya que ese hilo(tema) tiene referecias hacia otros hilos donde se habla del tema, y lógicamente las diferentes soluciones que se dan pueden aplicarse en cualquier Servidor de Base de datos;;) , he ahí la importancia de leer minuciosamente, aunque el título del tema no me diga mucho o se trate de MySQL....;)
Saludos...:)

Neftali [Germán.Estévez] 16-02-2011 15:55:04

Ahora, que he vuelto a leer el emnsaje, no acabo de tener claro que estás yhaciendo una aplicación en red (como reza el título), pero estás usando una versión local. :confused::confused::confused:
¿Es correcto?

lbidi 17-02-2011 12:43:05

Si, neftali. Estoy haciendo una aplicacion en red de maximo 3 pcs.
Lo de version "local" me referia a la base de datos que uso Advantage DataBase, la cual tiene una version servidor para instalar sobre un os servidor ( lease Novell, Windows Server o Linux ), y otra "local" como access o paradox, aunque mucho mejor. Esta version local son solo un par de dlls, y es free.

Gracias por responder..


La franja horaria es GMT +2. Ahora son las 20:54:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi