PDA

Ver la Versión Completa : ¿Cómo refrescar un registro de una adoQuery que ataca SQL Server?


socger
27-05-2008, 10:23:14
Muy buenas. Ante todo gracias por leerme este hilo.

Ataco una tabla en una bd en SQL Server. Mi Delphi es v.5, así que la ataco con componentes ADO. Tengo un adoQuery ligado a un adoConnection. El problema se me suscita a que tengo que refrescar un registro antes de editarlo, porque otro usuario puede habérmelo cambiado. ¿Serías tan amable de decirme cómo hacer sólo el refresco de este registro sin tener que refrescar toda la tabla ni que pierda el foco del dbGrid al registro en el que se encuentra?

Lo he solucionado refrescando toda la tabla y haciendo un locate sobre ciertos campos claves al registro donde estaba antes de hacer el refresco. Pero seguro que hay otra manera de evitar traerme por la red todos los registros, cuando sólo deseo en realidad refrescar sobre el que me encuentro.

Y ahora las gracias oportunas, por haber terminado de leer esta solicitud de ayuda sin reirte de mi (por novato) o no documentarme mejor en internet antes de hacer este hilo. Pero pensé en hacer esta consulta antes, por falta de tiempo.

Lo dicho, gracias.

tefots
27-05-2008, 11:13:06
Con ADO no puedes 'refrescar' el registro actual en el que estás posicionado en el query.
tendrias que abrir otro query obteniendo solo el registro actual , y comprobando que los datos son iguales o distintos.

no obstante , no hay que refrescar , antes de modificar , ya que tienes la posibilidad de que mientras estés modificando el registro actual ,haya alguien por red que también esté modificandolo y le de al post antes que tu.

lo que hay que hacer es controlar el .post , para que en caso de error avise al usuario , y que el usuario decida si desea cancelar sus cambios y obtener los nuevos datos , o si desea modificar el registro con los 'nuevos datos' con posibildad de perdida de informacion provocada por la modificación de los datos por parte de otro usuario..

Saludos.

socger
28-05-2008, 12:59:15
Gracias, tefots. Esto ya me lo imaginaba.

Al final lo he solucionado todo creando una tabla de semáforo, donde voy guardando contadores. Al final incluso consigo mayor rapidez que tener que ir calculando cada vez que creara un registro el max para el próximo.

Saludos y gracias.