Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Eliminacion logica de un registro (https://www.clubdelphi.com/foros/showthread.php?t=81480)

DOS 17-11-2012 22:17:30

Eliminacion logica de un registro
 
Hola amigos
se me presenta un problema, tengo una tabla con clientes que esta relacionadas con otras, el usuario puede ver a todos los clientes en un DBGrid, tambien en el formulario hay botones para añadir nuevos clientes y otro para guardar los cambios.
El asunto que en el boton eliminar no lo quiero borrar completamente solo que el usuario crea que lo hace, para poder recuperar el registro si el administrador lo cree conveniente.
la tabla cliente seria la siguente;
ID_cliente
Apellido
Nombre
Direccion
Telefono
flag //esta declarada como binaria en Paradox

Puse el campo flag ya que creo que esto ayudaria, supongo que estaria por defecto en 1 y cuando lo paso a 0 con el boton 'eliminar', me oculta esa fila (registro) Puedo agregar un Query si lo creen necesario, utilizo Delphi 7.

Otro consulta respecto a esto cuando oculte el registro se vera en el DBGrid una fila vacia?
Muchas gracias.

Casimiro Noteví 17-11-2012 22:21:03

Ese campo "flag" puede ser algo más descriptivo, por ejemplo: "visible", 1 es visible y cero es no visible, por ejemplo.
Si quieres mostrar sólo los visibles:
Código SQL [-]
select * from clientes where visible=1
que quieres mostrar los no visibles:
Código SQL [-]
select * from clientes where visible=0
que quieres mostrar todos
Código SQL [-]
select * from clientes

Que un usuario "borra" un cliente, no lo borras, sino que le cambias el valor visible a cero, y en el select de visibles ya no aparecerá.

Caral 17-11-2012 22:33:40

Hola
Crea un campo con nombre activo y defines si o no.
No presentes ese campo en el dbgrid asi no se notaran los cambios.
Saludos

DOS 17-11-2012 22:55:38

Casimiro
Supongo que lo que deberia hacer seria codificar en el Form, ya que muestro los datos en un DBGrid y los DBEdit correspondientes.
Código Delphi [-]
select * from clientes where visible=1
De esta manera estaria viendo por defecto todos los registros que esten visible en 1
y en el boton borrar
Código Delphi [-]
 select * from clientes where visible 1:=0 //o algo asi
Para que ese registro pase de visble a no visible, asi no se ve. No se como seria la codificacion correcta.
por otra parte cuando oculte el registro se vera en el DBGrid una fila vacia?
Es correcto lo que intento hacer?

Casimiro Noteví 17-11-2012 23:28:27

No entiendo lo que preguntas, pero parece que es lo mismo que antes y ya te lo he contesté :confused:

Aclara exactamente qué no entiendes.

DOS 17-11-2012 23:41:53

Basicamente donde va la codificacion, por defecto se tiene que ver al entrar al formulario todos los registros que esten activos, por eso digo si se debe codificar el Form.
Código Delphi [-]
select * from clientes where visible=1
la segunda codificacion, si puede ir algo asi en el boton eliminar, ya que la codificacion que pones no hace eso, con uno en particular.
Código Delphi [-]
select * from clientes where visible 1:=0 //o algo asi
ya que debo ocultar una sola fila la que seleccione el usuario asi la proxima vez que entre a ese formulario, ese registro no se vera y ademas quiero saber si cuando oculte el registro se vera en el DBGrid una fila vacia intercalada con los registros visbles?
Es correcto lo que intento hacer?

Casimiro Noteví 18-11-2012 00:39:31

Cita:

Empezado por DOS (Mensaje 449801)
Basicamente donde va la codificacion, por defecto se tiene que ver al entrar al formulario todos los registros que esten activos, por eso digo si se debe codificar el Form.

El Form no se codifica.

Debes tener un query que ejecute al abrir el form, algo así:
Código Delphi [-]
select * from clientes where visible=1
Ese query estará asociado a un datasource y el datasource a un dbgrid, ahí se mostrarán los registros que cumplan con esa condición de "visible=1". Evidentemente no hay ningún "hueco libre", son sólo los registros con el campo visible=1
Si alguien "borra" un registro entonces tienes otro query que sea algo así:
Código Delphi [-]
update clientes set visible=0 where codigo= :codigo
y le pasas como parámetro el codigo del registro que se está borrando, básicamente:
Código Delphi [-]
queryborrado.parambyname('codigo').asinteger := query.fieldbyname('codigo').asinteger;
queryborrado.execquery;
Esas propiedades dependen de los componentes que estés usando.

ecfisa 18-11-2012 00:47:53

Hola DOS.

Cita:

Basicamente donde va la codificacion, por defecto se tiene que ver al entrar al formulario todos los registros que esten activos, por eso digo si se debe codificar el Form.
Podés poner la sentencia SQL en tiempo de diseño desde el Object Inspector ->tuQuery-> SQL, o hacerlo por código:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with tuQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT APELLIDO, NOMBRE, DIRECCION, ...'); // el campo 'Visible' no es necesario aquí
    SQL.Add('FROM CLIENTES');
    SQL.Add('WHERE VISIBLE = 1');
    Open;
  end;
end;

Cita:

la segunda codificacion, si puede ir algo asi en el boton eliminar, ya que la codificacion que pones no hace eso
Código Delphi [-]
procedure TForm1.btnEliminarClick(Sender: TObject);
var
  bkp: string;
  id: Integer;
begin
  with tuQuery do
  begin
    id := FieldByName('CODIGO').AsInteger;
    bkp:= SQL.Text;
    SQL.Clear;
    SQL.Add('UPDATE CLIENTES SET VISIBLE = 0');
    SQL.Add('WHERE CODIGO = :PID');
    ParamByName('PID').AsInteger:= id;
    ExecSQL;
    SQL.Text:= bkp;
    Open;
  end;
end;
Cita:

ademas quiero saber si cuando oculte el registro se vera en el DBGrid una fila vacia intercalada con los registros visbles?
No.

Saludos.:)

DOS 18-11-2012 00:52:24

Muchas gracias ecfisa, ya probare el codigo. ^\||/
y gracias a todos por sus aportes.


La franja horaria es GMT +2. Ahora son las 03:19:06.

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