Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Detener acción del DataSet (https://www.clubdelphi.com/foros/showthread.php?t=75176)

lmpadron 03-08-2011 15:32:42

Detener acción del DataSet
 
Hola Amigos

Estoy creado un programilla que se conecta a MySQL, cuando un campo esta en blanco (null) SQl me devuelve el error informando que no se aceptan campos nulos, hasta ahi esta bien, pero este error me termina la aplicacion, entonces deseo crear una funcion que determine primero si hay algun campo vacio, de ser cierto entonces que me muestre un mensaje inducandomelo y que detenga la accion post, sino que no haga nada.

la funcio que cree es esta

Código:

int nullerror ()
        {
                if (DBEdit2->Text == "" || ... || !DBMemo1->Lines... etc)
                {
                        MessageDlg("Algunos campos aun están vacios, por favor llénelos" , mtWarning, TMsgDlgButtons() << mbOK, 0);
                        return 1;
                }
                else
                {
                        return 0;
                }
        }

la llamada a la función la hago en el evento Before Action del DBNavigator

Código:

void __fastcall TForm2::DBNavigator1BeforeAction(TObject *Sender,
      TNavigateBtn Button)
{

AnsiString BtnName;
  switch (Button)
  {
    case nbPost:
    {
        switch (nullerror())
        {
                case 1:
                {
                        //Como detengo el POST ??;
                        break;
                }
        }
        break;
    }
  }
}

hasta ahora funciona perfecto, el problema es que si determina que hay algunos campos vacios no se como detener el post jejeje asi que estoy en las mismas.

Alguna sugerencia ?

gracias de antemano

lmpadron 03-08-2011 17:11:34

buscando en los archivos encontré esta respuesta de hace ya algún tiempo, con este codigo se detiene el post del data set

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;

Sucede que da un error

Cita:

FELIPEDIAZ

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.
Pues si... eso mismo me pasa a mi en c++ pero bueno mas adelante dio con la solución

Cita:


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!!
Pues bien el cambia ABORT por EXIT excelente ahora bien... como se supone que lo implemente en c++ '¿¿¿ alguna idea ???

En este link esta el hilo del archivo por si desean verlo

ecfisa 03-08-2011 22:30:41

Hola lmpadron.

Para cancelar el post y evitar el mensaje DataSet not in Edit or Insert mode:
Código:

void __fastcall TForm1::DBNavigator1BeforeAction(TObject *Sender,
      TNavigateBtn Button)
{
  switch (Button){
    case nbPost: {
      switch (nullerror()) {
        case 1:{
          Abort;
        } break;
      }break;
    }
  }
}

Saludos.

lmpadron 04-08-2011 13:40:54

Muchas gracias, por su ayuda. Me funciono perfecto


La franja horaria es GMT +2. Ahora son las 09:42:47.

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