FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Chequear existencia de una BD
Hola a tod@s:
En primer lugar utilizo los componentes Zeos para conectar con la BD en MySQL. Para comprobar si existe un ejercicio (BD) utilizo la siguiente función: function EjercicioValido(Ejercicio:string):boolean; var msBDTmP:TZZMySqlDataBase; mstrTran:TZZMySqlTransact; begin {Ejercicio es recuperado del registro de windows y es un numero (año), por ejemplo "2003"} if ejercicio='' then begin result:=false; exit; end; msBDTmP:=TZZMySqlDataBase.Create(dmdatos); msBDTmP.Host:=dmdatos.msBD.Host; msBDTmP.Login:='root'; mstrTran:=TZZMySqlTransact.Create(dmdatos); mstrTran.Database:=msbdtmp; msBDTmP.Database:=ejercicio; msBDTmP.Connected:=false; try msBDTmP.Connected:=true; except end; result:=msBDTmP.Connected; msBDTmP.Free; mstrTran.Free; end; Si la función devuelve TRUE conecto dmdatos.msBD con el ejercicio, en caso contrario (FALSE, el ejercicio no existe) muestro una ventana para la introducción de un ejercicio válido y vuelvo a llamar a la función para ver si es válido (existe). Hasta ahora (ayer) la función iba perfectamente, pero hoy no hay manera; la función siempre me devuelve FALSE. Creo que el problema esta en MySQL, porque intento acceder a las bases de datos mediante un Front-End y tampoco hay manera. El semáforo está en verde, listo para trabajar (en principio). La versión de los componentes Zeos es la -Beta 5.3.4- y la de MySQL es la -3.23.53-. Si alguien pudiera echarme una mano lo agradeceria, primero fueron los filtro y ahora esto (sere el gafe). Gracias de antemano y un saludo.
__________________
Vivir a la deriva, sentir, que no se que hago aki... (Extremo) |
#2
|
|||
|
|||
Todo lo que haces es correcto... pero sin embargo esta funcion no devuelve si la DB existe sino que te devuelve si puede conectar o no tu aplicacion a la DB.... por lo que tendrias que sacar el Try Except para poder ver la excepcion y saber cual es el problema de la DB.....
Esa va a ser la forma mas rapida (y vas a poder ver si es un problema de usuario, permiso, error en el motor o bien si borraste la DB) Suerte
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#3
|
|||
|
|||
Otra opcion para manteniendo el try except es la utilización de raise
Código:
try msBDTmP.Connected:=true; except raise; end; Otra alternativa para visualizar el error y mostrar un mensaje al usuario algo más bonito, es capturarlo Código:
var str : string; begin ...... try msBDTmP.Connected:=true; except on E: Exception do begin str := 'Error conectado. Mensaje de error: ' + E.Message; Application.MessageBox(PChar(str), 'Atención', MB_OK); end, end; end, |
#4
|
||||
|
||||
vichovi
Para empezar te recomiendo actualizar a la versión 6.x de las componentes. Han cambiado el modelo y es lo que van a usar de ahora en adelante. Por otra parte me han paecido mucho más cómodas de usar. Por otro lado, para saber si existe o no una base de datos no es necesario usar try-except para esperar el error. Puedes mandar la consulta show databases like 'tu base de datos' al servidor. Si el dataset resultante no tiene registros es que no existe. // Saludos |
|
|
|