PDA

Ver la Versión Completa : Tabla no se actualiza


Alexandro
22-05-2008, 13:48:37
Hola a todos nuevamente:
Ayer me encontré con un problema y realmente no se que pasa.
Estoy usando delphi 7 y Paradox7. Tengo 2 tablas: TDatos y TAlmacen
En TDatos estan los datos reales que existen y en TAlmacen las cosas del almacen. Ahora bien, yo deseo sustituir algo en TDatos por algo que está en TAlmacen.
Entonces a TDatos le digo que localice el registro que deseo cambiar (campo unico) y que cambie la informacion del registro por una de TAlmacen y Que TAlmacen borre esa que se puso en TDatos y agregue la que quité en TDatos.
El codigo es este:


FPrincipal.TDatos.Open;
FPrincipal.TDatos.Locate('No_Inventario',FModifica.CB_Inventario_Mejora.Text,[]);
Campo1:=FPrincipal.TDatos.FieldByName('Monitor').AsString;
Campo2:=FPrincipal.TDatos.FieldByName('Monitor_Estado').AsString;
with FPrincipal.TDatos do
begin
Open;
Locate('No_Inventario',FModifica.CB_Inventario_Mejora.Text,[]);
//guardo los cambios
Edit;
FieldByName('Monitor').AsString:=QAlmacen.FieldByName('Marca').AsString;
FieldByName('Monitor_Estado').AsString:=QAlmacen.FieldByName('Estado').AsString;
Post;
Close;
end;

with TAlmacen do
begin
Open;
if Locate('Medio ; Marca',VarArrayOf(['Monitor',Campo1]),[]) then Delete;
Insert;
FieldByName('Fecha').AsDateTime:=Date;
FieldByName('No_Inventario').AsString:=FModifica.CB_Inventario_Mejora.Text;
FieldByName('Medio').AsString:='Monitor';
FieldByName('Marca').AsString:=Campo1;
FieldByName('Estado').AsString:=Campo2;
Post;
Refresh;
Close;
end;



Ahora que pasa con esto. En ocaciones TAlmacen borra el registro y agrega el que tiene que agregar, pero otras veces solo agrega y no borra el registro.
Les pido que le echen un vistazo al codigo y me digan que hay mal.
Salu2 y suerte.
Chao

basti
22-05-2008, 15:23:08
Es posible que lo haga mal cuando se introduce el un código incorrecto. El primer locate deberías ponerlo como condición de un if para comprobar el código.


FPrincipal.TDatos.Open;
if FPrincipal.TDatos.Locate('No_Inventario',FModifica.CB_Inventario_Mejora.Text,[]) then
begin
Campo1:=FPrincipal.TDatos.FieldByName('Monitor').AsString;
Campo2:=FPrincipal.TDatos.FieldByName('Monitor_Estado').AsString;
with FPrincipal.TDatos do
begin
// Open; ---> ya está abierto
// Locate('No_Inventario',FModifica.CB_Inventario_Mejora.Text,[]); --> ya se hizo arriba
//guardo los cambios
Edit;
FieldByName('Monitor').AsString:=QAlmacen.FieldByName('Marca').AsString;
FieldByName('Monitor_Estado').AsString:=QAlmacen.FieldByName('Estado').AsString;
Post;
Close;
end;

with TAlmacen do
begin
Open;
if Locate('Medio ; Marca',VarArrayOf(['Monitor',Campo1]),[]) then Delete;
Insert;
FieldByName('Fecha').AsDateTime:=Date;
FieldByName('No_Inventario').AsString:=FModifica.CB_Inventario_Mejora.Text;
FieldByName('Medio').AsString:='Monitor';
FieldByName('Marca').AsString:=Campo1;
FieldByName('Estado').AsString:=Campo2;
Post;
// Refresh; --> antes de cerrar no hace falta.
Close;
end;
end
else Application.MessageBox('Registro no encontrado', 'Error');