Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 17-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.084
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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á.
Responder Con Cita
  #3  
Antiguo 17-11-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 17-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
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?
Responder Con Cita
  #5  
Antiguo 17-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.084
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo lo que preguntas, pero parece que es lo mismo que antes y ya te lo he contesté

Aclara exactamente qué no entiendes.
Responder Con Cita
  #6  
Antiguo 17-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
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?
Responder Con Cita
  #7  
Antiguo 18-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.084
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por DOS Ver Mensaje
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.
Responder Con Cita
  #8  
Antiguo 18-11-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 18-11-2012
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Muchas gracias ecfisa, ya probare el codigo.
y gracias a todos por sus aportes.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cancelar eliminación registro dvlt Varios 7 17-04-2008 15:56:42
lógica D-MO Humor 0 06-12-2005 20:32:11
Lógica no aristotélica <Sergio> OOP 0 11-06-2005 04:35:55
Lógica Formal tcp_ip_es Humor 1 28-06-2004 15:07:58
Lógica formal tcp_ip_es Humor 10 18-05-2004 00:01:57


La franja horaria es GMT +2. Ahora son las 06:07:38.


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
Copyright 1996-2007 Club Delphi