Para acceder a una base de datos MySQL debes o bien tenerla instalada en el mismo ordenador o bien, si está en otro, debes tener acceso por red.
Si está en el mismo ordenador, la dirección de host del servidor sera 127.0.0.1, aunque también se puede usar el nombre "localhost".
Si está en otro ordenador, la dirección de host del servidor será la IP de ese ordenador, por eso debes estar conectado en red.
Para que VFP pueda utilizarlo, debes descargar e instalar primero (en cada ordenador donde funcionará el programa) el denominado "Driver ODBC".
Los hay más nuevos, pero yo utilizo este con resultados perfectos: www.esbiza.com/dl/odbc35116.exe
Luego, desde VFP tienes los siguientes comandos a utilizar:
Establecer conexión:
nHandle=SQLSTRINGCONNECT(lcCadena)
NHandle valdrá mayor que 0 si no hubo error, sino valdrá -1.
NHandle se conserva como variable porque se usa en los demás comandos.
LcCadena se usa para indicar todo lo necesario en una conexión: driver, ip del servidor, nombre de usuario y contraseña. Es una cadena de texto cuidadosamente armada del siguiente modo:
lcCadena=;
"Driver={MySQL ODBC 3.51 Driver} ; "+;
"Server=direcciondehost; "+;
"Option=16834; Database=basededatos; "+;
"Uid=usuario; "+;
"Pwd=password"
Una vez que tienes conexión, se usa el comando:
=SQLEXEC(nHandle, consulta)
Donde nhandle es lo que obtuviste antes, y consulta es un comando de mysql. Por ejemplo "SELECT * FROM tabla WHERE id=4"
SQLEXEC te sirve para enviar todos los comandos como INSERT, UPDATE, DELETE, etc. que no devuelven resultados.
Para un comando SELECT se usa lo mismo pero con un tercer argumento:
=SQLEXEC(nHandle, consulta, "cursor")
Cursor es un literal o variable de tipo cadena que es el nombre para crear un cursor con el resultado. O sea, la respuesta queda en un cursor de VFP que desaparece al cerrarlo con USE I]N.
Finalmente, para cerrar la conexión se usa:
=SQLDISCONNECT(nHandle)
Las conexiones deben abrirse para tareas puntuales y cerrarse nuevamente.
El criterio que yo uso es abrir una conexión para todas las tareas que deban hacerse juntas, y luego cerrarla antes de devolver el control al usuario.
Por ejemplo, en una carga de facturas, una vez que el usuario presiona "Grabar" abro una conexión, actualizo la tabla (si hubiera que actualizar 100 tablas lo hago) y cierro.
Jamás haría por ejemplo esto: abrir conexión en INIT de formulario, y cerrarla en DESTROY. No es así como funciona.
Creo que eso es todo, si tienes otras dudas, pregunta.