Ver Mensaje Individual
  #9  
Antiguo 06-09-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola.

Parece ser un problema del Access 2000. Lo he probado, y simplemente no acepta subconsultas en el UPDATE (sea la subconsulta la propia tabla a modificar, o no).

Si solo fuera un problema de que la tabla es la misma en la subconsulta y en el UPDATE, bastaría con crear una vista igual a la tabla, y hacer la subconsulta sobre la vista. Pero lo he probado, y parece ser que Access no permite ningún tipo de subconsulta en el UPDATE (ni sobre la misma tabla, una vista, u otra tabla cualquiera).

El problema de utilizar cursores SQL, es que se utilizan desde procedimientos almacenados (donde se pueden indicar varias instrucciones SQL : para definir el cursor, recorrerlo, actualizar la tabla, ...), pero Access no tiene un lenguaje de procedimientos almacenados.

Así parece ser que tendrás que hacerlo todo en Delphi. Un cursor en Delphi, es un Dataset abierto con un TADOQuery, lo abres y lo puedes recorrer y modificar.

Simplemente pón un TQuery para recorrer la tabla, y otro TQuery para averiguar el valor buscado. Recorres el primer Query y para cada registro, cierras y vuelves a abrir el segundo Query, averiguando el valor que necesitas para modificar el registro actual en el primer Query.

Más o menos :

Código:
ADOQuery1.Open
while not ADOQuery1.Eof do begin
  ADOQuery2.Params.ParamValues['Codigo'] := ADOQuery1.FieldValues['Codigo'];
  ADOQuery2.Open;
  ADOQuery1.Edit;
  ADOQuery1.FieldValues['Campo'] := ADOQuery2.FieldValues['Resultado'];
  ADOQuery1.Post;
  ADOQuery2.Close;
  ADOQuery1.Next;
end;
Espero que sea esto lo que buscas.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita