Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Error - Not in edit mode (https://www.clubdelphi.com/foros/showthread.php?t=52519)

Jose Roman 23-01-2008 16:54:33

Error - Not in edit mode
 
Hola a todos, Tengo Delphi 7, Firebird 2.0, MDO, un form con sus respectivos DBEdit, DataSourge, DBNavigator. La tabla de datos TIngreso esta vacia, doy clic a insertar, pero al momento de cerrar el form sin dar clic en cancelar aparece este error , que hago para que no aparezca este error si yo deseo que al momento de cerrar la aplicacion cuando mi dataset esta en dsInsert o dsEdit se pueda cancelar desde codigo, yo aplique en el evento FormClose lo siguiente:

If fbDataSet.State in dsEditModes then fbDataSet.Cancel;
trLocal.Commit;
Action := caFree;

Y aun asi sale este error, cabe notar que si estoy en modo Inser o Edit y doy clic a cancel en el DBNavigator no lo genera, y necesito cancelar cualquier cambio si el cliente cierra el form.

juanelo 23-01-2008 17:01:44

Que tal José Román,
Creo que tu error está en:

Código Delphi [-]
 If fbDataSet.State in dsEditModes then fbDataSet.Cancel;
 trLocal.Commit; // <-- Aquí
 Action := caFree;

Ya no tiene sentido hacer commit si tus modificaciones o inserciones se cancelaron.

Saludos

Jose Roman 23-01-2008 17:51:46

Nada...
 
Se reporta el mismo error....

jachguate 23-01-2008 18:52:15

Cita:

Empezado por juanelo (Mensaje 260265)
Que tal José Román,
Creo que tu error está en:

Código Delphi [-]
 If fbDataSet.State in dsEditModes then fbDataSet.Cancel;
 trLocal.Commit; // <-- Aquí
 Action := caFree;

Ya no tiene sentido hacer commit si tus modificaciones o inserciones se cancelaron.

Saludos

¡claro que tiene sentido!, solo por decir un par de casos que se me ocurren:
  • Si el nivel de aislamiento de tu transacción es "Repetable read" o "serializable" que es lo mismo, y requerís obtener información "fresca" en tu siguiente select.
  • Que tal si la aplicación correrá sin parar durante un año, no querras que tu Oldest Transaction en el servidor sea tan viejo... y tener todas las versiones de todos los registros solo por eso... si la base de datos tiene unos cuantos miles de registros, y unos cuantos millones de updates en el transcurso de un año (una tabla de existencias, es un buen ejemplo). ¡el tamaño de la base de datos sería monstruoso!

Te recuerdo que también los select's y no no solo los insert/update/delete corren en el contexto de una transacción.

Hasta luego.

;)

jachguate 23-01-2008 18:55:44

Jose Roman: ¿En cual de las líneas que mostras ocurre la excepción?

Jose Roman 23-01-2008 19:46:26

If fbDataSet.State in dsEditModes then fbDataSet.Cancel; No entiendo porque, realizo clic en el boton Insert o Edit del DBNavigator, si realizo click en el boton Cancel y cierro el Form no hay error, pero si el DataSet esta en modo Insert o Edit y lo cierro aparece el error, indicandole lo que se debe realizar en el evento OnClose;

Luis M. 23-01-2008 20:00:35

Solo por curiosidad.
No tendrás ningún código en BeforeCancel o AfterCancel del Dataset que
asignes algún valor.

Un saludo.

jachguate 23-01-2008 20:04:52

Cita:

Empezado por Luis M. (Mensaje 260313)
Solo por curiosidad.
No tendrás ningún código en BeforeCancel o AfterCancel del Dataset que
asignes algún valor.

Un saludo.

Es una buena posibilidad.

Me pregunto si lo has ejecutado paso a paso o solamente estas suponiendo que esa es la línea que produce el error.

Hasta luego.

;)

Jose Roman 23-01-2008 20:28:07

Ya encontre el error..
 
Encontre el error. El error radica en el evento OnExit de un DBEdit, en el cual le asigno un valor a un campo, mas no le informaba que debia asignarle el valor solo cuando esta en modo de Insert o Edit.

juanelo 23-01-2008 20:28:25

Cita:

