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 al actualizar un registro por segunda vez (https://www.clubdelphi.com/foros/showthread.php?t=33354)

@-Soft 04-07-2006 19:32:32

error al actualizar un registro por segunda vez
 
hola

estoy el el proceso de desarrollo de un software con delphi7, bde, paradox y tquery. al momento de yo insertar y modificar no tengo problemas, pero al momento de actualizar un mismo registro por segunda vez consecutivo me da el siguiente error:

Código:

Couldn't perform the edit because another user changed the record.
y esto solo pasa cuando trabajo con TQuery, si uso TTable no hay problemas pero no me actualiza sino hasta que cierro y abro el dataset. entonces que puedo hacer para que este error no me aparesca este error.

Salu2

nemesio 04-07-2006 20:18:48

Hola

Si trabajas con TTable, debes hacer un Post después de la inserción o Modificación. En el Evento AfterPost del Ttable, coloca : NombreTabla.FlushBuffers; esto te va permitir que se actualice la tabla sin necesidad de cerrarla.
Si trabajas con TQuery y te da ese error podría ser porque no estás cerrando la consulta antes.
Debes tener la siguiente sintaxis:

Query1.Close;
Query1.SQL.Add('........');//tu sql para la modificacion
Query1.ExecSQL;
Query1.Open;
Si estas haciendo eso y persiste el error, entonces envía el código para ver donde está el detalle.

marcoszorrilla 04-07-2006 20:37:29

Código Delphi [-]
 Query1.Close;
 Query1.SQL.Add('........');//tu sql para la modificacion
 Query1.ExecSQL;
//o
 Query1.Open;

Nemesio supongo que quieres decir que utilice ExecSql u Open dependiendo de que la consulta se de acción o de selección.

Un Saludo.

nemesio 04-07-2006 20:51:13

Si Marcos, gracias por el detalle.

@-Soft 05-07-2006 20:23:05

hola

pues el metodo que estoy usando es normal como si fuera un TTable, pero con TQuery

Código Delphi [-]
qObservaciones.Open;
   qObservaciones.Append;
   qObservacionesComp_id.Value         := fMenu.vCodCompany;
   qObservacionesPeri_id.Value         := fMenu.vPeriodo;
   qObservacionesEmat_matricula.Value  :=   qEstuSuspendidosemat_matricula.Value;
   qObservacionesSecc_id.Value         := qEstuSuspendidossecc_id.Value;
   qObservacionesObse_tipo_observ.Text := 'SUSPENDIDO';
   qObservacionesObse_observacion.Text := memObservacion.Lines.Text;
   qObservacionesUsua_usuario.Value    := fMenu.vUserLogin;
   qObservacionesObse_fecha_alta.Value := Date;
   qObservaciones.Post;
   qObservaciones.ApplyUpdates;
   qObservaciones.Close;

nemesio 06-07-2006 00:43:37

Hola

De esa forma no lo vas a hacer, tienes que hacerlo por medio de una consulta de acción y pasarle los parámetros.

Código Delphi [-]
Query1.Close;
Query1.SQL.Add('........');//tu sql para la modificacion
Query1.ParamByName('Campo1').Value:=Edit1.Text;
...
..

Query1.ExecSQL;
//o
Query1.Open;

@-Soft 06-07-2006 20:30:14

pues claro que de esta forma se puede hacer pues los TQuery Tiene casi el mismo comportamiento que un TTable con la diferencia de que los querys se usan para traer filas especificas y ejecutar sentencias sql, pero los TTables solo pueden cargar todo el contenido de una tabla en memoria y no te permite manejar valores especificos a menos que los filtre o algo asi, bueno eso es lo que tengo entendido. Ademas de que los TQuerys tienen la ventaja de que actualizan mas rapido que los TTables, activando la propiedad RequestLive y CacheUpdate. Pero aun no siguo entendiendo porque me da este error.

nemesio 06-07-2006 20:55:17

Pues bueno, yo no he logrado hacer modificaciones de esa forma sino con consultas de acción.

@-Soft 17-07-2006 15:11:15

hola


despues de realizar un analisis profundo para detectar en que momento se produce este error, los resultados fueron que al momento de realizar un ApplyUpdate es que se genera el error. Realice pruebas con un TTable y me da el mismo error a realizar un ApplyUpdate, si no lo aplico no se produce el error ni el TQuery ni en el TTable. Pero es vital que se Aplique un ApplyUpdate para que los cambios reflejen al Instante o de lo contrario me vere forsosamente a aplicar un metodo un poco otodoxo que es el de abrir y cerrar datasets al momento de aplicar el cambio, el cual no me gusta porque entiendo que a la larga pude producir algun problema de perdida de informacion, que se yo, etc.

Por favor que solucion podria yo tener para poder controlar este error, pues yo mi aplicacion esta elaborada en mas de un 50% y estoy aplicando este metodo.

Salu2


La franja horaria es GMT +2. Ahora son las 16:55:37.

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