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)
-   -   Comprobar si existe una BD (https://www.clubdelphi.com/foros/showthread.php?t=86948)

darkamerico 26-10-2014 16:07:00

Comprobar si existe una BD
 
saludos amigos, estoy realizando una aplicación usando la librería UNIDAC (de devart) sobre Delphi 2010, y requiero comprobar si una base de datos existe a fin de evitar que la aplicación colapse y se cierre. Agradezco cualquier ayuda que puedan darme.

Atte
Americo

FGarcia 26-10-2014 19:45:31

Tal vez te falto decir que BD estas usando y en que sistema operativo y su versión y tipo

Neftali [Germán.Estévez] 27-10-2014 11:31:37

Depende de si la Base de Datos es de "tipo fichero" o de "otro tipo".
Siempre puedes intentar la conexión y capturar el correspondiente error.

darkamerico 27-10-2014 17:24:39

Saludos
 
Estoy usando un servidor de bd mysql.

Neftali [Germán.Estévez] 27-10-2014 17:36:31

Utiliza Open/Connect con un Try..Except.

roman 27-10-2014 18:21:35

Prácticamente cualquier biblioteca de conexión a bases de datos incluirá métodos para listar las bases y tablas de un servidor. Unidac no es la excepción:

Así que, sin importar el motor específico, puedes usar estos métodos y buscar en la lista (TStrings) que te devuelven, la base o tabla en cuestión.

Otra opción, específica de MySQL, es usar una consulta del tipo:

Código SQL [-]
show databases like "nombre de la base"

y ver si te devuelve algún regitro o no.

// Saludos

camiz 27-10-2014 18:31:08

Hola darkamerico,
Prueba con esto yo lo uso así en PostgreSQL, solo cambia algunas cositas y devería funcionar, suerte...


Código Delphi [-]
var
  List: TStringList;
  i :string;
  posicion :integer;
  comprobacion :boolean;
begin
  with UniConnection1 do
  begin
    Connected := False;
    ProviderName := 'PostgreSQL';
    UserName := 'postgres';
    Password := '1234';
    Server := '127.0.0.1';
    Port := 5432;
    LoginPrompt := False;
    List := TStringList.Create;
    try
      GetDatabaseNames(List);
      posicion := 0;
      List.Sort;
      comprobacion := List.Find('MyBasedeDatos',posicion);
      if comprobacion = True then
        MessageBox(0,'Base de datos encontrada','Mensaje', MB_ICONINFORMATION or MB_OK)
      else
        MessageBox(0,'La base de datos indicada no existe','Mensaje', MB_ICONSTOP or MB_OK);
    finally
      List.Free;
    end;
  end;

darkamerico 04-11-2014 02:37:29

Saludos
 
Gracias a todos por responder, lo que estoy implementando son unos indicadores gráficos en el formulario de login que me indican :
1. Si el servidor mysql esta On/Off

Lo que quería era agregar otro indicador grafico que este en verde si la BD se encuentra presente en el servidor mysql. Por eso, mi preocupación era de que forma utilizar las funciones de verificación en el OnActivate() del formulario de Login, como lo hice con el primer indicador:

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
  if(TestMySQLServer('127.0.0.1',3306)) then
    statusServer.Active:=true
  else
    statusServer.Active:=false;
end;

donde TestMySQLServer es:

Código Delphi [-]
function TForm1.TestMySQLServer(ipAddressStr:AnsiString; dwPort : Word):boolean;
var
 client : sockaddr_in;
 sock : Integer;
 ret : Integer;
 wsdata : WSAData;

begin
 Result:=False;
 ret := WSAStartup($0002, wsdata); //Inicializa Winsock
 if ret<>0 then exit;
 try
 client.sin_family := AF_INET; //Establece el protocolo a usar en este caso (IPv4)
 client.sin_port := htons(dwPort);
 client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr));
 sock :=socket(AF_INET, SOCK_STREAM, 0); //crea un socket
 Result:=connect(sock,client,SizeOf(client))=0; //Estable conexión con un socket
 finally
 WSACleanup;
 end;
end;

Si trato de usar un método de UniConnection es posible que aun no haya sido creado en ese momento y obtenga error.

Agradeceria luces en este sentido. Muchas gracias.


La franja horaria es GMT +2. Ahora son las 11:27:40.

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