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)
-   -   detener actualizacion o cancelar el post (https://www.clubdelphi.com/foros/showthread.php?t=26139)

Leonardo 14-10-2005 00:45:49

detener actualizacion o cancelar el post
 
Existe una manera de detener una actualizacion si se esta utilizando un datanavigator para las modificaciones del dataset, por ejemplo tengo pensado mostrar un mensaje antes de que se actualize cierto registro y dependiendo de si la persona esta de acuerdo enactualizar que se actualize si no que se cancele la actualizacion.

dec 14-10-2005 00:57:37

Hola,

No tengo mucha experiencia en ese control, así que, te pido disculpas si la respuesta no fuera acertada. En fin. ¿Qué tal si estuvieras pendiente del evento "OnClick" del "TDbNavigator", de tal manera que comprobaras el botón (pulsado) que te interese y actuar en consecuencia a partir de ahí? Quiere decirse algo así:

Código Delphi [-]
  procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
  begin
    if Button = nbPost then
    begin
      if MessageDlg('¿Quieres actualizar?', mtConfirmation, mbOKCancel, 0) = 1 then
        // De acuerdo, actualizemos
      else
        // Está bien, cancelemos
    end;
  end;

roman 14-10-2005 01:47:51

Cita:

Empezado por Leonardo
Existe una manera de detener una actualizacion si se esta utilizando un datanavigator para las modificaciones del dataset, por ejemplo tengo pensado mostrar un mensaje antes de que se actualize cierto registro y dependiendo de si la persona esta de acuerdo enactualizar que se actualize si no que se cancele la actualizacion.

En estos caso, muchas veces los más prolijo es pensar únicamente en la acción (lo marcado en negritas) y no en la causa de ésta (el dbnavigator).

Dicho de otra forma, generalmente lo importante aquí es cancelar (o no) la actualización del registro, independientemente de cómo se intenten guardar los cambios. De esta manera dependes menos de la interfaz de usuario.

Para ello es conveniente pensar, no en tal o cual control en particular, sino en el dataset asociado.

En este caso, cuentas con el evento BeforePost que se genera cuando el motor está a punto de mandar los cambios a la base:

Código Delphi [-]
const
  Flags = MB_ICONQUESTION or MB_YESNO;

begin
  if Application.MessageBox('¿Desea guardar los cambios?', 'Confirmar', Flags) = idNo then
  begin
    DataSet.Cancel;
    abort;
  end;
end;

// Saludos

dec 14-10-2005 01:51:04

Hola,

Bueno, eso es justo lo que yo quería decir, lo que pasa es que... lo que pasa es que... lo que pasa. :D :D :D

Leonardo 17-10-2005 04:53:34

Gracias roman eso era justo lo que necesitaba

FelipeDiaz 05-12-2007 17:30:28

Hola
 
Tenia esta misma Duda, y lo implemento asi como esta descrito... pero, cuando se ejecuta el Dataset.cancel;

Me manda una excepcion, diciendo que el dataset,no esta en modo insercion o Edicion.

Estare haciendo algo mal?

Todo se esta operando desde el DB NAvigator.


Saudos.

jhonny 05-12-2007 18:01:19

Cita:

Empezado por FelipeDiaz (Mensaje 250661)
Tenia esta misma Duda, y lo implemento asi como esta descrito... pero, cuando se ejecuta el Dataset.cancel;

Me manda una excepcion, diciendo que el dataset,no esta en modo insercion o Edicion.

Estare haciendo algo mal?

Todo se esta operando desde el DB NAvigator.

Seguramente lo estas haciendo en el AfterPost del DataSet, cuando deberia ser en el BeforePost ;)

FelipeDiaz 05-12-2007 18:08:56

Hola jhonny
 
Nooo, Lo estoy haciendo en el BeforePost, estaba seguro pero igual revisé y si es alli.

jhonny 05-12-2007 18:14:39

Cita:

Empezado por FelipeDiaz (Mensaje 250672)
Nooo, Lo estoy haciendo en el BeforePost, estaba seguro pero igual revisé y si es alli.

Entonces agregale lo siguiente para verificar que al momento de hacer el Cancel, el Dataset este en modo Edit o Insert y nos contas como te va:

Código Delphi [-]
const
  Flags = MB_ICONQUESTION or MB_YESNO;
begin
  if Application.MessageBox('¿Desea guardar los cambios?', 'Confirmar', Flags) = idNo then
  begin
    if (DataSet.State in [dsEdit, dsInsert]) then
    begin
      DataSet.Cancel;
      abort;
    end;
  end;
end;

FelipeDiaz 05-12-2007 18:26:11

jhonny que pena
 
Que pena Jhonny,

Resulta que al principio lo habia hecho asi y ya había probado la alternativa que me dabas, pero se me hizo igual haber utilizado la instrucción EXIT; en lugar de Abort;

Ese era el detalle, Que pena... Tenias razon!!.

Muchas Gracias!!

jhonny 05-12-2007 18:28:51

Bueno, pues que bien que ya funciona el asunto :).

P.D: roman ¿donde estasss? :D.

FelipeDiaz 16-12-2007 03:40:31

Hola Jhonny
 
Hola Jhonny.

Nuevamente vuelvo con este problema.

Mira antes yo no tenia que preguntarle al usuario si el queria cancelar o no, dentro del evento BeforePost. y me funcionó.

Ahora llegue a una parte donde si debo preguntarle en el BeforeDelete, y resulta que al colocar la intruccion:

Código Delphi [-]
 If Application.MessageBox('Desea eliminar la tabla de comisiones actual', 'Confirmar', Flags) = idNo then

o esta otra :

Código Delphi [-]
If MessageDlg('Desea eliminar la tabla de comisiones actual',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then

Resulta que el compilador no reconoce ni "Application" ni "mrYes" y me aseguré de tener la unidad Dialogs en la declaracion USES.

Ando en una plicación que la quiero hacer bien robusta, y cada dos dias es un error que me para el trabajo. y eso que al principio me leí La Cara Oculta de Delphi, pero cuando llega el momento de programar, no recuerdo haber visto sobre el tema.

Bueno, volvi a este hilo porque recorde que en la solucion que planteaste le preguntabas al usuario.... me disculpas no habia visto el P.D. Yo me encuentro en Bucaramanga.

Saludos y nuevamente gracias.


Felipe Diaz

FelipeDiaz 16-12-2007 03:48:22

DISCULPA Jhonny
 
JHONNY, QUE PENA OTRA VEZ..
En mi deseseperacion por crear un mensaje, no me habia fijado que el evento mismo manda un mensaje automatico que confirma el borrado.

Gracias.


La franja horaria es GMT +2. Ahora son las 10:28:40.

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