Empezado por jachguate (Mensaje 260290)
¡claro que tiene sentido!, solo por decir un par de casos que se me ocurren:
  • Si el nivel de aislamiento de tu transacción es "Repetable read" o "serializable" que es lo mismo, y requerís obtener información "fresca" en tu siguiente select.
  • Que tal si la aplicación correrá sin parar durante un año, no querras que tu Oldest Transaction en el servidor sea tan viejo... y tener todas las versiones de todos los registros solo por eso... si la base de datos tiene unos cuantos miles de registros, y unos cuantos millones de updates en el transcurso de un año (una tabla de existencias, es un buen ejemplo). ¡el tamaño de la base de datos sería monstruoso!
Te recuerdo que también los select's y no no solo los insert/update/delete corren en el contexto de una transacción.

Hasta luego.

;)

Que tal,
Yo respondo en el contexto en que el amigo Jose Roman hace su pregunta

Cita:

Hola a todos, Tengo Delphi 7, Firebird 2.0, MDO, un form con sus respectivos DBEdit, DataSourge, DBNavigator. La tabla de datos TIngreso esta vacia
Entonces no creo que su tabla tenga un millón de registros ni mucho menos ;).

jachguate 23-01-2008 20:37:26

Cita:

Empezado por juanelo (Mensaje 260324)
Que tal,
Yo respondo en el contexto en que el amigo Jose Roman hace su pregunta

Entonces no creo que su tabla tenga un millón de registros ni mucho menos ;).

Jose Roman dice que actualmente la tabla está vacia. No dice cuantos datos tendrá en el futuro.

Si programasemos las aplicaciones pensando solamente en que cuando se instalan, normalmente la gran mayoría de las tablas están vacias... no quiero imaginarme el desempeño y los resultados cuándo esas aplicaciones tengan unos cuantos años en producción... :D

juanelo 23-01-2008 20:56:09

Cita:

Empezado por jachguate (Mensaje 260327)
Jose Roman dice que actualmente la tabla está vacia. No dice cuantos datos tendrá en el futuro.

Si programasemos las aplicaciones pensando solamente en que cuando se instalan, normalmente la gran mayoría de las tablas están vacias... no quiero imaginarme el desempeño y los resultados cuándo esas aplicaciones tengan unos cuantos años en producción... :D

Estoy de acuerdo, pero tambien hay que saber hacer lo que el cliente en realidad quiere, recuerdo muy bien una serie de imagenes en la cual un cliente solicita que se le contruya un columpio, y el programador termino contruyendo una montaña rusa con una llanta a modo de balancin. ¿Esta era su verdadera necesidad del usario?.
El problema que tenemos a veces es pensar en lugar del usuario, y le presentamos soluciones que van mas alla de sus necesidades.

En ninguna parte del mensaje del compañero Jose Roman menciono que su aplicacion es 24x7x365 con transacciones cada 1/2 segundo, etc ... Creeme que que si lo hubiese mencionado otra cosa hubiera sido. ;)

PD: No es mi intencion polemizar ni seguir con este debate, es mi punto de vista y ya.

jachguate 23-01-2008 21:19:47

Estoy de acuerdo en no buscar la polémica.

Normalmente no hago afirmaciones solamente en el contexto del hilo, pues la idea es que lo que acá se dice sea leido por mas gente, ahora y en el futuro, por lo que mejor si es útil para muchos.

Lamento la desviación al tema original.

egostar 23-01-2008 22:36:18

Cita:

Empezado por juanelo (Mensaje 260334)
PD: No es mi intencion polemizar ni seguir con este debate, es mi punto de vista y ya.

Cita:

Empezado por jachguate (Mensaje 260340)
Estoy de acuerdo en no buscar la polémica.

Debate, debate, debate !!!!! :D:D:D

Salud OS

eduarcol 23-01-2008 22:41:11

Cita:

Empezado por egostar (Mensaje 260373)
Debate, debate, debate !!!!! :D:D:D

Salud OS

Sereno Moreno,
Ya Egostar, calma, relajate, a ver respira conmigo 1,2,3...

egostar 23-01-2008 22:48:03

Cita:

Empezado por eduarcol (Mensaje 260374)
Sereno Moreno,
Ya Egostar, calma, relajate, a ver respira conmigo 1,2,3...

Epa eduarcol, eres un desvirtuador de hilos ya no se puede confiar en nadie...... :D:D:D

eduarcol 23-01-2008 23:09:29

Cita:

Empezado por egostar (Mensaje 260378)
Epa eduarcol, eres un desvirtuador de hilos ya no se puede confiar en nadie...... :D:D:D

Pero si yo solo estoy evitando que la sangre llegue al rio :D:D


La franja horaria es GMT +2. Ahora son las 22:37:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi