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.