| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Nov 02, 2010 12:42 pm Assunto: Erro conexao banco firebird com XE ? |
|
|
Ola pessoal, mais um problema, estou querendo conectar o banco firebird 2.5 com o dbx e o novo drive para firebird disponivel desde a versão 2010.
No começo o problema estava com a DLL dbxfb.dll, ai consegui resolver o problema da mensagem unable to load missing dbxfb.dll, instalando esta dll nas pastas
C:\Windows\System32
e
C:\Windows\SysWOW64
Porque meu windows é 64bits.
Agora o probela mudou, parece que não acha o caminho aonde esta o banco.
O codigo é este (Includive coloquei o caminho aonde esta o banco direto ai pra ver se ia funcionar)
| Código: | //Conexao Firebird
function TConexao.ParametrosFirebird: TConexao;
var
Conn: TSQLConnection;
sCaminhoDB: String;
begin
try
Conn := TSQLConnection.create(nil);
sCaminhoDB := 'localhost:C:\Projeto MotoFrete\Banco de Dados\motofrete.fdb';
Conn.ConnectionName := 'FBCONNECTION';
Conn.DriverName := 'FIREBIRD';
Conn.LibraryName := 'dbxfb.dll';
Conn.VendorLib := 'fbclient.DLL';
Conn.GetDriverFunc := 'getSQLDriverINTERBASE';
(* passa o caminho do banco *) //Todo: Deixar flexivel depois
Conn.Params.Add('Database='+sCaminhoDB);
Conn.Params.Add('User_Name=SYSDBA');
Conn.Params.Add('Password=masterkey');
Conn.LoginPrompt := False;
Conn.Open;
(* Cast para Tconexao *)
Result := (TConexao(Conn));
except
raise Exception.Create('Erro ao conectar com o Banco de Dados. Possíveis causas: '+#13+
' 1- Usuario Inválido '+#13+
' 2- Senha Inválida '+#13+
' 3- Caminho do Banco incorreto');
Exit;
end;
end; |
Mais não da certo... Aparece o seguinte erro
Que procurei tratar num bloco try/except... Mais eu não sei o pq aponta para este erro, algo que não acha o caminho do banco de dados.
Debugando achei o que "parece" que o codigo esta fazendo
Não sei se é normal o que esta fazendo ai aonde aponto com a flecha.
Obrigado pessoal. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
marcocunhasilva Profissional

Registrado: Segunda-Feira, 21 de Agosto de 2006 Mensagens: 740 Localização: Porto Alegre
|
Enviada: Ter Nov 02, 2010 2:09 pm Assunto: |
|
|
Olá, adriano_servitec, tudo bem?
Creio que deva ser o seguinte (não estou usando o Delphi XE, mas estou seguindo a lógica):
Copie o que está na linha 24, e coloque na linha 8. Retire as linhas 24 até a linha 26, pois está se repetindo o código.
Espero ter ajudado...
Abraços! |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Nov 02, 2010 2:16 pm Assunto: |
|
|
| marcocunhasilva escreveu: | Olá, adriano_servitec, tudo bem?
Creio que deva ser o seguinte (não estou usando o Delphi XE, mas estou seguindo a lógica):
Copie o que está na linha 24, e coloque na linha 8. Retire as linhas 24 até a linha 26, pois está se repetindo o código.
Espero ter ajudado...
Abraços! | Ola marcocunhasilva, blz amigo... Então, eu não sei como retirar isso, pois o codigo que tenho é apenas aquiele que postei, esta imagem ai é o debug do delphi que fez... Quer ver a classe todas pra ver se acha algo diferente?
Segue..
| Código: | unit uConexao;
interface
uses
SysUtils, SqlExpr;
type
(* Tipo de banco de dados *)
TBancoDados = (ORACLE, FIREBIRD);
(* Herça de TSQLConnection para retornar a classe já toda configurada *)
TConexao = class(TSQLConnection)
private
{ private declarations }
(* variavel static para realiza o padrão singleton *)
class var FTConexao: TConexao;
(* O contrutor tem ser privatdo *)
constructor create;
(* onde são passados as configurações de conexão *)
function ParametrosOracle: TConexao;
function ParametrosFirebird: TConexao;
protected
{ protected declarations }
public
{ public declarations }
(* ponto acesso da classe *)
class function GetIntance(Banco: TBancoDados): TConexao;
(* Metodo para retira da memória a instancia da classe *)
class procedure FreeIntance;
published
{ published declarations }
end;
implementation
{ TConexao }
constructor TConexao.create;
begin
(* contrutor privado *)
end;
class procedure TConexao.FreeIntance;
begin
(* retira a variavel da memória *)
FreeAndNil(FTConexao);
end;
class function TConexao.GetIntance(Banco: TBancoDados): TConexao;
begin
(* padrão singleton caso não acha instancia da classe ele cria *)
(* se houver alguma instancia ele retorna a mesma *)
if not Assigned(FTConexao) then
begin
case Banco of
ORACLE:
FTConexao := FTConexao.ParametrosOracle;
//SQLSERVER:
//FTConexao := FTConexao.ParametrosSqlServer;
FIREBIRD:
FTConexao := FTConexao.ParametrosFirebird;
//MYSQL:
//FTConexao := FTConexao.ParametrosMySql;
end;
end;
Result := FTConexao;
end;
//Conexao Firebird
function TConexao.ParametrosFirebird: TConexao;
var
Conn: TSQLConnection;
sCaminhoDB: String;
begin
try
Conn := TSQLConnection.create(nil);
sCaminhoDB := 'localhost:C:\Projeto MotoFrete\Banco de Dados\motofrete.fdb';
Conn.ConnectionName := 'FBCONNECTION';
Conn.DriverName := 'FIREBIRD';
Conn.LibraryName := 'dbxfb.dll';
Conn.VendorLib := 'fbclient.DLL';
Conn.GetDriverFunc := 'getSQLDriverINTERBASE';
(* passa o caminho do banco *) //Todo: Deixar flexivel depois
Conn.Params.Add('Database='+sCaminhoDB);
Conn.Params.Add('User_Name=SYSDBA');
Conn.Params.Add('Password=masterkey');
Conn.LoginPrompt := False;
Conn.Open;
//Linha comentada também não deu certo, o erro perciste
(*
with Conn do
begin
ConnectionName := 'FBCONNECTION';
DriverName := 'FIREBIRD';
GetDriverFunc := 'getSQLDriverINTERBASE';
LibraryName := 'dbxfb.dll';
LoginPrompt := False;
Params.Add('BlobSize=-1');
Params.Add('CommitRetain=False');
Params.Add('Database=' + sCaminhoDB);
Params.Add('ErrorResourceFile=');
Params.Add('LocaleCode=0000');
Params.Add('Password=masterkey');
Params.Add('RoleName=RoleName');
Params.Add('ServerCharSet=UTF8');
Params.Add('SQLDialect=3');
Params.Add('Interbase TransIsolation=ReadCommited');
Params.Add('User_Name=SYSDBA');
Params.Add('WaitOnLocks=False');
VendorLib := 'fbclient.DLL';
Connected := true;
end; *)
(* Cast para Tconexao *)
Result := (TConexao(Conn));
except
raise Exception.Create('Erro ao conectar com o Banco de Dados. Possíveis causas: '+#13+
' 1- Usuario Inválido '+#13+
' 2- Senha Inválida '+#13+
' 3- Caminho do Banco incorreto');
Exit;
end;
end;
//Conexao Oracle
function TConexao.ParametrosOracle: TConexao;
var
Conn: TSQLConnection;
begin
(* configuração com banco *)
Conn := TSQLConnection.create(nil);
Conn.DriverName := 'ORACLE';
Conn.LibraryName := 'dbxora.dll';
Conn.VendorLib := 'oci.dll';
Conn.GetDriverFunc := 'getSQLDriverORACLE';
Conn.Params.Add('Database=XE');
Conn.Params.Add('User_Name=motofrefe');
Conn.Params.Add('Password=123');
Conn.LoginPrompt := False;
Conn.Open;
(* Cast para Tconexao *)
Result := (TConexao(Conn));
end;
end. |
Estou a classe chamando aqui
| Código: | procedure TfrmCadastroBase.btLocateClick(Sender: TObject);
var
qryLocal: TSQLDataSet;
begin
qryLocal := TSQLDataSet.Create(nil);
try
(* realiza a conexão com o banco *)
dsLocal.DataSet := qryLocal;
qryLocal.SQLConnection := TConexao.GetIntance(FIREBIRD);
qryLocal.CommandText := 'SELECT * FROM usuarios';
qryLocal.Open;
finally
FreeAndNil(qryLocal);
end;
end; | Obrigado pela ajuda amigo.
Obs: Se eu conextar direto com o componente DBXConnection funciona normal. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
marcocunhasilva Profissional

