Ver Mensaje Individual
  #1  
Antiguo 31-01-2012
juliannemiro juliannemiro is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 27
Reputación: 0
juliannemiro Va por buen camino
DBGrid. Al actualizar los datos 'No pude encontrar la fila para su actualizacion'

Hola a todos!

Lamentablemente mi aplicación esta sufriendo el famoso error 'No puede encontrar la fila para su actualizacion: algunos valores han cambiado desde la ultima vez que se leyó'.

Estuve revisando links que dijo ecfisa pero no coinciden con mi problema ya que: no manejo triggers, me estoy conectando yo solo a la base, no manejo imagenes y por ahora tampoco valores double.


Les cuento maso menos lo que estoy haciendo:
Trabajo en un programa que consiste en tomar listas a un curso de un instituto. La forma en lo que estoy haciendolo es por medio de una dbgrid. La DBGrid tiene su ADOTABLE, ADOQUERY y DATASOURSE.

La grilla basicamente muestra alumno, id_asistencias_tipos, x_asistencia, valor de la falta, etc.
En id_asistencias_tipo el preceptor completa por ejemplo con la letra 'P'
El valor x_asistencia entonces se refresca y aparece 'Presente'.

Pero ahi surge el error. Sin seguir una coherencia salta el error con la leyenda antes detallada. Puede ser en la primera actualizacion del estado de asistencia de un alumno, como puede aparecer cuando recien cambiar el estado del 5to alumno. La leyenda salta cuando quiere.

El problema empezó a surgir luego de que agregé estas lineas con la ayuda de ecfisa


Código Delphi [-]
procedure TFormAsistencia.DBGridMateriasCursoKeyPress(Sender: TObject;
  var Key: Char);
begin

 with Sender as TDBGrid do
   if SelectedField.FieldName = 'id_asistencias_tipo' then
   begin
     DataSourceAsistenciasGrid.DataSet.Edit;
     DBGridMateriasCurso.Columns[4].ReadOnly := false;
     Key := UpCase(Key);
     if Upcase(Key) = '1' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Presente';
     if Upcase(Key) = '2' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Ausente';
     if Upcase(Key) = '3' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Tarde';
     if Upcase(Key) = '4' then
     DataSourceAsistenciasGrid.DataSet.FieldByName('x_asistencia').AsString:= 'Retiro Anticipado';

     DBGridMateriasCurso.Columns[4].ReadOnly := true;
   end;

end;
Primero sospeché que era porque en la grilla levanta un adoquery que trae por joins campos de otras tablas y trataba de modificarlos (algo que no deberia hacer). Por eso para probar puse en el adoquery solamente select * from asistencias... y ayer anduvo todo perfecto. Pero hoy volvió a salir con el mismo error. Asique ese no era el problema, o al menos no solo es ese.

En la aplicacion guardo directamente desde la grilla. Cuando agrega un registro inicio una transaccion, y si pone guardar hace un CommitTrans. Si pone cancelar hace un rollback.

-Trabajo con SQLServer 2000 y delphi 7

Espero se entienda maso menos como funciona esta parte del sistema. Cualquier otra cosa que quieran saber me dicen.
Responder Con Cita