Firebird na rede com Delphi/DBX

Firebird

14/09/2012

Pessoal,

Eu tenho um sistema em Delphi 7/DBX/Firebird 2.5. O Banco de Dados era Paradox e funcionava na rede com BDE. Agora estou precisando fazer esse sistema funcionar na rede com Firebird. Se eu configuro o Firebird localmente (mesmo usando o REMOTO/LOCALHOST ele funciona normalmente. Ou seja, o executavel e o Firebird no mesmo computador.

Aí eu instalei o Firebird no Servidor e coloquei o banco de dados num diretorio do servidor. Compilei uma Conexão BDX com o caminho da rede do servidor e chamo o executável do micro do usuario, mas ele dá I/O error e não abre o banco de dados do servidor.

Sumarizando, eu preciso configurar a rede para acessar do cliente o servidor.

Se alguem me ajudar, agradeço,

Airton
Airton Santos

Airton Santos

Curtidas 0

Melhor post

Landerson Santos

Landerson Santos

24/02/2014

Caros, eu gostaria de saber se essa conexão Firebird/Servidor em rede funciona numa aplicação local. Eu tenho uma aplicação local e gostaria de migrar para Firebird em rede. O que precisaria para tal conversão? Na minha aplicação eu tenho: Data Modulo com os componentes DBExpress (ClientDataSet/DataSetProvider/DataSource). Grato se alguém poder me ajudar.


Olá Ricardo.
Para funcionar localmente, basta nas configurações onde pede IP do servidor, você colocar LOCALHOST ou IP Local 127.0.0.1

Simples assim.

Até!
GOSTEI 1

Mais Respostas

William

William

14/09/2012

Airton poste a configuração do seu componente de conexão?
GOSTEI 0
Airton Santos

Airton Santos

14/09/2012

Olá,

No Delphi, eu entro no componente TSQLConnection, crio uma conexão e coloco os parâmetros:

DriverName Interbase
Database 192.168.5.27:\SMIERP\SMIERPDBCMERC.FDB
RoleName RoleName
User_Name sysdba
Password masterkey
ServerCharSet
SQLDialect 3
BlobSize -1
CommitRetain False
WaitOnLocks True
ErrorResourceFile
LocaleCode 0000
Interbase TransIsolation ReadCommited
Trim Char False

Aí eu compilo e coloco o executável delphi na máquina do usuário que tem o delphi e o firebird instalado.
No servidor tem o banco de dados e o firebird instalado. Lá nós já testamos com o IBExpert e acessa normalmente como LOCAL.

Na maquina do usuário, eu testei o acesso remoto com o IBExpert e dá o erro:
I/O error
GOSTEI 0
William

William

14/09/2012

Colega a porta 3306 do Servidor está aberta para essa conexão?
GOSTEI 0
Singular Ti

Singular Ti

14/09/2012

Se sua rede for windows vc tem que compartilhar o local onde esta o banco de dados e utilizar no delphi assim:

TSQLConnection:
Database ipservidor:C:\basedados\meubanco.fdb
lembrando que este local deve ta compartilhado na rede se vc utiliza samba na rede dae nao precisa compartilhar
só passar o caminho como lhe disse

Se seu servidor fica em um linux e sua aplicacao fica em terminais windows dae vc configura assim:

TSQLConnection:
Database ipServidor:/basedados/meubanco.fdb

Eu tenho diversas aplicações rodando em rede tanto linux qto windows nunca tive problemas.. porem na aplicacao eu nao compilo o TSQLConnection com o caminho do database eu crio um arquivo .ini e pego o caminho da conexao...

Abraços... Espero ter ajudado..
GOSTEI 0
Airton Santos

Airton Santos

14/09/2012

Leandro,

Por favor, será que voce poderia me dizer como fazer para o Delphi pegar o caminho no arquivo .INI e que nome se dá para esse arquivo .INI e em que local ( servidor? diretorio? )

Outra coisa, o executável tem que ser chamado do micro do usuário ou servidor ?

É que eu usava o BDE na rede. Era bem mais simples.

Obrigado
GOSTEI 0
Airton Santos

Airton Santos

14/09/2012

Olá Leandro,
Encontrei aqui mesmo um artigo sobre o assunto, porem as perguntas que fiz ainda são importantes para mim.

Obrigado
GOSTEI 0
Alisson Santos

Alisson Santos

14/09/2012

Leandro o ideal é criar um arquivo ini com o caminho do banco, e quando for conectar faz a leitura do arquivo e retorno o caminho do banco.
Sempre lembra de instalar no servidor o firebird como servidor e nas estações como cliente.
GOSTEI 0
Airton Santos

Airton Santos

14/09/2012

Caro Alisson,

Eu criei na estação o Firebird como servidor. Será que é por isso que não está conseguindo ler o banco no servidor?

Tem obrigatoriamente que ser instalado como cliente na maquina do usuário??

Obrigado
GOSTEI 0
Alisson Santos

Alisson Santos

14/09/2012

Já passei por isso aqui na empresa logo que entrei.
Todas as estações eram instaladas como servidor, sendo que já existia um servidor de dados aonde fica o banco.
Quando você tem em uma rede dois servidores de firebird mesmo que seja em seu micro, corre o risco de perca de dados e integridade com o proprio banco de dados.
Quando está trabalhando como cliente e servidor o ideal é o servidor está instalado como servidor mesmo e tudo configurado e nas estações como cliente e apenas executando a aplicação.
Só lembrando que caso tenha que fazer algum comando que tenha que utilizar o firebird como o gbak, gsec entre outros tem que direcionar para o firebrid do servidor.

Espero ter ajudado.
GOSTEI 0
William

William

14/09/2012

Colegas é interessante salientar que para máquina do cliente não é necessário nenhum tipo de instalação Client do Firebird, somente copiar a dll fbclient.dll para o diretório do executável ou pasta System32 do S.O.

Já no servidor é necessário executar a instalação completa.
GOSTEI 0
Airton Santos

Airton Santos

14/09/2012

Obrigado a todos,

Vou até o local da instalação para fazer os testes.

T+
GOSTEI 0
Alisson Santos

Alisson Santos

14/09/2012

Caro amigo wllfl

O que ocorre é que para funcionar corretamente o firebird tem que ter instalado nas estações como cliente, devido a integridade de dados.
GOSTEI 0
William

William

14/09/2012

Caro colega Alisson, tenho vários sistemas rodando com essa prática e nunca tive problemas com a base de dados, facilita muito o processo de implantação do sistema.

Imagine vc instalar em 50 máquinas ou mais o Firebrid Client...
GOSTEI 0
Alisson Santos

Alisson Santos

14/09/2012

Caro colega Alisson, tenho vários sistemas rodando com essa prática e nunca tive problemas com a base de dados, facilita muito o processo de implantação do sistema.

Imagine vc instalar em 50 máquinas ou mais o Firebrid Client...


Mais você não vai ter que instalar em cada estação o firebird para funcionar o seu sistema?
GOSTEI 0
William

William

14/09/2012

Vc pode mandar somente a fbclient.dll para cada estação...
GOSTEI 0
Singular Ti

Singular Ti

14/09/2012

Caros amigos.. desculpem a minha demora para responder. Porem vamos la..

Temos um servidor que pode ser linux ou windows, neste servidor temos o firebird instalado e rodando seus servicos normalmente juntamente com o banco de dados. Suponha-se que o caminho na rede para acessa-lo seria algo assim:
Serverlinux: 172.10.101.3:/dados/sistema/meubanco.fdb (utilizando samba)
ServerWindows: 172.10.101.3:C:\sistema\meubanco.fdb

Nas maquinas client o sistema juntamente com seu arquivo .exe podera ter um arquivo .ini no mesmo diretorio de sua instalacao, esse arquivo pode ter qualquer nome vamos chama-lo aqui de rede.ini

Ao abrir o arquivo nos deparamos com a seguinte configuracao:
[conexao]
Serverlinux=172.10.101.3:/dados/sistema/meubanco.fdb
ServerWindows=172.10.101.3:C:\sistema\meubanco.fdb

Basta o sistema ler esse arquivo retornando o caminho do banco que ele quer conectar-se. No diretorio do sistema onde esta o arquivo .exe do mesmo alem de conter este arquivo rede.ini deve esta presente tambem o arquivo fbclient.dll. Voce nao precisa instalar nenhum servico do firebird nas estações, conforme o amigo wllfl disse, isso nao gera problemas de integridade. Pelo menos ate hoje eu nunva tive esse problema e tenho mtos ERP rodando com firebird dessa forma.

Segue o codigo da funcao para ler o arquivo rede.ini no delphi:

function LerIniConexao(sSecao, sVariavel: String): String;
var
  sNomeArq: String;
  iniArq: TIniFile;
begin
  Result   := '';
  sNomeArq := extractfiledir(application.ExeName);
  sNomeArq := sNomeArq + '\rede.ini';
  if FileExists(sNomeArq) Then
  begin
    iniArq := TIniFile.Create(sNomeArq);
    Result := iniArq.ReadString(sSecao, sVariavel, '');     //le a string
    iniArq.Free;
  end;
  // verifica se o arquivo ini existe;
  if not FileExists(sNomeArq) then
  begin
    Erro('Atenção, o arquivo de configuração não pode ser encontrado.');
    Application.Terminate;
  end;
end;


Para chamar essa funcao vc faz assim:

Var
  caminho: String;
begin
  caminho := LerIniConexao('conexao','Serverlinux');
  SQLConnection.Params.Values['Database'] := caminho;
end...


Meus amigos é simples assim.. Eu poderia detalhar mais porem esse post iria ficar grande demais. No entanto acho que ficou bem claro e espero ter ajudado os colegas!!
Abraços..
GOSTEI 0
Julio Junior

Julio Junior

14/09/2012

Leandro, achei interessante seu post, estou estudando o Delphi 7 para um sistema de emissão de ordens de serviço.

Estou com esse problema de conexão. A aplicação e banco de dados estão num servidor e nas estações não estou sabendo como instalar. As estações têm uma unidade mapeada (N:\) e pensei que se eu apontasse para o executável iria rodar, mas percebi que não funciona assim. Acredito que tenha que criar o arquivo ini e a função.
Minhas dúvidas:
1- O arquivo .ini é um arquivo texto? e fica no mesmo diretório que está a aplicação (executavel)?
2- Quanto à função como faço para colocar-la no Delphi, No form principal? crio um outro?

Se tiver mais detalhes sobre isso e não der para postar aqui, poderia por favor enviar-me por e-mail?
julionsp@gmail.com.

Desde já o meu muito obrigado.

Julio.
GOSTEI 0
Singular Ti

Singular Ti

14/09/2012


Leandro, achei interessante seu post, estou estudando o Delphi 7 para um sistema de emissão de ordens de serviço.

Estou com esse problema de conexão. A aplicação e banco de dados estão num servidor e nas estações não estou sabendo como instalar. As estações têm uma unidade mapeada (N:\) e pensei que se eu apontasse para o executável iria rodar, mas percebi que não funciona assim. Acredito que tenha que criar o arquivo ini e a função.
Minhas dúvidas:
1- O arquivo .ini é um arquivo texto? e fica no mesmo diretório que está a aplicação (executavel)?
2- Quanto à função como faço para colocar-la no Delphi, No form principal? crio um outro?

Se tiver mais detalhes sobre isso e não der para postar aqui, poderia por favor enviar-me por e-mail?
julionsp@gmail.com.

Desde já o meu muito obrigado.

Julio.


Julio e ae beleza..
Seguinte, sobre o arquivo.ini vou te passar dois links que vão te ajudar a compreender o significado e uso desse tipo de aquivo

[url]
http://pt.wikipedia.org/wiki/INI_(formato_de_arquivo)
http://www.macoratti.net/arq_ini.htm
[/url]

Em relação à função que implementei no post acima para ler o conteudo de um arquivo .ini você pode implementa-la em qualquer lugar do seu sistema, no meu caso eu tenho uma classe de funções diversas.

Dae a chamada da função, você tem que colocar no momento em que sua aplicacao ira se conectar no BD, para ler o arquivo .ini, dados de conexao.. No meu caso eu deixo dentro do DataModule de conexão.

No meu caso eu nao deixo o usuario e senha dentro do arquivo ini e sim fixo no componente de conexao, passando apenas o local onde esta o BD

[conexao]
Serverlinux=172.10.101.3:/dados/sistema/meubanco.fdb
ServerWindows=172.10.101.3:C:\sistema\meubanco.fdb


Nas maqinas cliente, o arquivo .ini deve ficar junto com .exe do sistema ate mesmo para faciliar a sua localizacao e leitura. Se você utiliza servidor linux dae você tem que liberar o acesso do sistema ao samba para que ele se autentique e consiga acessar o BD caso seja servidor windows basta você compartilhar o diretorio que esta o BD.

Qualquer duvida posta ae...
Abraços!!!
GOSTEI 0
Diego Garcia

Diego Garcia

14/09/2012

amigo, para ficar mais elegante e mais fácil de usar, crie alias para o seu banco no server, vc pode fazer isso escrevendo no arquivo Aliases.conf.

ai para apontar para o banco a partir do client é só fazer ipDoServidor:Alias

exemplo: 192.168.0.2:dbServer
GOSTEI 0
Landerson Santos

Landerson Santos

14/09/2012

Na verdade a porta que tem que estar aceitando conexão no seu servidor BD (local onde vai ficar o banco firebird) é a 3050 se você não mudou a configuração inicial do FB.
Outro ponto que foi citado acima, a respeito de compartilhar a pasta onde estará o banco... está errado, não é necessário compartilhar a pasta. Fazendo essa configuração da porta no seu firewall, e apontando o caminho do bd já funcionará... lembrando claro que vc deve levar a biblioteca fbClient.dll para o diretório da sua aplicação no client.

String de conexao ficaria: [ip_servidor_db]:[caminho do banco]\[nomedo banco].fdb

Se vc teve erro ao acessar pelo proprio IBExpert, provavelmente é só o firewall mesmo.

Com tantas respostas acredito eu que já deva conseguir.

Boa sorte.
GOSTEI 0
Julio Junior

Julio Junior

14/09/2012

Pessoal, muito obrigado pelas informações, sem dúvida tem bastante material para usar, vou tentar implementar essas opções e assim que tiver alguma conclusão posto aqui o resultado.
GOSTEI 0
Ricardo Almeida

Ricardo Almeida

14/09/2012

Caros, eu gostaria de saber se essa conexão Firebird/Servidor em rede funciona numa aplicação local. Eu tenho uma aplicação local e gostaria de migrar para Firebird em rede. O que precisaria para tal conversão? Na minha aplicação eu tenho: Data Modulo com os componentes DBExpress (ClientDataSet/DataSetProvider/DataSource). Grato se alguém poder me ajudar.
GOSTEI 0
Ricardo Almeida

Ricardo Almeida

14/09/2012

Oi Landerson Gomes,


Obrigado pela resposta. Mas eu posso usar o sistema local(todo ele) e o banco de dados no servidor em rede? Haveria perda de rendimento ou quais implicações? Eu pensei em adotar DataSnap. É um sistema que funciona redondo na empresa, se eu mudar, além do trabalho posso perder em confiabilidade, devido a minha pouca experiência com essa tecnologia. Entendeu? Obrigado mais uma vez. Grato. Em tempo, o sistema é usado só em 1 computador(ou seja, não haverá concorrência de acessos, etc).
GOSTEI 0
Landerson Santos

Landerson Santos

14/09/2012

Ricardo... o aplicativo do sistema roda localmente e você aponta a conexão para a maquina que está o servidor do bd. Essa é a lógica, fazendo lembrar que tudo o que foi abordado nesse tópico deve estar previamente preparado: firewall, dll, etc.
Com relação a perda de desempenho, é quase nula... depende muito da "estabilidade" de sua rede, o que nos dias de hoje, convenhamos não deve ser problema.

Com relação a DataSnap, se você já vai migrar, acredito que a melhor opção seja partir direto para ele.
Afinal, cada vez mais precisamos ter as aplicações disponíveis às mais diversas plataformas.

Imagine você migrar para BD... e futuramente ter que migrar de novo para DS...

Espero ter ajudado.
Até.
GOSTEI 0
Ricardo Almeida

Ricardo Almeida

14/09/2012

LandersonGomes,

Muito obrigado. Eu precisava de uma opinião nesse sentido. E vc me ajudou muito. Irei seguir a sua orientação. Novamente muito obrigado, grato. Tenha um bom dia!
GOSTEI 0
Mário Reis

Mário Reis

14/09/2012

Por exemplo "localhost/3050:c:\\\\Trab\\\\minhaApp\\\\Dados\\\\MinhaBase.FDB com portas abertas e tudo(Furewall/antivurus), no DBX não está funcionando Normalmento uso Zeos não preciso fazer assim por o componente tem esse parâmetro e faz isso lá por trás, mas aqui, com o DBX não tenho onde indicar em que port está rodando o Fb2.5, por acaso na 3050, mas ele só enxerga o Fb3 que está rodando na port 3052. Se paro a Fb3 dá erro de xnet://Global\\\\Firebird; nunca me acontecera antes! E, não funciona mesmo. Tenho o Fb2.5.5 e o Fb3.0 e preciso dos dois rodando na mesma máquina.
Alguém poderá ajudar? Obrigado
GOSTEI 0
POSTAR