Registrado: Segunda-Feira, 21 de Agosto de 2006 Mensagens: 740 Localização: Porto Alegre
|
Enviada: Ter Nov 02, 2010 2:27 pm Assunto: |
|
|
Adriano, aparentemente o código está correto. O problema é que está adicionando ao que já existe. Tem que verificar a existência de Database = database.fdb e então substituir. Ou então excluir todos os parâmetros padrões e passar os seus parâmetros.
OBS: Como eu disse, ainda não instalei o Delphi XE para efetuar os teste, por falta de espaço no meu HD.
Espero ter ajudado.
Abraços! |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Nov 02, 2010 2:44 pm Assunto: |
|
|
| marcocunhasilva escreveu: | Adriano, aparentemente o código está correto. O problema é que está adicionando ao que já existe. Tem que verificar a existência de Database = database.fdb e então substituir. Ou então excluir todos os parâmetros padrões e passar os seus parâmetros.
OBS: Como eu disse, ainda não instalei o Delphi XE para efetuar os teste, por falta de espaço no meu HD.
Espero ter ajudado.
Abraços! | Vou dar mais uma olhada aqui amigo... Não sei ainda de onde vem estas informações... Obrigado _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
marcocunhasilva Profissional

Registrado: Segunda-Feira, 21 de Agosto de 2006 Mensagens: 740 Localização: Porto Alegre
|
Enviada: Ter Nov 02, 2010 2:50 pm Assunto: |
|
|
Se não me engano, é lá no DataExplorer que você vê essas informações (pelo menos até a versão 2010, era!).
Espero ter ajudado.
Abraços! |
|
| Voltar ao Topo |
|
 |
brunogoyano Novato

Registrado: Segunda-Feira, 22 de Outubro de 2012 Mensagens: 1
|
Enviada: Seg Out 22, 2012 9:58 am Assunto: Solução Encontrada |
|
|
Levando em consideração que o conector SQLConnection adiciona aos parâmetros de conexão a String "Database=database.fdb" sempre que você define o DriverName do mesmo, eu apenas executei a substituição da mesma pela String "DataBase=MeuBancoDeDados" da seguinte forma:
| Código: |
posDataBase := connection.Params.IndexOf('Database=database.fdb');
if posDataBase > -1 then
begin
connection.Params.Delete(posDataBase);
connection.Params.Insert(posDataBase, 'Database=MeuBancoDeDados')
end
else
connection.Params.Add('Database=MeuBancoDeDados');
|
T+. |
|
| Voltar ao Topo |
|
 |
|