Ir al contenido


Foto

Evitar Insert(post) en DataSet


  • Por favor identifícate para responder
4 respuestas en este tema

#1 lmpadron

lmpadron

    Newbie

  • Miembros
  • Pip
  • 1 mensajes
  • Locationhavana, cuba

Escrito 03 agosto 2011 - 01:25

hola amigos

Estoy realizando una aplicación que debe realizar algunas operaciones con una BD MySQL, uso los componentes ADO. Tengo un Query, un DataSource, un DBNavigator y otros componentes para la insercion de los datos. Hasta ahi todo esta excelente, se conectan perfecto. Ahora bien, necesito comprobar si los DBEdit  que uso estan  vacios o no para evitar q el MySQL me devuelva un error.

En el evento BeforeAction del DBNavigator llamo a una funcion que me comprueba si estan llenos o no:

FUNCION
[cpp]
int nullerror ()
        {
                if (DBEdit2->Text == "" || (...) || !DBMemo1->Lines)
                {
                        MessageDlg("Algunos campos aun están vacios, por favor llenelos" , mtWarning, TMsgDlgButtons() << mbOK, 0);
                        return 1;
                }
                else
                {
                        return 0;
                }
        }
[/cpp]

Entonces en el evento BeforAction detremino si fue presionado el POST y en caso de serlo despues de correr la funcion debo detener la accion del POST para evitar el error.

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

AnsiString BtnName;
  switch (Button)
  {
    case nbPost:
    {
        switch (nullerror())
        {
                case 1:
                {
                        //aki debo detener el post !!!
                        break;
                }
        }
        break;
    }
  }
}
[/cpp]

Cuando uso

[cpp]
  DataSource1->DataSet->Cancel();
[/cpp]

Me devuelve un error diciendome que el DataSet no esta en modo de Edicion o Insercion, he tratado poniendolo en Edicion pero no pasa nada, si lo pongo en Insercion entonces me inserta los datos y el MySQL me devuelve el error porque los cqampos no pueden estar NULL

Tambien les dejo este link donde alguien ya dio con una solucion pero en delphi por si

  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 03 agosto 2011 - 03:58

Hola amigo...
En qué parte del código estás colocando el Edit o el Insert que nos comentas ?


Saludox ! :)
  • 0

#3 jmartiza

jmartiza

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 03 agosto 2011 - 09:42

Supongo que ese dbnavigator esta conectado a al Datasource que comentas y este a su vez conectadoa un compnenet de Datos descendiente de Tdataset

Por lo reguialr esa valiaciones van en beforepost de dichos componentes.

en este caso el que esta conectadoa  tu datasource


  • 0

#4 Jose_Augusto

Jose_Augusto

    Member

  • Miembros
  • PipPip
  • 35 mensajes

Escrito 06 agosto 2011 - 12:43

Hola lmpadron,

estas tratando de validar o verificar si los edits estan vacios o no, en el beforepost, yo siento que en vez que hacerlo aqui, puedes hacerlo en cada uno de los dbedit's en el evento OnExit. si esta vacio o no. o de otra forma en el onEnter del DBNavigator, aunque tomarias en cuenta las demas acciones del dbnavigator.

yo te recomiendo que la inserción la hagas con una TQuery, usando una consulta para lo mismo (INSERT INTO) pasando como parametros cada campo, es mas seguro. yo no me fío tanto de los Data Controls, porque si no validas bien tu base de datos no tienes tantas herramientas al momento de programar con estos componentes.


  • 0

#5 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 08 agosto 2011 - 07:33

La mejor forma es hacerlo en el evento onBeforePost del dataset conectado al Navigator, si no se cumplen los requisitos que estableces para grabar lo cancelas con un Abort.




  • 0




IP.Board spam blocked by CleanTalk.