Tal como indica Hernan, el enfoque es diferente.
Primero, toda la operatoria natural del xBASE, está orientada en principio a Registro.
Primero prima, toda operatoria natural del SQL, está orientada a conjunto de registros.
Un LOCATE te ubica (o no) un registro que cumpla con las condiciones indicadas.
En un LOCATE, para recuperar el siguiente registro que cumpla la misma condición, debes hacer un CONTINUE
Un SEEK te ubica (o no) un registro que tenga un valor de clave igual al indicado.
En un SEEK, si encuetra el registro, se "posiciona sobre él", y si no, dependera del SET NEAR (te deja al final del archivo o cerca en el registro con la clave más parecida).
Para reemplazar un LOCATE con SQL, debes usar SELECT.
Un select con condiciones (WHERE) que no son sobre campos claves o que indican rangos, reemplaza al LOCATE + CONTINUE.
O sea que te crea un cursor con todos los registros que cumple con el LOCATE (en este caso, dentro del WHERE).
Para reemplazar un SEEK con SQL, debes usar SELECT.
Un select que en el WHERE pregunta por un valor comparado contra una clave primaria, te estaría devolviendo un CURSOR de un solo registro.
Lo indicado responde a cuando uso LOCATE o SEEK para leer datos.
Con SELECT, tienes como ventaja sobre LOCATE o SEEK, es que puedes traer registros de varias tablas y crear tu propio "paquete" (cursor) para trabajar, eso lo haces relacionando adecuadamente las tablas necesarias en la clausula FROM
Pero, si lo que se quiere es reemplazar (buscar y reemplazar)
Lo más simple es usar el comando UPDATE (con cuidado).
El UPDATE reemplazará datos de todos los registros que cumplan con las condiciones que se indican en el WHERE.
Si la condición iguala valor a clave primaria, modifica un registro, caso contrario, modifica varios.
El UPDATE es más potente que el REPLACE (con clausula FOR), por que en el FOR del REPLACE solo puedes hacer mención a datos en los registros de la tabla sobre la que estás trabajando o datos ya recuperados en otras tablas, previas.
En UPDATE, sobre todo en SQL de vfp9, o MSSQL Server, mysql, postgresql, puedes estar recuperando datos de otras tablas al momento de la modificación.
UPDATE Totales SET total1 = (SELECT SUM(campo1) FROM unaTabla WHERE blabla),;
total2 = (SELECT SUM(otrocampo1) FROM otraTabla WHERE otroblabla) WHERE reblabla
El SQL es un lenguaje que describe como se opera sobre los registros (recupero, actualización o borrado).
Ten en cuenta que intentará afectar todos los registros que cumplan con las condiciones del WHERE, para evitar sorpresas, antes de armar UPDATE o DELETE de SQL, chequea que traiga lo correcto con un SELECT y las mismas condiciones WHERE que piensas aplicar a UPDATEs y DELETEs.
Y lo más importante del cambio de Chip, es que con SQL, tu lógica de manejo de datos es un 90% compatible con cualquier SGBD, y eso hace que si toda la lógica de datos la transportas a SQL, tienes transportada tu lógica de datos a cualquier plataforma de desarrollo (VFP, C++, C#, Python, PHP, etc.) en un 90%.
Sugiero Aplique SQL de Groff, excelente libro sobre SQL práctico, aplicado.
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe si no tienen SQL