PDA

Ver la Versión Completa : State dsbrowse en un evento calcfields


fcobanda
28-06-2003, 19:48:01
les agradeceria mucho si alguien puede ayudarme, sucede que hace tiempo desarrolle una aplicacion con delphi 5 enterprise, pero al hacer modificaciones al mismo en algunos modulos en el evento "OnCalcFields" entra con el state = dwBrowse y me marca el error "(DataSet) not in Mode edit o insert" donde DataSet es el Tquery que estoy usando....no cambia el state a DsCalcFields y por esta razon me genera el error....el codigo que estoy usando es el siguiente y como podran ver se esta comprobando al entrar como entra.

SHOWMESSAGE('EN CALCFIELDS');
SHOWMESSAGE(VER_STATE(DmDatos3.PFactura));
SHOWMESSAGE('ORDEN ' + DmDatos3.PFacturaNO_ORDEN.AsString);

DmDatos3.PFacturasTelefonos.Value :=
DmDatos3.PFacturalTelefono.Value + ' ,' +
DmDatos3.PFacturasTelTrab.Value + ' ,' +
Dmdatos3.pfacturalcelular.value;

como podran darse cuenta lo unico que intento es concatenar los telefonos que pudiera tener un cliente en un solo campo calculado que es "sTelefonos"

Tambien me esta pasando en otro modulo que en el evento OnNewRecord entra con state dsBrowse

les agradeceria si alguien me puede ayudar, por que ya le busque y le dedique bastante tiempo a algo tan sencillo que ya he hecho muchas veces y no encuentro el error.

andres1569
28-06-2003, 20:40:29
Hola:

Ten en cuenta que Delphi sólo dispara el evento OnCalcFields tras asignar el estado dsCalcFields, otra cosa que puede suceder es que por equivocación compartas el manejador del OnCalcFields con otro evento diferente, de ahí que entre a ese código con dsBrowse. Lo mismo con el evento OnNewRecord. Otra razón es que se acceda desde otra tabla al mismo manejador de evento.

Revísalo a ver si es eso, que parece lo más probable.

SoftMakerMex
02-07-2003, 21:58:35
Quihubo...

Por lo regular el error:

"(DataSet) not in Mode edit o insert"

es el resultado de querer guardar datos en uno o varios campos de una tabla que no pusimos en modo de edición o a la cual no le agregamos un nuevo registro...

te sugiero probar lo siguiente en el código que se debe ejecutar en el evento OnCalcFields, antes de guardar los datos, indica a la tabla que se ponga en modo de edición...

Tabla.Edit;

y al finalizar de guardar los datos salva los cambios...

tabla.post;


Ejemplo:

DmDatos3.Edit;
DmDatos3.PFacturasTelefonos.Value :=
DmDatos3.PFacturalTelefono.Value + ' ,' +
DmDatos3.PFacturasTelTrab.Value + ' ,' +
Dmdatos3.pfacturalcelular.value;
DmDatos3.Post;

Espero que te sea de utilidad esta sugerencia...

hasta pronto...

andres1569
02-07-2003, 22:14:05
Hola:

No se debe llamar a Edit ni a Post dentro de un evento OnCalcFields, ya que esas mismas instrucciones, Edit y Post, disparan ese mismo evento, si AutoCalcFields es TRUE, por lo que entraríamos en un bucle recursivo.

El evento OnCalcFields es disparado por Delphi tras poner el estado del Dataset a dsCalcFields, que sí permite asignar valores a campos calculados.

Sigo pensando que se está compartiendo el manejador del OnCalcFields con otro evento que por supuesto no se lanza bajo un estado que permita asignar valores, o bien está siendo compartido por otro evento OnCalcFields de otra tabla, por ello al dispararse se estaría tratando de asignar valores no editables en ese momento.

Revisa también que no estés asignando valores a campos NO calculados.