¿Cómo resolver un error de set de datos cerrado al ejecutar una consulta de actualización en Delphi 7?

Sigo recibiendo un error en Delphi 7 con mi aplicación que usa el motor Microsoft Jet y una database Microsoft Access (* .mdb). Estoy haciendo la connection a través de un componente TADOQuery. El error dice "No se puede realizar esta operación en un set de datos cerrado" y ocurre solo en un controller de events cuando se intenta ejecutar una consulta de ACTUALIZACIÓN:

frmHome.adoqryMain.SQL.Text := 'UPDATE Pnetworkingictions SET Complete = True WHERE UID = "'+sUID+'"'; 

El código del controller de events es el siguiente:

  procedure TfrmAdmin.bmbSubmitClick(Sender: TObject); var sScore, sEID, sPnetworkingiction, sUID : String; iRecordCount, x, iPos, iLength, iActual, iPoints, iPointsNew : Integer; rPnetworkingiction : Real; begin // Assign values to variables sScore := IntToStr(sedSuthies.Value) + '-' + IntToStr(sedOpponent.Value); iActual := sedSuthies.Value + sedOpponent.Value; sEID := frmHome.arrEID[lstEvents.ItemIndex]; // Update the score for the event in the database frmHome.adoqryMain.Active := False; frmHome.adoqryMain.SQL.Clear; frmHome.adoqryMain.SQL.Text := 'UPDATE Events SET Score = "'+sScore+'",Complete = True WHERE EID = "'+sEID+'" '; frmHome.adoqryMain.ExecSQL; frmHome.adoqryMain.SQL.Text := 'SELECT * FROM Pnetworkingictions WHERE EID = "'+sEID+'" '; frmHome.adoqryMain.Open; iRecordCount := frmHome.adoqryMain.RecordCount; //Assign points to users for all the pnetworkingictions for x := 0 to (iRecordCount - 1) do begin sUID := frmHome.adoqryMain.Fields[1].AsString; sPnetworkingiction := frmHome.adoqryMain.Fields[4].AsString; iPos := Pos('-',sPnetworkingiction) - 1; iLength := Length(sPnetworkingiction) - iPos; ShowMessage('1'); if ((sedSuthies.Value >= sedOpponent.Value) AND (StrToFloat(Copy(sPnetworkingiction, 1, iPos)) >= StrToFloat(Copy(sPnetworkingiction, iPos + 2, iLength + 1)))) OR ((sedSuthies.Value < sedOpponent.Value) AND (StrToFloat(Copy(sPnetworkingiction, 1, iPos)) < StrToFloat(Copy(sPnetworkingiction, iPos + 2, iLength + 1)))) then begin rPnetworkingiction := StrToFloat(Copy(sPnetworkingiction, iPos + 2, iLength + 1)) + StrToFloat(Copy(sPnetworkingiction, 1, iPos)); if rPnetworkingiction >= iActual then rPnetworkingiction := rPnetworkingiction - iActual else rPnetworkingiction := iActual - rPnetworkingiction; iPoints := Round(10 * (1 - (rPnetworkingiction / iActual))); end else iPoints := 0; ShowMessage('2'); frmHome.adoqryMain.Open; frmHome.adoqryMain.SQL.Text := 'UPDATE Pnetworkingictions SET Complete = True WHERE UID = "'+sUID+'"'; frmHome.adoqryMain.ExecSQL; ShowMessage('3'); ShowMessage(IntToStr(iPoints)); frmHome.adoqryMain.Next; end; ShowMessage('Score succefully submitted!'); frmHome.UpdateEventLists; end; 

Es un poco complicado en este momento, pero independientemente de lo que actualice la consulta de ACTUALIZACIÓN, siempre da este error. Intenté abrir TADOQuery, utilizando varios methods para ejecutar la consulta (con instrucciones y parameters), etc. Cualquier ayuda sería muy apreciada.

PD Las funciones de ShowMessage están ahí para eliminar errores y serán eliminadas.

Creo que veo lo que estás tratando de hacer. Está utilizando el mismo qry para search datos, y en el ciclo lo usa para actualizar la database.

Comience a usar 2 adoqueries y luego debería funcionar.

Así que Adoquerymain, y un nuevo AdoQueryInLoop

 ShowMessage('2'); frmHome.adoqryInLoop.Close; //I'm an overzealous query closer frmHome.adoqryInLoop.SQL.Text := 'UPDATE Pnetworkingictions SET Complete = True WHERE UID = "'+sUID+'"'; frmHome.adoqryInLoop.ExecSQL; ShowMessage('3');