Fórum Arquivo Ini - Conexao Mysql #412678
12/02/2012
0
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
Curtir tópico
+ 0Posts
12/02/2012
William
[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í ...
Gostei + 0
12/02/2012
Rodolfo Silva
[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
Gostei + 0
13/02/2012
William
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 ....
Gostei + 0
13/02/2012
Rodolfo Silva
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
Gostei + 0
13/02/2012
William
No momento esto sem delphi, mas após as 19:00hs posto um exemplo.
Gostei + 0
13/02/2012
Rodolfo Silva
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
Gostei + 0
13/02/2012
Deivison Melo
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
Gostei + 0
13/02/2012
Rodolfo Silva
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
Gostei + 0
13/02/2012
Joel Rodrigues
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.
Gostei + 0
13/02/2012
Rodolfo Silva
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
Gostei + 0
13/02/2012
Rodolfo Silva
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
Gostei + 0
13/02/2012
Joel Rodrigues
[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.
Gostei + 0
13/02/2012
Rodolfo Silva
[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
Gostei + 0
13/02/2012
William
//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;
Gostei + 0
13/02/2012
Rodolfo Silva
//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!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)