Ver Mensaje Individual
  #3  
Antiguo 26-01-2006
cuburu cuburu is offline
Miembro
 
Registrado: mar 2005
Posts: 63
Reputación: 20
cuburu Va por buen camino
Por lo que veo estas utilizando un ciclo para decirle al usuario que grabe la información a pesar de que exista un error en la inserción de la información... creo yo, la verdad es que ando un poco falto de practica en ese aspecto, que si ya existe un error porque el sistema no pudo grabar la información, la operación se queda atrapando la tabla o el registro que acualizaste, lo que provoca que nadie pueda acceder a ella hasta que éste recurso sea liberado por la operación, provocando así un dead. Quizas sea por eso que los demás usuarios no puedan trabajar.

Al hacer un post lo único que haces es enviar la actualización a memoria pero a veces, y a mi me pasaba con frecuencia, cuando utilizas POST da la apariencia de que se actualiza la información pero al reiniciar el equipo o finalizar el programa y vuelves a buscar el mismo registro te das cuenta de que no fue así.

Por eso es mejor cambair el POST por un commit. Lo que hace el commit es que todas las operaciones que tienes en memoria sean enviadas a la BD.

Te recomiendo que restructures tu ciclo y que evites imponer el tener que actualizar una tabla que ya tuvo problemas al intentar actualizarse. Es mejor hacer un rollback o algo así para evitar este tipo de incidentes.

Estoy suponiendo que utilizas on objeto tipo TTable y que ingresas los datos de manera tradicional.

Yo prefiero utilizar un query, es más cómodo y te evitas de codificar un sin fin de cosas, si lo quieres hacer con un TQuery, o un objeto parecido podrías intentar algo asi:

Código Delphi [-]
Var
  Inserta: TQuery;
begin
  try
    Inserta := TQuery.create();
    try
      Inserta.Close;
      Inserta.SQL.Clear;
      Inserta.SQL.ADD('INSERT INTO Tabla1(campo1, campo2, ..., campon)' +
                            'VALUES(:C1, :C2, ...,:Cn)');
      {En lugar de asString, personalizalo al formato de campo que desees asString, asInteger, asFloat, etc.}
        Inserta.ParamByName('C1').asString := Edit1.Text;
        Inserta.ParamByName('C2').asString := Edit2.Text;
        Inserta.ParamByName('...').asString := Editn.Text;
        Inserta.ParamByName('Cn').asString := Edit3.Text;
      Inserta.Open;
    finally
      Inserta.Free;
    end;
  except
  on E:exception do
    MessageBox(Handle,PChar('Se ha generado un error al hacer la actualización' +
                     + #13 + 
                     E.Message) ,
                     'ERROR', 
                     mb_Ok);
  end;

De esta forma ejecutas una actualización en SQL. Es más entendible a mi punto de vista está mejor estructurado, además como veo que es para un sistema distribuido esto, a mi punto de vista, deberia de ser lo que debes utilizar.
Responder Con Cita