DBExpress, MySQL (Create Database)

Delphi

06/05/2003

Oi Pessoal.

Estou desenvolvendo uma aplicação e nela mesma coloquei a opção de o usuário criar o banco de dados.
Ele tem de entrar com IP do servidor, Login Senha e o nome da base de dados.
E é exatamente ai q está o problema. no meu código de criação do banco de dados (DDL) eu quero colocar também antes de ele criar as tabelas um comando ´Create Database MinhaBase´. só que eu naum concegui fazer isso porque na conexão do meu DBExpress eu tenho q colocar o nome da base de dados q eu quero acessar, e como que eu vou colocar o nome dela se eu ainda naum a criei?
Já tentei também colocar como base de dados akela default do MySQL a ´mysql´, mas assim não funciona o comando create.
Alguem Sabe como eu posso fazer uma conexão desse tipo para criar a minha base de dados? algum tipo de conexão low level API.
Sei lá alguma coisa .. :)


Sousa_thiago

Sousa_thiago

Curtidas 0

Respostas

Sousa_thiago

Sousa_thiago

06/05/2003

Estou precisando disso ai para automatizar a instalação do meu sistema.


GOSTEI 0
Sousa_thiago

Sousa_thiago

06/05/2003

:cry:

Poxa ninguem sabe um jeito de fazer isso naum ?


GOSTEI 0
Sousa_thiago

Sousa_thiago

06/05/2003

Será que essa minha pergunta é tão dificil assim que ninguem sabe responder?


GOSTEI 0
Robertosistemas

Robertosistemas

06/05/2003

//Caro colega aqui vai a sua solução

procedure CriaBanco(ConName, pUsuario, pSenha: String);
begin

Database := TSQLConnection.Create(nil);

// configura DataBase
DataBase.ConnectionName := ConName;
DataBase.DriverName := ´MYSQL´;
DataBase.GetDriverFunc := ´getSQLDriverMYSQL´;
DataBase.KeepConnection := True;
DataBase.LibraryName := ´dbexpmy4.dll´; // ou a versão adequada ao seu banco
DataBase.LoadParamsOnConnect := false;
DataBase.LoginPrompt := False;
DataBase.TableScope := ([tsTable] + [tsView]);
DataBase.Tag := 0;
DataBase.VendorLib := ´LIBMYSQL.dll´;

DataBase.Params.Clear;
DataBase.Params.Add(´DriverName=MYSQL´);
DataBase.Params.Add(´BlobSize=-1´);
DataBase.Params.Add(´Database=nomedobanco´);
DataBase.Params.Add(´ErrorResourceFile=´);
DataBase.Params.Add(´HostName=nome do host ou ip´);
DataBase.Params.Add(´LocaleCode=0000´);
DataBase.Params.Add(´Password=´+ pSenha);
DataBase.Params.Add(´User_Name=´ + pUsuario´);

try
DataBase.Connected := true;
except

try

DataBase.Connected := False;
DataBase.Params.Clear;
DataBase.Params.Add(´DriverName=MYSQL´);
DataBase.Params.Add(´BlobSize=-1´);
DataBase.Params.Add(´Database=mysql´);
DataBase.Params.Add(´ErrorResourceFile=´);
DataBase.Params.Add(´HostName=nome do host ou ip´);
DataBase.Params.Add(´LocaleCode=0000´);
DataBase.Params.Add(´Password=´);
DataBase.Params.Add(´User_Name=root´);
DataBase.Connected := true;

DataBase.ExecuteDirect(´CREATE DATABASE nomedobanco´);

DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO root@localhost WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);
DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO root@´¬´ WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);

DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO ´´@localhost WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);
DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO ´´@´¬´ WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);

if lengthpUsuario) <> 0 then
begin
if length(pSenha) <> 0 then
begin
DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO ´ + pUsuario + ´@localhost IDENTIFIED BY ´ + QuotedStr(pSenha) + ´ WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);
DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO ´ + pUsuario + ´@´¬´ IDENTIFIED BY ´ + QuotedStr(pSenha) + ´ WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);
end
else
begin
DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO ´ + pUsuario + ´@localhost WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);
DataBase.ExecuteDirect(´GRANT ALL PRIVILEGES ON *.* TO ´ + pUsuario + ´@´¬´ WITH GRANT OPTION´);
DataBase.ExecuteDirect(´FLUSH PRIVILEGES´);
end;
end;

DataBase.Connected := False;
DataBase.Params.Clear;
DataBase.Params.Add(´DriverName=MYSQL´);
DataBase.Params.Add(´BlobSize=-1´);
DataBase.Params.Add(´Database=nomedobanco´);
DataBase.Params.Add(´ErrorResourceFile=´);
DataBase.Params.Add(´HostName=nome do host ou ip´);
DataBase.Params.Add(´LocaleCode=0000´);
DataBase.Params.Add(´Password=´+pSenha);
DataBase.Params.Add(´User_Name=´+pUsuario);
DataBase.Connected := true;

except
on e:exception do
showmessage(´Rotina ´CriaBanco´: ´+ConName+´->´+e.Message);
end;
end;
end;


GOSTEI 0
Sousa_thiago

Sousa_thiago

06/05/2003

Valeu cara ... isso vai ajudar bastante :)

eu não sabia dakele tal de DataBase.ExecuteDirect(´CREATE DATABASE nomedobanco´);

Foi isso que faltou na minha rotina ...


GOSTEI 0
Alceste

Alceste

06/05/2003

Valeu cara ... isso vai ajudar bastante :) eu não sabia dakele tal de DataBase.ExecuteDirect(´CREATE DATABASE nomedobanco´); Foi isso que faltou na minha rotina ...


Claro vc não lé o HELP copia dica po .


GOSTEI 0
POSTAR