ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Erro conexao banco firebird com XE ?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Nov 02, 2010 12:42 pm    Assunto: Erro conexao banco firebird com XE ? Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
marcocunhasilva
Profissional
Profissional


Registrado: Segunda-Feira, 21 de Agosto de 2006
Mensagens: 740
Localização: Porto Alegre

MensagemEnviada: Ter Nov 02, 2010 2:09 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Nov 02, 2010 2:16 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
marcocunhasilva
Profissional
Profissional


Registrado: Segunda-Feira, 21 de Agosto de 2006
Mensagens: 740
Localização: Porto Alegre

MensagemEnviada: Ter Nov 02, 2010 2:27 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Nov 02, 2010 2:44 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
marcocunhasilva
Profissional
Profissional


Registrado: Segunda-Feira, 21 de Agosto de 2006
Mensagens: 740
Localização: Porto Alegre

MensagemEnviada: Ter Nov 02, 2010 2:50 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
brunogoyano
Novato
Novato


Registrado: Segunda-Feira, 22 de Outubro de 2012
Mensagens: 1

MensagemEnviada: Seg Out 22, 2012 9:58 am    Assunto: Solução Encontrada Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB