Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   cancelar post?? (https://www.clubdelphi.com/foros/showthread.php?t=11575)

ebeltete 17-06-2004 17:57:02

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?

jachguate 17-06-2004 18:35:12

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.

;)

ebeltete 17-06-2004 19:04:51

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

roman 17-06-2004 21:07:01

¿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

marcoszorrilla 17-06-2004 21:53:24

Lo que te dicen Jachguate y Román te tiene que funcionar, también puedes probar:
Código Delphi [-]
  SysUtils.Abort;

Un Saludo.

ebeltete 17-06-2004 22:13:05

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????
:rolleyes:

marcoszorrilla 17-06-2004 22:22:35

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.

ebeltete 17-06-2004 22:36:30

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.

roman 17-06-2004 22:36:35

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

ebeltete 17-06-2004 22:46:19

gracias roman, me funciono con cancel y luego abort, un abrazo :p


La franja horaria es GMT +2. Ahora son las 02:38:52.

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