Fórum Arquivo Ini - Conexao Mysql #412678

12/02/2012

0

Boa Tarde a Todos.
Estou eu aqui de novo com mais uma duvida.
Pesquisei em vários sites e nada de achar algo sobre arquivos ini para o MySQL.
Eu utilizo o Delphi xe e MySQL 5.1, mas todos que eu acho ou tem o zeos lib ou é do firebird....
Alguém por favor pode me ajudar a fazer um arquivo ini de conexão para o MySQL?

Obrigado desde já
Rodolfo Silva

Rodolfo Silva

Responder

Posts

12/02/2012

William

Segue um exemplo:

[Conexao]
Hostname=LOCALHOST
Port=3306
Database=localhost:Nome_BD
Password=011224
user_name=root
drivername=MySQL
LibraryName=dbxmys.dll
VendorLib=libmysql.dll
ConnectionName=MYSQLCONNECTION
GetDriveFunc=getSQLDriverMySQL

qualquer dúvida estamos aí ...
Responder

Gostei + 0

12/02/2012

Rodolfo Silva

Segue um exemplo:

[Conexao]
Hostname=LOCALHOST
Port=3306
Database=localhost:Nome_BD
Password=011224
user_name=root
drivername=MySQL
LibraryName=dbxmys.dll
VendorLib=libmysql.dll
ConnectionName=MYSQLCONNECTION
GetDriveFunc=getSQLDriverMySQL

qualquer dúvida estamos aí ...



ok amigo, obrigado, mas eu queria saber também como eu associo este arquivo ini ao Delphi ou ao SqlConection do data module.

Obrigado
Responder

Gostei + 0

13/02/2012

William

Segue um link para vc aprender a trabalhar com arquivos INI:
http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=1295

Depois disso é carregar as informações no SQLConnection tipo:

Database:= database

e por aí vai ....
Responder

Gostei + 0

13/02/2012

Rodolfo Silva

Segue um link para vc aprender a trabalhar com arquivos INI:
http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=1295

Depois disso é carregar as informações no SQLConnection tipo:

Database:= database

e por aí vai ....


desculpa amigo, mas nao funcionou
Responder

Gostei + 0

13/02/2012

William

Posta a msg de erro.

No momento esto sem delphi, mas após as 19:00hs posto um exemplo.
Responder

Gostei + 0

13/02/2012

Rodolfo Silva

Posta a msg de erro.

No momento esto sem delphi, mas após as 19:00hs posto um exemplo.


ok amigo, fico no aguardo do exemplo, vai ser de grande ajuda a mim e a todos do fórum.
Obrigado
Responder

Gostei + 0

13/02/2012

Deivison Melo

Seguem abaixo exemplos usados com a conexão dbexpress usando o banco de dados firebird...

Faça a adaptação para o MySQL a lógica é a mesma...

(*************************************************************************************************************************)
//Procedure para gravar arquivo ini usado no login
//inicio
procedure GravaIni(Arquivo, Sessao, Subsessao, valor: string);
var
ArqIni: TIniFile;
begin
ArqIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + Arquivo);
try
ArqIni.WriteString(Sessao, Subsessao, valor);
finally
FreeAndNil(ArqIni);
end;
end;
//fim
(*************************************************************************************************************************)
//Funcao para ler arquivo ini usado no login
//inicio
function LerIni(Arquivo, Sessao, Subsessao: string): string;
var
ArqIni: TIniFile;
sDirAplicacao: string;
begin
sDirAplicacao := ExtractFilePath(ParamStr(0));
ArqIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + Arquivo);
try
Result := ArqIni.ReadString(Sessao, Subsessao, );
finally
FreeAndNil(ArqIni);
end;
end;
//fim

