PDA

Ver la Versión Completa : error al actualizar un registro por segunda vez


@-Soft
04-07-2006, 19:32:32
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:

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
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

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 [-] (http://www.clubdelphi.com/foros/#)
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