Alfredo Q:
Lo primero que deberías especificar es en qué registro de db_2 quieres producir una modificación. Tal vez escribiste ese código porque estás usando un SET RELATION, porque de otra forma no tiene sentido. Si no es eof(), siempre reemplazaría el mismo registro y te quedaría la última actualización.
1) Este .and. es obsoleto. Escribe solamente AND.
IF !ISDIGIT(cCharacter) AND cCharacter!='-'
2) Con la definicion cNumOnly=" " && (1 espacio) y luego cNumOnly=cNumONly+loquesea, pones un espacio al inicio de la cadena. Como reemplazas un campo completo, el primer caracter del campo será un Chr(32). Tal vez no sea lo que necesites. Yo pondría cNUmOnly="" && nada
3) Si no estás usando SET RELATION, debes proveer algún método de búsqueda de registro en la db_2 (LOCATE si no tiene índices, Seek() ó Indexseek() si tiene índices.
4) Si no se puede efectuar la modificación (Eof() puede ocurrir por tabla vacía o porque el puntero está en Eof() ), sería conveniente recoger información al respecto, por ejemplo, cuántas actualizaciones fallaron.
5) Si estás utilizando SET RELATION, revisa la relación y que la tabla db_1 tenga el SET ORDER TO adecuado.
6) Trata de que las variables tengan un nombre representativo de su empleo. Cuando defines cNumOnly, uno espera que traerá una cadena de solo números. Pero el código hace lo contrario:
Traducido:
Si No es un dígito y (además) es distinto de "-", Entonces
Agregue este caracter a la cadena
Fin
El resultado es que se ignorarán todos los dígitos y el signo "menos". Por lo tanto la cadena tendrá solo letras. Y en mi parecer debería llamarse cOnlyAlpha.
Si querías que tuviera solamente números como parece indicar el nombre de la variable, la instrucción debería ser
IF ISDIGIT(cCharacter) .AND. cCharacter!='-'