(*************************************************************************************************************************)
//Lendo o arquivo ini criado (isso no create do formulário onde contém os objetos dbware´s (conexão com banco))
//inicio
begin
if not FileExists(sga.ini) then //verificando se o arquivo *.ini existe (usei o nome sga, mas o nome que você pesquisa é o mesmo nome criado)
ChamaForm(TfrmConfiguracao, frmConfiguracao) // essa procedure chama form foi feita para chamar os formularios, disponibilizarei aqui tb!
else
begin
try
with ConexaoDB do //nome do objeto dbconection do dbexpress
begin
Connected := False;
connectionname := PortoBello; //Nome do alias para conexão
drivername := interbase; //mesmo usando o firebird colocar aqui interbase, isso foi feito em delphi 7
getdriverfunc := getSQLDriverINTERBASE;
libraryname := dbexpint.dll;
params.clear;
params.add(drivername=interbase);
params.add(database= + LerInI(sga.ini, DB, caminho));
params.add(rolename=rolename);
params.add(user_name= + LerInI(sga.ini, DB, usuario));
params.add(password= + LerInI(sga.ini, DB, senha));
params.add(servercharset=);
params.add(sqldialect=3);
params.add(blobsize=-1);
params.add(commitretain=false);
params.add(waitonlocks=true);
params.add(errorresourcefile=);
params.add(localecode=0000);
params.add(interbase transisolation=readcommited);
params.add(trim char=false);
vendorlib := gds32.dll;
Connected := true;
end;
except
raise Exception.Create(Verifique se as configurações do arquivo sga.ini estão corretas!);
end;
end;
end;
//fim
(*************************************************************************************************************************)
//Chamar formulário
//inicio
procedure ChamaForm(aClasseForm: TComponentClass; aForm: TForm);
begin
{método para chamar form}
Application.CreateForm(aClasseForm, aForm);
try
aForm.ShowModal;
finally
aForm.Free;
end;
end;
//fim
(*************************************************************************************************************************)

forte abraço!

Emanoel Deivison
Recife - PE
Responder

Gostei + 0

13/02/2012

Rodolfo Silva

Boa Tarde amigo, olha eu usei o seu codigo e deu erro.
mas no caso eu usei este mas esta dando erro tambem.

function lerIni(sInifile, sSecao, sChave : String) : String;
var
Ini : TIniFile;
begin
Ini := TInifile.Create(ExtractFilePath(ParamStr(0)) + sInifile);
try
Result := Ini.ReadString(sSecao, sChave, );
finally
Ini.Free
end;
end;

**********************************************************************

procedure TFrmPrincipal.FormCreate(Sender: TObject);
begin
DM.conexao.Close;
try
DM.conexao.Params.Values[drivername]:= lerIni(config.ini, drivername);
DM.conexao.Params.Values[Database]:= lerIni(config.ini, Database);
DM.conexao.Params.Values[HostName]:= lerIni(config.ini, HostName);
DM.conexao.Params.Values[Password]:= lerIni(config.ini, Password);
DM.conexao.Params.Values[User_name]:= lerIni(config.ini, User_name);
DM.conexao.Params.Values[Port]:= lerIni(config.ini, Port);
DM.conexao.Open;
except
on EDatabaseError do
begin
MessageDlg(Não foi possível se conectar ao Servidor, mtError, [mbOk], 0);
Application.Terminate;
end;
end;
end;


Pode me ajudar novamente?
Obrigado
Responder

Gostei + 0

13/02/2012

Joel Rodrigues

Qual o erro exatamente?
Repare que a função LerINI recebe três parâmetros e na chamada você está passando apenas dois. Aparentemente você está passando o nome do arquivo e da chave que deseja ler, mas está esquecendo da sessão. Veja na estrutura do seu arquivo (vide exemplos dados anteriormente) qual a seção e chaves corretas.

Quando ocorrer um erro, não deixe de nos informar qual erro ocorreu, facilitará e muito.

Boa sorte.
Responder

Gostei + 0

13/02/2012

Rodolfo Silva

Realmente joel, obrigado pela observação, mas mesmo assim ainda nao deu, ele simplesmente nao conecta quando eu coloco o exe em outro pc em rede que eu tenho aqui, ele procura o localhost e nao o ip que coloquei no arquivo config.

achei este outro codigo, aparentemente ele funciona, coloquei ele no oncreate do meu Dm e quando eu edito o nome localhost na seção ip, para outro nome ele da erro, e quando volto ao normal ele funciona, até aqui tudo bem.
mas quando eu passo ele para outro pc e coloco o ip do meu servidor, ele continuar tentando buscar o localhost..

segue o codigo:

****************************************

procedure TDM.conectaIni;
var
x:integer;
arq:TextFile;
linha,ip,user,password, host:string;
begin
AssignFile (arq,C:\SysClin\App\bin\config.ini);
Reset(Arq);
x:=0;
while not eof (arq) do
begin
ReadLn(arq,linha);
if(x = 1)then
ip:= linha;
if(x = 3)then
user:= linha;
if(x = 5)then
password:= linha;
if(x = 7)then
host:= linha;
x:=x+1;
end;
CloseFile(arq);
Conexao.Params.Values[HostName] := ip;
Conexao.Params.Values[Database] := bd_sys;
Conexao.Params.Values[USER_NAME] := root;
Conexao.Params.Values[Password] := 12345;
try
Conexao.Connected := true;
except
end;
end;

************************************************************************

