PDA

Ver la Versión Completa : BOTON CANCEL -> Error: Table1:DataSet is not in Edit mode


amadis
12-02-2008, 23:59:56
Que tal Gente!

Tengo un pequelo problema que me esta volviendo loco.

Estoy trabajando con una tabla paradox haciendo un pequeño control para levantar pedidos de productos. (4 productos).

El problema esta en el form de edicion/alta pedidos

tengo varios dbedits (uno para idcliente, otor pera fecha y 4 para cantidades de productos)

un boton OK y un NO.

El problema es en el NO. cuando estoy agregando un nuevo registro NO ME CANCELA, me da error pedidos:DataSet is not in Edit mode.

Sinembargo chequeo mediante lo que mostrare luego y me dice que esta en estado DsInsert.

Aquí esta el boton cancelar


procedure TFnuevopedido.BTcancelarClick(Sender: TObject);
begin
if (pedidos.State = DSinsert) or (pedidos.State = DSedit)
then
begin
IF pedidos.State = dsinsert then showmessage('ins');
IF pedidos.State = dsedit then showmessage('Ed');
// de estos 2 pasos anteriores salta el SHOWMESSAGE ('INS');
datos.pedidos.Cancel;
end;
close;
end;


Y cuando llega a ejecutar el cancel me da el error de que no está en modo Edicion.

El boton de OK tiene pregunta si esta en estado de edicion o insercion y postea y luego cierra. Eso funciona.

Luego si Edito un registro antes creado y luego cancelo la EDICION, cancela correctamente.

Dentro del form en los 4 edits de cantidad de productos, hay una instruccion en el onchange de cada uno que ejecuta un procedimiento que calcula el precio, tomando el precio del producto de otra tabla y multiplicando por esa cantidad. Probe anular esa instruccion pensando que el hecho de hacer un lookup en otra tabla podria perder el estado de inserción pero sigue dando error.

Cuando hago cancelar me sale 9 veces el error de no edit mode.

:confused: ¿alguna idea?

Revisé si no había algun ";" fuera de lugar o faltante y parece que no...

Desde ya Muchas Gracias

Chris
13-02-2008, 00:19:07
Mira la diferencia en tu código:
IF pedidos.State = dsinsert then showmessage('ins');
y
datos.pedidos.Cancel;

Puede ser que no sean los mismos componentes con los que estés tratando.

Saludos.

amadis
13-02-2008, 11:50:49
Perdon, al publicar el codigo saque "datos." para ahorrar espacio, que corresponde a un datamodule donde estan los elementos de datos. Todas las tablas estan en eldatamodule datos asi que eso no es.

Gracias

Lepe
13-02-2008, 14:16:10
Pues tendrás que poner el código fuente que sí es ¿no? o ¿tenemos que adivinarlo?

Saludos