Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-06-2004
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 21
ebeltete Va por buen camino
cancelar post??

Hola a todos, tengo un tquery en Delphi 5 Tablas Paradox, antes de modificar un registro quiero consultar al usuario si realmente quiere modificarlo he hecho lo siguiente, en el evento beforepost del query:

procedure TF_OPTIMONEY.QRY_CLIENTES1BeforePost(DataSet: TDataSet);
begin
IF MESSAGEDLG ('¿Quiere cambiar los datos?',mtwarning,[mbYes,mbNo],0)=mrno then
QRY_CLIENTES1.cancel;
end;

El tema es que cuando le doy no me aparece el mensaje "keyviolation", que estoy haciendo mal?
Responder Con Cita
  #2  
Antiguo 17-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
En lugar de usar el método cancel, elevá una excepción. Puede ser la excepción "silenciosa" EAbort, y podes elevarla llamando al procedure Abort.

Código Delphi [-]
  if NoQuieroActualizar Then
    Abort;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 17-06-2004
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 21
ebeltete Va por buen camino
Gracias por tu ayuda, ya probé con abort, pero no me sale del registro, la unica forma de salir de el es grabando los datos
Responder Con Cita
  #4  
Antiguo 17-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Qué significa "no me sale del registro"?

El método que te propone jachguate debe servir y es justo lo que se indica en la descripción del evento en la ayuda de Delphi.

// Saludos
Responder Con Cita
  #5  
Antiguo 17-06-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Lo que te dicen Jachguate y Román te tiene que funcionar, también puedes probar:
Código Delphi [-]
  SysUtils.Abort;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 17-06-2004
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 21
ebeltete Va por buen camino
lo que quiero decir es que hago esto:

procedure TF_OPTIMONEY.QRY_CLIENTES1BeforePost(DataSet: TDataSet);
begin
IF MESSAGEDLG ('¿Quiere cambiar los datos?',mtwarning,[mbYes,mbNo],0)=mrno then
abort;
end;

estoy en un registro y cambio un campo de dicho registro, cuando hago tabla.next me aparece el mensaje y le doy NO y vuelve al registro en el que estaba, pero hago nuevamente tabla.next y me vuelve a aparecer el mensaje y le doy NO y me vuelve al registro y le doy tabla.next y....
no puedo salir del mismo registro si modifico un campo y presiono NO.
Esta algo entreverado pero es lo que me pasa, para mi tiene que ser con un cancel para que me cancele la modificacion del campo y vuelva a dejarlo como estaba antes de que el usuario cambiara el campo.


Aclaro o oscurezco????
Responder Con Cita
  #7  
Antiguo 17-06-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues acabo de hacer una prueba exactamente con tú código pero he descubierto que para tu propósito debe de utilizar el evento BeforeInsert:
Código Delphi [-]
procedure TForm1.Query1BeforeInsert(DataSet: TDataSet);
begin
IF MESSAGEDLG ('¿Quiere cambiar los datos?',mtwarning,[mbYes,mbNo],0)=mrno then
abort;
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #8  
Antiguo 17-06-2004
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 21
ebeltete Va por buen camino
es posible que en beforeinsert funcione, pero solo alertara en el caso de que el usuario inserte un nuevo registro, pero lo que quiero hacer es que si el usuario cambia algun campo de un determinado registro, al querer cambiarse de registro lo alerte y le pregunte si quiere grabar o no los datos.
Responder Con Cita
  #9  
Antiguo 17-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por marcoszorrilla
Pues acabo de hacer una prueba exactamente con tú código pero he descubierto que para tu propósito debe de utilizar el evento BeforeInsert
Pero el problema aquí será que sólo funcionará cuando se inserte un registro y no cuando se hagan cambios a uno existente.

En las pruebas que acabo de hacer hay dos formas de solucionarlo y básicamente es juntar lo dicho por jachguate con lo que ya había intentado elbetete:

Primera forma:

Código Delphi [-]
procedure TF_OPTIMONEY.QRY_CLIENTES1BeforePost(DataSet: TDataSet);
begin
  if NoQuiero then
  begin
    DataSet.Cancel;
    abort;
  end;
end;

Segunda forma:

Código Delphi [-]
procedure TF_OPTIMONEY.QRY_CLIENTES1BeforePost(DataSet: TDataSet);
begin
  if NoQuiero then
    abort;
end;

y rodear la llamada a Next con:

Código Delphi [-]
try
  Query1.Next;
except
  Query1.Cancel;
end;

Pero creo que la prmera forma es más correcta.

// Saludos
Responder Con Cita
  #10  
Antiguo 17-06-2004
ebeltete ebeltete is offline
Miembro
 
Registrado: may 2003
Posts: 236
Poder: 21
ebeltete Va por buen camino
gracias roman, me funciono con cancel y luego abort, un abrazo
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


La franja horaria es GMT +2. Ahora son las 15:22:57.


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