Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Tabla no se actualiza (https://www.clubdelphi.com/foros/showthread.php?t=56626)

Alexandro 22-05-2008 13:48:37

Tabla no se actualiza
 
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:

Código Delphi [-]
                            
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.

Código Delphi [-]
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');


La franja horaria es GMT +2. Ahora son las 18:41:35.

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