alguma ideia de como resolver?
Desculpa pela amolação, é que só falta isto para terminar o programa.
Obrigado pela Paciência
Responder

Gostei + 0

13/02/2012

Rodolfo Silva

Realmente joel, obrigado pela observação, mas mesmo assim ainda nao deu, ele simplesmente nao conecta quando eu coloco o exe em outro pc em rede que eu tenho aqui, ele procura o localhost e nao o ip que coloquei no arquivo config.

achei este outro codigo, aparentemente ele funciona, coloquei ele no oncreate do meu Dm e quando eu edito o nome localhost na seção ip, para outro nome ele da erro, e quando volto ao normal ele funciona, até aqui tudo bem.
mas quando eu passo ele para outro pc e coloco o ip do meu servidor, ele continuar tentando buscar o localhost..

segue o codigo:

****************************************

procedure TDM.conectaIni;
var
x:integer;
arq:TextFile;
linha,ip,user,password, host:string;
begin
AssignFile (arq,C:\SysClin\App\bin\config.ini);
Reset(Arq);
x:=0;
while not eof (arq) do
begin
ReadLn(arq,linha);
if(x = 1)then
ip:= linha;
if(x = 3)then
user:= linha;
if(x = 5)then
password:= linha;
if(x = 7)then
host:= linha;
x:=x+1;
end;
CloseFile(arq);
Conexao.Params.Values[HostName] := ip;
Conexao.Params.Values[Database] := bd_sys;
Conexao.Params.Values[USER_NAME] := root;
Conexao.Params.Values[Password] := 12345;
try
Conexao.Connected := true;
except
end;
end;

************************************************************************

alguma ideia de como resolver?
Desculpa pela amolação, é que só falta isto para terminar o programa.
Obrigado pela Paciência



Ah e é esta a estrutura do arquivo ini.

[IP]
10.0.0.101

[HOST]
RODOLFONOT-PC

obrigado
Responder

Gostei + 0

13/02/2012

Joel Rodrigues

No seu arquivo INI, você nomeou a seção mas não nomeou a chave. A estrutura deve ser semelhante a essa:
[CONFIGURACOES]
IP = 10.0.0.101
HOST = RODOLFO-PC

[SECAO]
Chave = valor

Altere seu arquivo e utilize aquele método para ler esse arquivo. Ah, insista na leitura correta do arquivo INI, tente não usar esse outro método. Se existe o INI pra isso, por que usar o que eu diria ser uma gambiarra?

Boa sorte.
Responder

Gostei + 0

13/02/2012

Rodolfo Silva

No seu arquivo INI, você nomeou a seção mas não nomeou a chave. A estrutura deve ser semelhante a essa:
[CONFIGURACOES]
IP = 10.0.0.101
HOST = RODOLFO-PC

[SECAO]
Chave = valor

Altere seu arquivo e utilize aquele método para ler esse arquivo. Ah, insista na leitura correta do arquivo INI, tente não usar esse outro método. Se existe o INI pra isso, por que usar o que eu diria ser uma gambiarra?

Boa sorte.


Alterei o Ini mas continua na mesma, só lê o localhost.
Mas esse ultimo codigo que te enviei esta correto?

var
x:integer;
arq:TextFile;
linha,ip,user,password, host:string;
begin
AssignFile (arq,C:\SysClin\App\bin\config.ini);
Reset(Arq);
x:=0;
while not eof (arq) do
begin
ReadLn(arq,linha);
if(x = 1)then
ip:= linha;
if(x = 3)then
user:= linha;
if(x = 5)then
password:= linha;
if(x = 7)then
host:= linha;
x:=x+1;
end;
CloseFile(arq);
Conexao.Params.Values[HostName] := ip;
Conexao.Params.Values[Database] := bd_sysclin;
Conexao.Params.Values[USER_NAME] := root;
Conexao.Params.Values[Password] := 123;
try
Conexao.Connected := true;
except
end;
end;

voce teria outro exemplo?
Obrigado pela paciencia
Responder

Gostei + 0

13/02/2012

William

Estou postando um exemplo bem simples, testei e funcionou legal...


