Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBGrid. Al actualizar los datos 'No pude encontrar la fila para su actualizacion' (https://www.clubdelphi.com/foros/showthread.php?t=77486)

juliannemiro 31-01-2012 15:22:13

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.

ecfisa 01-02-2012 07:32:33

Hola Julián.

Añado la referencia al hilo inicial para evitar que te mencionen los mismos enlaces y además brindar más información a quién pueda ayudarte sobre el error.
También aprovecho a sugerirte otra organización para el código anterior:
Código Delphi [-]
procedure TFormAsistencia.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
  st: string;
begin
  with Sender as TDBGrid do
  if (SelectedField.FieldName = 'id_asistencias_tipo') and (Key in ['1'..'4']) then
  begin
    DataSource.DataSet.Edit;
    case Key of
      '1': st:= 'Presente';
      '2': st:= 'Ausente';
      '3': st:= 'Tarde';
      '4': st:= 'Retiro Anticipado';
    end;
    DataSource.DataSet.FieldByName('x_asistencia').AsString:= st;
  end;
end;

Un saludo y espero que encuentres pronto la solución.

juliannemiro 02-02-2012 04:30:02

Gracias! no se me hubiese ocurrido.
Espero que alguien me de una mano con el otro tema!


La franja horaria es GMT +2. Ahora son las 11:51:32.

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