Página 1 de 1
Problemas con las bases de datos
Publicado: 05 Oct 2009, 17:53
por arkcrew
Hola, soy Alberto, en este tema os pregunto por la solucion de algunos errores
Como ya publique con anterioridad unaas preguntas acerca d ela conexion con bases de datos MySQL ahora preguno por la solucion de algunos problemas que me surgieron:
1-Cuando ejecuto el programa en cuestion en otro PC sin el ODBC me da un error
¿Alguien sabe que debo hacer para que funcione en programas sin el ODBC instalado?
Es de vital importancia que lo haga, sino no me sirve para nada la conexion
Hay que adjuntar alguna Dll o algo¿¿?
Os dejo el codigo qeu utilizo actualmente
Código: Seleccionar todo
#include <sql.au3>
$sql = _MySQLConnect("user","pass","dbname","server")
$SQLCode = "SELECT * FROM tabla WHERE 1"
$TableContents = _Query($sql,$SQLCode)
if $TableContents.Eof then
msgbox(0,"No hay datos","vacio")
else
$var = $TableContents.Fields ("campo1").value
msgbox(0,"Si hay datos Nombre de usuario",$var)
$var = $TableContents.Fields ("Campo2").value
msgbox(0,"Si hay datos password",$var)
endif
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 04:00
por BasicOs
Hola
Seguro que hay muchas opciones, yo te diría así rapido que incluyeras una funcion en tu escript, al principio antes de ejecutar (o sino otro escript aparte al arrancar, que te chequera si está instalado el ODBC, y en caso de que no lo este te haga automaticamente un download de la pagina del odbc, y una autoinstalación.
Esto es un pseudocódigo de como sería, puedes completar tu el código..
Código: Seleccionar todo
Function IsOdbc()
if not fileexist("elficheroodbc") then ; se puede hacer tambien buscando la clave en el registro o haciendo una llamada al odbc y esperando un error... y de más formas
download el odbc ; if error entonces msgbox que no se pudo bajar el odbc
if fileexist("elficheroodbc") then
instala el odbc
else
msgbox("0", "Error", "No se pudo instalar el Odbc")
endif
endif
EndFunc
Salu2:)
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 06:48
por Jonny
Hola
Ese error lo tendrás siempre, a menos que no instales los drivers... Es el único inconveniente que le veo a la librería.
Yo intenté hacer una librería igual qe esta, pero que conectara directamente a la base de datos por sockets, pero no hubo forma.
Tengo pendiente hacer portables los drivers e intentar averiguar como se instalan, para hacerlo a mano con autoit, pero no parece ser tan fácil ¿Alguien sabe algo sobre esto?
yo de momento, me he apañado comprobando si están instalados los drivers. Puedes saberlo con la función Mysql_Connect, si al llamarla @Error vale 2 (creo que era, hablo de memoria) qiere decir que los controladores no están instalados. Entonces, ejecuto el instalador que ya descargué hace tiempo y pauso el script hasta que estén instalados (deje de existir la ventana del instalador)
pero me gustaría más que comprobara mediante el registro si los controladores están instalados y de no ser así mediante una función de usuario en AutoIt se instalaran.
A ver si alguien nos da una pista...
Salu2!
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 10:52
por Ximorro
Pues la solución de Jonny me parece muy buena, como mucho se podría ampliar con lo de descargar de internet, para no tener que distribuir los drives con la aplicación, pero mira, si los distribuyes (si la licencia lo permite) estás cubierto ante errores de internet, por ejemplo.
Si Mysql_Connect ya te dice si el driver está instalado no hace falta mirarlo de otra manera, y lo de pausar el script hasta que se instale me parece una buena solución ¿qué más queréis que haga si es todo automático?.
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 15:11
por Jonny
Hola
Aquí dejo la función a modo de ejemplo que utilizo para el server que estoy haciendo.
Lo he subido a Sendspace, porque he adjuntado también el instalador de los controladores ODBC por si no los teneis y ocupan 3 megas y pico. El link es este:
http://www.sendspace.com/file/u6a1kd
El código está comentado para que lo entendais mejor. He adjuntado también la librería Mysql.au3 que utilizo yo (aunque las funciones parecen ser las mismas no es la que incluye AutoIt) almenos, yo la descargué a parte.
La función ajusta en $MysqlStatus el estado de la conexión con Mysql (eso lo hice para controlar la conexión en el servidor) no es relevante. Además, devuelve 0 si ocurrió un error al conectar con Mysql (usuario/password/servdidor/base de datos incorrectos), 2 si no se instalaron los controladores (bien porque se canceló la instalación en el msgbox que advierte de que los drivers no existen o porque el instalador no se encuentra en la ruta especificada (poner la que deseeis)) y por último devuelve 1 si la conexión se realizó correctamente.
Como vereis, la función espera que se cierre el programa de instalación de los controladores (podría haberse hecho de otras maneras pero así funciona bien) para continuar.
Sigo pensando, que poder portabilizar los controladores lo haría quizá más elegante en mi opinión. ya que en vez de lanzar el instalador, llamaríamos a una función que realizara directamente la instalación como corresponda, simulando para el usuario que se está realizando un proceso propio del programa (entiendo que la licencia de los controladores permitirán la difusión libremente) por lo que no debería haber ningún problema en ese sentido. Pero eso va a gusto de cada uno, evidentemente.
Espero que os guste.
salu2!
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 15:13
por arkcrew
Gracias por toda la información, intentaré hacer todo lo que me dicen
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 19:08
por BasicOs
Como comentais, puedes evitar bajarte el instalador odbc si ya lo incluyes junto con el programa, o incluso haces un Fileinstall() incluyendo el instalador dentro del ejecutable de tu programa (aunq claro engordaría un poco, pero quizas sea la mejor opción).
Creo que va a depender del tipo de distribución que vayas a hacer, el número de usuarios, pcs, incluso hacer un escript instalador del programa, etc..
También no olvidar que solo se necesita ejecutar el instalador una sola vez en la primera vez que se usa el programa, con lo que puedes incluirlo en algún proceso de instalación inicial del programa.
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 19:13
por BasicOs
Como comentais, puedes evitar bajarte el instalador odbc si ya lo incluyes junto con el programa, o incluso haces un Fileinstall() incluyendo el instalador dentro del ejecutable de tu programa (aunq claro engordaría un poco, pero quizas sea la mejor opción).
Creo que va a depender del tipo de distribución que vayas a hacer, el número de usuarios, pcs, incluso hacer un escript instalador del programa, etc..
También no olvidar que solo se necesita ejecutar el instalador una sola vez en la primera vez que se usa el programa, con lo que puedes incluirlo en algún proceso de instalación inicial del programa.
Re: Problemas con las bases de datos
Publicado: 06 Oct 2009, 19:38
por arkcrew
Creo que añadire un instalador con el inno setup y ya lo incluire todo ahi.
Re: Problemas con las bases de datos
Publicado: 07 Oct 2009, 08:49
por Ximorro
Jonny, o no sé buscarlo o la librería de MySQL no viene con AutoIT, con AutoIT viene una base de datos sencillita que se llama SQLite.
Lo del Mysql es necesario bajárselo aparte ¿no?
El hecho de que se vea el instalador original yo no lo veo un problema, siempre que sea lo más automático posible y sencillo para el usuario.
Por cierto ¿por que los códigos que pones, incluso la librería, no están indentados (tabulados)? así es mucho más difícil de leer...
Re: Problemas con las bases de datos
Publicado: 07 Oct 2009, 16:16
por arkcrew
perdon por eso,... es que ando con prisa y solo copio y pego
Re: Problemas con las bases de datos
Publicado: 07 Oct 2009, 16:40
por Jonny
Hola
sí, como dige esa udf no es la que incluye AutoIt, sinó que la descargué del foro inglés, aunque no entiendo muy bien porque la pusieron como una udf distinta a la de AutoIt, cuando parece que es la misma. Del post que la bajé (que ya no recuerdo la url) también bajé el .exe que incluyo en el ejemplo qué subí a sendspace y un script .au3, que automatizaba la instalación de los controladores. No lo he subido porque lo borré (no tenía pensado utilizarlo) aunque, no será muy difícil crear una función que automatice los 4 pasos que hay que seguir para completar la instalación.
jeje. No está tabulado, porque está hecho con el block de notas y muy a la ligera. ¿La UDF? Ni idea...
Salu2!