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
Evitar Insert(post) en DataSet
Comenzado por
lmpadron
, ago 03 2011 01:25
4 respuestas en este tema
#1
Escrito 03 agosto 2011 - 01:25
#2
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 !
En qué parte del código estás colocando el Edit o el Insert que nos comentas ?
Saludox !
#3
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
Por lo reguialr esa valiaciones van en beforepost de dichos componentes.
en este caso el que esta conectadoa tu datasource
#4
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.
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.
#5
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.