Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error "DatAset not in edit or intert mode" ESTANDO EN MODO INSERT!!! (https://www.clubdelphi.com/foros/showthread.php?t=72977)

Lenny 23-03-2011 19:49:22

Error "DatAset not in edit or intert mode" ESTANDO EN MODO INSERT!!!
 
Estimados, me tiene de cabeza este error, les dejo el codigo que utilizo en un TButton:

Código Delphi [-]
procedure TOTWizard.Button1Click(Sender: TObject);
begin
BDatos.OCPRODUCTOSTAB.Insert;
BDatos.OCPRODUCTOSTAB.FieldbyName('OC').AsString := DBEdit14.Text;
BDatos.OCPRODUCTOSTAB.FieldbyName('CODIGO').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('CODIGO').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('DESCRIPCION').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('DESCRIPCION').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('PRODUCTO').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('PRODUCTO').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('MAYOR').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('MAYOR').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('DETALLE').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('DETALLE').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('CANTIDAD').AsString := Edit5.Text;
BDatos.OCPRODUCTOSTAB.FieldbyName('TOTAL').AsString := Edit4.Text;
BDatos.OCPRODUCTOSTAB.Post;
end;

A pesar de estar en modo Insert
Código Delphi [-]
begin
BDatos.OCPRODUCTOSTAB.Insert;
Al precionar el Boton me lanza este error:

Código Delphi [-]
OCPRODUCTOSTAB: Dataset not in edit or insert mode.

Gracias de antemano ante cualqueir ayuda.

Utilizo Delphi 2010, Zeos 7.0.0, MySQL.

oscarac 23-03-2011 19:54:03

y el open?

Lenny 23-03-2011 20:03:59

asi:

Código Delphi [-]
procedure TOTWizard.Button1Click(Sender: TObject);
begin
BDatos.OCPRODUCTOSTAB.Open;
BDatos.OCPRODUCTOSTAB.Insert;
BDatos.OCPRODUCTOSTAB.FieldbyName('OC').AsString := DBEdit14.Text;
BDatos.OCPRODUCTOSTAB.FieldbyName('CODIGO').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('CODIGO').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('DESCRIPCION').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('DESCRIPCION').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('PRODUCTO').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('PRODUCTO').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('MAYOR').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('MAYOR').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('DETALLE').AsString := BDatos.WPRODUCTOSTAB.FieldbyName('DETALLE').AsString;
BDatos.OCPRODUCTOSTAB.FieldbyName('CANTIDAD').AsString := Edit5.Text;
BDatos.OCPRODUCTOSTAB.FieldbyName('TOTAL').AsString := Edit4.Text;
BDatos.OCPRODUCTOSTAB.Post;
end;

Mismo error, nunca me habia pasado antes... no se que pasa!!!

gatosoft 23-03-2011 21:06:36

Amigo Lenny, ¿en que línea te sale el error?, me huele que debe haber código en ´registrado en un evento intermedio, como por ejemplo en el OnNewRecord, y allí estas asignando porpiedades y haciendo un post (no debe hacerse post en un OnNewRecord)...

Por ahora se me ocurre eso... revisa los eventos del Dataset, para confirmar esto... o mejor aun realiza un seguimiento pasoa a paso con f7 para saber en que línea falla y a que eventos está entrando...

un saludo,

ecfisa 23-03-2011 21:08:01

Hola Lenny.

Sería interesante que usaras un break para ver en que línea se dispara la excepción.

Aunque no trabajo con Zeos ni MySQL, viendo tus líneas de código sólo se me ocurre que en algun evento del DataSet: 'OCPRODUCTOSTAB',
estes realizando alguna accíon que lo saque del estado dsInsert.

Quizá AfterInsert sea un buen candidato... :rolleyes:

Un saludo.

Caral 23-03-2011 21:15:19

Hola
ZTable o ZQuery?.
Si se quiere hacer un insert de una consulta (de un Zquery) generara ese error.
Si es un ZTable, no tiene explicacion.
Saludos

Lenny 23-03-2011 21:22:01

Es un ZTable... y como dices... no tiene explicacion... aun no doy con el problema... please help me!!!
E echo todo como siempre, de echo todo lo demas funciona bien, e intentado replicar solo el ingreso a la tabla y aun asi lanza el mismo error...

EDIT:

Utilizo un DataSource, ZConnection y ZTable...

Caral 23-03-2011 21:30:08

Hola
Lo unico que se me ocurre es que esto:
BDatos.WPRODUCTOSTAB.
No este Activo y no encuentre los datos.
Saludos

Lenny 23-03-2011 21:34:13

En el fondo el codigo seria asi:

Código Delphi [-]
procedure Form1.Button1Click(Sender: TObject);
begin
DataModule1.ZTable1.Open;
DataModule1.ZTable1.Insert;
DataModule1.ZTable1.FieldbyName('OC').AsString := DBEdit14.Text;
...
...
DataModule1.ZTable1.Post;
end;

No se que mas detalles puedo entregar... gracias de antemano... aps... y esta activo...

Caral 23-03-2011 21:42:32

Hola
Cabria una pregunta tonta:
El conector a la BD esta activo en el datamodule?.
Me refiero al ZConnection.
Saludos

roman 23-03-2011 21:43:57

Primero asegúrate que el Insert funcuiona, por ejemplo, con

Código Delphi [-]
DataModule1.ZTable1.Open;
DataModule1.ZTable1.Insert;

Assert(DataModule1.ZTable1.State = dsInsert);

Si salta un error de "Assertion failure" es que no puede ponerse en modo de inserción. Si esto es así, podrías revisr qué es lo que lo impide. Por ejemplo, que tengas en true la propiedad ReadOnly del DataSet.

// Saludos

Lenny 23-03-2011 21:50:37

Caral, si esta activo el ZConnection.
roman, utilizo tu codigo y no pasa nada, no error ni nada... quedo asi:

Código Delphi [-]
procedure TOTWizard.Button1Click(Sender: TObject);
begin
BDatos.OCPRODUCTOSTAB.Open;
BDatos.OCPRODUCTOSTAB.Insert;
Assert(BDatos.OCPRODUCTOSTAB.State = dsInsert);
end;

Cualquier otra duda al respecto estare pendiente, muchas gracias de antemano!!!

gatosoft 23-03-2011 21:54:32

hiciste la prueba que ecfisa y yo te sugerimos?: buscar en los eventos del dataset (onnewrecord, afterinsert)?, hacer seguimiento paso a paso al codigo?...

roman 23-03-2011 21:56:55

Aún no contestas cuál es la línea exacta del error.

// Saludos

Lenny 23-03-2011 22:40:02

Probe todo lo que me decian, pero extrañamente despues de hacer todo lo que me dijeron, mas crear las conexiones de nuevo y borrar la base de datos comenso a funcionar como si nada...

Gracias por toda la ayuda y comentarios, Tendre en cuenta los comentarios para futuros errores... GRACIAS A TODOS!!!

Al González 23-03-2011 23:21:00

Cita:

Empezado por Lenny (Mensaje 394455)
Probe todo lo que me decian, pero extrañamente despues de hacer todo lo que me dijeron, mas crear las conexiones de nuevo y borrar la base de datos comenso a funcionar como si nada...

Gracias por toda la ayuda y comentarios, Tendre en cuenta los comentarios para futuros errores... GRACIAS A TODOS!!!

Fue un poco difícil acceder a tu computadora, pero resultó un placer. :p

Ya, en serio, ojalá tengas una copia o de alguna forma puedas volver a reproducir el error, para asegurarnos de que no vaya a quedar latente (y que nos digas ahora sí cuál es la línea de código donde se elevaba la excepción). ;)

ContraVeneno 23-03-2011 23:52:53

Cita:

Empezado por Al González (Mensaje 394469)
Fue un poco difícil acceder a tu computadora, pero resultó un placer. :p


jajajaja, muy buena esa, jajajaja :D:D:D

jhonalone 24-05-2011 20:16:34

Hola a todos.
Para quien le pueda interesar: Ecfisa tiene razón.
A mí me dío el mismo error por colocar el siguiente código en el evento "AfterInsert".
Código Delphi [-]
procedure TFClien.ClienDBAfterInsert(DataSet: TDataSet);
begin
ClienDB.FlushBuffers;
end;


La franja horaria es GMT +2. Ahora son las 14:35:30.

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