Instalação Zeos no Delphi 7 para acesso ao Postgresql
Para instalar o ZEOS 6.6.1 no Delphi 7
1º
Vá ao menu do Delphi em Tools->Environment Options->(aba) Library.
Em Library Path adicione os seguntes caminhos do Zeos:
..\packages\delphi7
..\src\component
..\src\core
..\src\dbc
..\src\parsesql
..\src\plain
2º
Clique no menu do delphi File->Open e localize onde está a pasta do
Zeos que tenha o nome ZComponentDesign (Geralmente está na Pasta
Packages do Zeos ..\packages\delphi7)
Compile o componente e depois instale, a paleta do ZEOS no Delphi 7
será instalada.
Conexão Cliente - Servidor:
Para conexão das máquinas cliente com o Servidor Postgresql, é necessário copiar para o C:\Windows\System32\ da máquina cliente os arquivos:
comerr32.dll
k5sprt32.dll
krb5_32.dll
libeay32.dll
libiconv-2.dll
libintl-2.dll
libpq81.dll
ssleay32.dll
Estas DLL ficam na pasta BIN do Postgresql.
1º
Vá ao menu do Delphi em Tools->Environment Options->(aba) Library.
Em Library Path adicione os seguntes caminhos do Zeos:
..\packages\delphi7
..\src\component
..\src\core
..\src\dbc
..\src\parsesql
..\src\plain
2º
Clique no menu do delphi File->Open e localize onde está a pasta do
Zeos que tenha o nome ZComponentDesign (Geralmente está na Pasta
Packages do Zeos ..\packages\delphi7)
Compile o componente e depois instale, a paleta do ZEOS no Delphi 7
será instalada.
Conexão Cliente - Servidor:
Para conexão das máquinas cliente com o Servidor Postgresql, é necessário copiar para o C:\Windows\System32\ da máquina cliente os arquivos:
comerr32.dll
k5sprt32.dll
krb5_32.dll
libeay32.dll
libiconv-2.dll
libintl-2.dll
libpq81.dll
ssleay32.dll
Estas DLL ficam na pasta BIN do Postgresql.
Comentários
Para mim costuma dar erro em DLL quando esqueço de copiá-las para o "C:\Windows\System32\".
Já experimentou repetir a configuração em outra máquina, para descartar problema com o Windows ? Fico à tua disposição para ajudar no que eu conseguir.
Atualmente uso esta configuração em um Windows XP Professional SP3 br, com Postgresql 8.3 e Zeos 6.5.1.
Enfrentei o seguinte problema: Instalei o PG e todos os componentes do Zeos na máquina. Ao executar obtive o erro "none of the dynamic libraries can be found". As dlls libpq81.dll e libpq.dll não eram encontradas.
O que fiz?
Obtive as dlls necessárias da pasta \bin da instalação do postgres e adicionei em system32 tal como dito no post. Mas minhas dlls tinham um nome diferente.
A "libiconv-2.dll" estava como
"libiconv2.dll". Então é só renomear para libiconv-2.dll que fica tudo certo. Maldito hífem!!
Caso não existam as dlls na sua pasta \bin, procure baixar de algum site.
aquele abraço.
As informações estão corretíssimas.
Um grande abraço, irei adicionar o seu Blog nos meus favoritos.
Rubens
Estou utilizando delphi 7 + zeos + postgress 8.3 sendo acessado em um servidor linux do meu notebook.
Esta funcionando perfeitamente.
Coloco no localhost : 192.168.205.253, password : abc123, port:5432 e estou acessando perfeitamente do meu notebook.
Estou com uma grande dificultade em instalar minha aplicação na máquina cliente WinXP. Pois quando coloco minha aplicação para rodar o sistema apresenta erros de conexão com o servidor'TCP/IP LocalHost. Já fiz todos os passos necessários, copiei as DLL's mais não funcionou. As DLL's tem que ser iguais a mencionada no blog que vc colocou ?, pois as que tenho são as seguintes :commer32.dll, k5sprt32.dll,krb5_32.dll,libeay32.dll,libconv-2.dlllibintl-8.dll,libpq.dll,ssleay32.dll.
O que pode esta acontecendo, por favor me ajude.
Abraços !
Lourival
Presumo que tenhas um servidor linux com Postgresql e que o notebook que está acessando com sucesso seja Windows XP, e que estejam todos no mesmo range de IP. Presumo também que tenhas testado desligar o firewall do teu cliente Windows XP para descartar que seja isso.
Se a tua máquina de desenvolvimento é o notebook, pode ser que o problema seja a falta de alguma dll no outro. Procure postar mais detalhes do erro de TCP/IP que está ocorrendo para eu tentar te ajudar.
Grato
Salomão
Utilizei esse procedimento em 2007 para o ZEOS 6.1.1, e não cheguei a testar em versões posteriores, mas acredito que fora alguma versão de dll o procedimento tenda a ser o mesmo.
With DM.QRelat do
Begin
Active := false;
SQL.Clear;
SQL.Assign(Comando_sql.Lines);
Active := true;
End;
Onde DM.QRelat é meu ZQuery e Comando_sql é um Memo onde está minha SQL.
Ao invés de uma rotina para impressão, costumo usar exportação para Excel, que acho mais versátil. Na Web tem vários tutoriais a respeito. Caso tenhas mais dúvidas estou à disposição.
Descobri o que estava acontecendo, o problema era que eu utilizo 3 componentes de conexões, e uma dela estava como localHost e = true;
Obrigado de qualquer forma por ter me respondido
estou fazendo um aplativo de acesso remoto delphi com o postgresql.
qdo eu uso o pgadmin III para manter os dados no banco, ele é muito rápido. como exemplo, eu dei um insert numa tabela com 5.000 linhas e esse finalizou em 8 segundos (remoto).
no meu aplicativo delphi, utilizando o Zeos, leva uma barbaridade de tempo. coisa de 15 minutos.
bom, a lentidão nem é só no acesso remoto, na rede interna tb. no meu aplicativo delphi utilizando o Zeos, essa atualização leva aproximadamente 50 segundos, enquanto a mesma atualização utilizando o pgadmin III, leva menos de 1 segundo.
sabes me dizer algo a respeito???
obrigado
adolfo sackl junior
Já experimentei lentidão em múltiplos insert/update em banco. Experimente antes de fazer um insert ou update em massa deixar disable todas as janelas de exibição de dados (principalmente GRIDs), e voltar para enable após a execução do comando.
O que causava lentidão para mim é o refresh dos dados na tela a cada comando executado.
tomei esse cuidado q vc mencionou! não estou vinculando as tabelas em nenhum outro componente (Edits, Grids, etc) e estou usando componente ZQuery, e mesmo assim não tive um resultado satisfatório. tens alguma outra colocação??? obrigado
adolfo sackl junior
Realmente não é normal lentidão assim, seja com ZEOS ou outros componentes. 5000 registros não é nada, trabalho com tabelas com milhões de registros e um insert não pode demorar isso. Sugiro começar revisando a configuração do teu postgresql.conf, pode ser algo em relação à otimização do banco de dados. Tem várias dicas na web. Podes experimentar desenvolver uma aplicação teste em Lazarus usando o componente nativo de comunicação dele e ver como se comporta com essa tua tabela. Outra tentativa que vale é instalar o PostgreSQL num servidor linux. Certamente o desempenho é superior.
Estou mudando todas minhas aplicações delphi7 para o sgbd postreSQL e tenho algumas dúvidas quanto a instalação cliente-servidor, usava o paradox com bde administration, o que parece bem diferente do postgreSQL, será que você não teria um passo a passo para me esclarecer...
Já consegui instalar o postgreSQL no servidor(meu notebook), o que não consego é fazer o cliente acessar as tabelas que já criei no postgreSQL. agradeço a atenção
Fabio Miraflores
Seguinte, as permissões de acesso ao banco são definidas nos arquivos pg_hba.conf e postgresql.conf. Para experimentar se a conexão está funcionando, podes alterar o final das linhas do pg_hba para "trust" conforme o exemplo abaixo:
host all all 127.0.0.1/32 trust
Importante também descomentar no arquivo postgresql.conf a linha "listen_addresses" e deixá-la como abaixo:
listen_addresses = '*'
Após isso o postgresql deve ser reiniciado. Qualquer dúvida pergunte novamente.
Devido a correria somente agora consegui um tempo para testar as orientações que você me passou e surgiram algumas dúvidas:
- no arquivo postgresql.conf a linha para alterar está em CONNECTIONS AND AUTHENTICATION?
Poço alterar a quantidade de conecções para mais de 100?
- no arquivo pg_hba.conf deverei simplesmente alterar o METHOD md5 para trust?
- Quais arquivos devo instalar nos computadores cliente?
Forte abraço
Fabio Miraflores
A linha do postgresql.conf a alterar é a "listen_addresses", que deve ficar como:
"listen_addresses = '*'
Quanto ao pg_hba.conf, trocando o METHOD para trust ele fica sem segurança nenhuma, é bom para testes ou se não tens nenhuma necessidade de segurança.
Os arquivos a copiar estão descritos no segundo passo do artigo.
Obrigado pela atenção prestada mas, surgiu mais uma dúvida:
Como faço para transferir o banco de dado com informações, ou seja,
preciso transferir todos os dados para um outro computador que fisicamente não está próximo, onde se localiza o arquivo que armazena o banco de dados assim como as informações dele?
Espero ter sido claro caso não entenda tentarei esclarecer posteriormente.
Forte abraço
Fabio Miraflores
Para "transferir" um banco de dados do Postgresql para outro computador um backup tem que ser gerado. Isso pode ser feito com o pg_dump e pg_restore via linha de comando:
pg_dump -U usuario -Fp -f nomearquivo nomedobanco
Copie o arquivo para o computador destino e use o comando:
pg_restore -Ft -U usuario -d nomedobanco nomearquivo
Estou tentando executar meu aplicativo no computador cliente e ocorre um erro de dll kernell32.
Já copiei as dll do postgre para a pasta system32 e até mesmo todas as dll do delphi e o problema continua, será que você tem alguma ideia do que pode ser?
Grato pela atenção
Fabio Miraflores
Graças a Deus consegui resolver o problema mas agora aparece a seguinte mensagem:
'could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "192.168.0.100" and accepting TCP/IP connections on port 5432?'
Esta mensagem aparece somente nas máquinas cliente.
O que poço fazer?
Forte abraço
Fabio Miraflores
está declarado desta forma:
"listen_addresses = '*' "
e a mensagem continua
Fabio Miraflores
Estou utilizando XP + Delphi 7 + PG 8.4. Tenho um sistema que com algumas configurações extras posso utilizar Mysql e Firebird. Mas quando utilizo com o PG vejo que teria que refenciar junto com a instrução SQl Também o nome so schema, tem alguma de se evitar isso? ou seja alguma configuração onde eu pudesse utilizar a mesma intrução SQL para esses três bancos? No caso seria fazer com que o PG sempre utilizasse por default o schema Public?
Mas ao executar a aplicação ele não roda dizendo:
sql error: could not translate host name 'server01', que é o host linux onde esta o postgresql.
could not create socket... o provedor de serviços nao pode ser carregado ou inicializado.
Se por acaso estiveres rodando na mesma máquina que o banco, experimenta trocar por "localhost".
Caso não consigas posta teu erro completo aqui, e tb teu pg_hga.conf para ver se consigo identificar algo.
Parabéns pelo blog.