//Esse evento é disparado antes da conexão do SQLConnection
procedure TfrmPrincipal.conexaoINIBeforeConnect(Sender: TObject);
begin
try
conexaoINI.Connected := false;
conexaoINI.Params.Clear;
conexaoINI.ConnectionName:= Conn.ConnectionName;
conexaoINI.ParamsLoaded := True;
conexaoINI.DriverName := Conn.DriverName;
conexaoINI.GetDriverFunc := Conn.GetDriveFunc;
conexaoINI.LibraryName := Conn.LibraryName;
conexaoINI.VendorLib := Conn.LibraryName;
conexaoINI.Params.Add(hostname= + Conn.Hostname);
conexaoINI.Params.Add(user_name= + Conn.User);
conexaoINI.Params.Add(password= + Conn.Password);
conexaoINI.Params.Add(port= + IntToStr(Conn.Porta));
conexaoINI.Params.Add(Database= + conn.Database);
Except
on E:Exception do
ShowMessage(Erro ao acessar banco de dados!#13#10 + E.Message);
end;
end;

Nesse caso escrevi uma classe de conexão pra ler o INI mas não há necessidade disso, o conteúdo do INI postei no inicio poste, repare no nome dos atributos e compare com ini.

//Essaé função de leitura do INI
procedure TConexao.LeINI;
var
ArqIni : TIniFile;
begin
ArqIni := TIniFile.Create(FINI);
try
FHostname := ArqIni.ReadString (Conexao_MySQL, Hostname , );
FPorta := ArqIni.ReadInteger(Conexao_MySQL, Porta , 0 );
FDatabase := ArqIni.ReadString (Conexao_MySQL, Database , );
FPassword := ArqIni.ReadString (Conexao_MySQL, Password , );
FUser := ArqIni.ReadString (Conexao_MySQL, user_name , );
FVendorLib := ArqIni.ReadString (Conexao_MySQL, VendorLib , );
FLibraryName := ArqIni.ReadString (Conexao_MySQL, LibraryName , );
FGetDriveFunc := ArqIni.ReadString (Conexao_MySQL, GetDriveFunc , );
FDriverName := ArqIni.ReadString (Conexao_MySQL, drivername , );
FConnectionName := ArqIni.ReadString (Conexao_MySQL, ConnectionName, );
finally
ArqIni.Free;
end;
end;
Responder

Gostei + 0

13/02/2012

Rodolfo Silva

Estou postando um exemplo bem simples, testei e funcionou legal...


//Esse evento é disparado antes da conexão do SQLConnection
procedure TfrmPrincipal.conexaoINIBeforeConnect(Sender: TObject);
begin
try
conexaoINI.Connected := false;
conexaoINI.Params.Clear;
conexaoINI.ConnectionName:= Conn.ConnectionName;
conexaoINI.ParamsLoaded := True;
conexaoINI.DriverName := Conn.DriverName;
conexaoINI.GetDriverFunc := Conn.GetDriveFunc;
conexaoINI.LibraryName := Conn.LibraryName;
conexaoINI.VendorLib := Conn.LibraryName;
conexaoINI.Params.Add(hostname= + Conn.Hostname);
conexaoINI.Params.Add(user_name= + Conn.User);
conexaoINI.Params.Add(password= + Conn.Password);
conexaoINI.Params.Add(port= + IntToStr(Conn.Porta));
conexaoINI.Params.Add(Database= + conn.Database);
Except
on E:Exception do
ShowMessage(Erro ao acessar banco de dados!#13#10 + E.Message);
end;
end;

Nesse caso escrevi uma classe de conexão pra ler o INI mas não há necessidade disso, o conteúdo do INI postei no inicio poste, repare no nome dos atributos e compare com ini.

//Essaé função de leitura do INI
procedure TConexao.LeINI;
var
ArqIni : TIniFile;
begin
ArqIni := TIniFile.Create(FINI);
try
FHostname := ArqIni.ReadString (Conexao_MySQL, Hostname , );
FPorta := ArqIni.ReadInteger(Conexao_MySQL, Porta , 0 );
FDatabase := ArqIni.ReadString (Conexao_MySQL, Database , );
FPassword := ArqIni.ReadString (Conexao_MySQL, Password , );
FUser := ArqIni.ReadString (Conexao_MySQL, user_name , );
FVendorLib := ArqIni.ReadString (Conexao_MySQL, VendorLib , );
FLibraryName := ArqIni.ReadString (Conexao_MySQL, LibraryName , );
FGetDriveFunc := ArqIni.ReadString (Conexao_MySQL, GetDriveFunc , );
FDriverName := ArqIni.ReadString (Conexao_MySQL, drivername , );
FConnectionName := ArqIni.ReadString (Conexao_MySQL, ConnectionName, );
finally
ArqIni.Free;
end;
end;


Boa noite, o codigo realmente é simples, mas fiquei com duvidas de como implementar ele no sistema.
Poderia ser um pouco mais claro?
Pois o delphi nao reconhece varias variaveis, eu teria que declarar todas elas?
e o meu sqlconection esta em um data module, e tem algumas propriedades que o Dm nao reconhece como o form.

Obrigado meus amigos pela força!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar