Abrir una base de datos de mysql...con VFP9

Me alegra que programes en VFP, parte de mi necesidad esta ligada a ese lenguaje, entrando en materia, soy programador en VFP9, siempre he manejado .DBF, ahora tengo la necesidad de conectarme a una base de datos que alguien realizo en MYSQL, estoy en ceros, mira ya descargue el MYSQL 5.6.12.0, del sitio oficial, ya entro veo las bases de datos de pruebas, modifico, etc.., ya baje algunos ejemplos de código de VFP para conectarme a la base de datos, pero como puedo abrir o dar de alta la instancia, creo que así le dicen, de esa base de datos ya hecha, en MYSQL, ¿necesito eso antes de poder abrirla en VFP? O tu dime si la puedo abrir sin tener el MYSQL instalado y como puedo hacerlo, o que debo de tener instalado para poder abrirla en vfp, o si gustas desde ceros que debo de hacer para lograr eso.

Respuesta

Te puedo hacer una consulta

1 respuesta más de otro experto

Respuesta
2

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.

buen día, excelente respuesta, solo para finalizar, tengo que hacer una conexión de datos ODBC, en la configuración del sistema haciendo referencia a la base de datos o solamente con lo que me comentas se conecta, porque investigando leí por internet, que se tenia que hacer, ademas de instalar el DRIVER ODBC, una conexión de datos o consulta odbc, con la configuración y después hacer lo que comentas, ya para terminar con la pregunta, bueno esta, por que creo que me voy a volver cliente tuyo, jajaja, y hacerte mas preguntas referente a este tema, ya que tengo varios sistemas que me gustaría cambia a MYSQL, gracias por tu tiempo.....

No, yo no configuro DNSs de sistema ni nada de eso. Sinceramente desconozco si contribuyen en algo o son una forma alternativa.

En mi experiencia, teniendo instalado el servidor MySQL y el driver ODBC, no hace falta configurar nada en el sistema donde se ejecuta el programa. La "cadena de conexión", pasada a SQLSTRINGCONNECT(), realiza la conexión y devuelve el identificador (o handle) que se requiere en todos los demás comandos. Estoy muy satisfecho de que se pueda manejar por código sin estar alterando la configuración del sistema operativo donde se instala. Cuanto menos haya que configurar, mejor.

Pueden surgir distintos problemas de conexión, pero, si está bien hecho, con esto alcanza.

Los principales problemas tienen que ver con que un cortafuegos (el NOD32 me ha causado los mayores problemas) no te deje contactar al servidor, o que no estés enviando el nombre de usuario y contraseña adecuados tal como se configuraron en MySQL. La cadena debe ser como te indiqué, no usa comillas pero sí utiliza punto y coma para separar los argumentos.

Consejo: prueba desde la ventana de comandos de VFP, para no estar compilando tantas veces.

Ejemplo:

lcCadena="...  (ENTER)
nHandle=SQLSTRINGCONNECT(lcCadena) (ENTER)
? nHandle (ENTER)

Si te muestra un valor mayor a cero, estás conectado.

=SQLDISCONNECT(nHandle) (ENTER)

Con eso cierras.

Pon manos a la obra y si salen errores me preguntas. Eso sí: como en los foros, yo diría que vayas cerrando (y calificando!) Esta pregunta y abras otra con las dudas que surjan cuando empieces a probarlo.

Gracias por el apoyo, tengo mas dudas, pero esa te las haré como otras preguntas, para que sea justo y finalizemos los temas, je, una de ellas que te la haré después, es que si es mejor manejar la información en mysql que en dbf, pero esa es otra historia, suerte y un gran abrazo, hasta pronto.............

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas