Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Chequear existencia de una BD (https://www.clubdelphi.com/foros/showthread.php?t=3862)

vichovi 22-09-2003 21:40:38

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):rolleyes:.

Gracias de antemano y un saludo.

Viet 22-09-2003 21:58:02

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

__cadetill 22-09-2003 22:17:13

Otra opcion para manteniendo el try except es la utilización de raise

Código:

    try
        msBDTmP.Connected:=true;
    except
        raise;
    end;

Así también visualizarás el error que se produce.
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,

Espero te sirva

roman 22-09-2003 23:17:48

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


La franja horaria es GMT +2. Ahora son las 05:33:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi