sexta-feira, 12 de outubro de 2007

Instalação Zeos no Delphi 7 para acesso ao Postgresql

Para instalar o ZEOS 6.6.1 no Delphi 7


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


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.

39 comentários:

Anônimo disse...

Cristiano estou iniciando no postgreSQL e o meu sistema tem um banco de dados em Firebird 2.0 usando Delphi 7 e Zeos. Devido o crescimento da empresa que trabalho achei melhor migrar todo o banco de dados para o postgreSQL só que quando vou conectar o banco pelo zeos dá erro em uma dlls.

Cristiano Dienstmann disse...

Poste mais detalhes do problema, quem sabe consigo te ajudar. Deu erro em que DLL ? Quais as versões de Windows, Zeos e Postgresql que estás usando ? O Postgresql conecta normalmente via PGADMIN ou outro administrador ?
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.

Anônimo disse...

Cristiano, estou com dificuldade em acessar o servidor atraves da maquina cliente. Uso Postgre 8.3, Zeos 6.5.1, Windows XP e Delphi 7, configurei pg_hba.conf (host all all 0.0.0.0/0 md5) e postgresql.conf (Listen-addresses por '*') minha duvida é como fica o hostname do zconection tentei colocar o nome da maquina servidor mas não funcionou, acho q pode ser este o problema, obrigada.

Cristiano Dienstmann disse...

No zconnection deves configurar os seguintes campos: HostName, User, Password e Port. Em hostname deves utilizar o IP do servidor. Tente e qualquer dúvida contate novamente, preferencialmente identificando-se, para que possa responder diretamente.

Anônimo disse...

Bom dia!!! alguem pode me ajudar pois meu aplicativo roda certinho na maquina local mais quando eu tento fazer de uma maquina cliente ele nem roda o windows avisa que ocorreu uma operação ilegal!!!

Anônimo disse...

Olá, ótimo post, bem prático e rápido. Gostaria de deixar minha contribuição aqui.

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.

Anônimo disse...

Tenho muito a agradecer a Cristiano pelas informações prestadas em seu BLog, está de parabéns
As informações estão corretíssimas.
Um grande abraço, irei adicionar o seu Blog nos meus favoritos.
Rubens

Anônimo disse...

Boa magrudada Cristiano !

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

Cristiano Dienstmann disse...

Lourival, vamos por partes:
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.

Salomão disse...

Cristiano estou iniciando agora no Postgre, gostaria de saber se para instalar o ZEOSDBO-6.6.4-stable são os mesmos passos do ZEOS 6.1.1

Grato
Salomão

Cristiano Dienstmann disse...

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.

Salomão disse...

Muito obrigado deu certo. Gostaria se tem uma ferramenta para fazer relatórios no delphi utilizando o ZEOS ou se tem algum tutorial, pois estou apanhando muito. tipo quando faço uma consulta no POstgreSql uma blz, mas não to sabendo como fazer isso no delphi.tenho que fazer isso como um relatório, tentei usar o quickreport ms não consegui.

Cristiano Dienstmann disse...

Salomão, para relatórios utilizo simplesmente Um DBgrid vinculado a um Datasource vinculado a um componente do Zeos chamado ZQuery. Existe o parâmetro SQL nesse componente que quando ativo irá exibir o resultado no DBGrid. Para deixar isso dinâmico faço:
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.

Lourival disse...

Boa tarde Cristiano;

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

Lourival disse...

Cristiano, fiz o meu programa em delphi utilizando o Zeus acessando uma base postgres no linux. O programa funciona perfeitamente, porém quando passa alguns minutos ocorre a perda de conexão, não consigo mais gerar as informações. Como faço para resolver este problema ? Como proceder ?

Anônimo disse...

olá cristiano!
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

Cristiano Dienstmann disse...

Bom dia, Adolfo.
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.

Adolfo disse...

olá cristiano!!!! eu novamente!
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

Cristiano Dienstmann disse...

Adolfo,
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.

Adolfo disse...

realmente eu devo estar fazendo alguma coisa errada no componente zeoslib. pois se eu faço a mesma atualização dos registros com o pgAdmin III, com a mesma conexão de internet, com o mesmo servidor, etc etc, a atualização é questão de segundos. usando o meu aplicativo delphi + zeoslib, isso não acontece. pior q eu já pesquisei por tudo e não encontrei nenhuma resposta. mas vou dar mais uma olhada nas dicas q vc me passou. obrigado!! adolfo sackl junior

Anônimo disse...

Cristiano, boa noite!
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

Cristiano Dienstmann disse...

Bom dia, Fabio. Desculpe a demora na resposta, estava offline nos últimos dias.
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.

MIRAFLORES: MODERADOR DE COMENTÁRIOS DO BLOG disse...

Bom dia, Cristiano

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

Cristiano Dienstmann disse...

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.

MIRAFLORES: MODERADOR DE COMENTÁRIOS DO BLOG disse...

Boa tarde, Cristiano!

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

Cristiano Dienstmann disse...

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

Joice disse...

Boa tarde cristiano estou usando o windows 7 com banco de dados postgres e delphi2007 ao executar ele me da um erro de None of the dynamic libraries can be found libpq81 e libpq...as duas estao no windows/system32 e na pasta bin do postgres vc poderia me ajudar

MIRAFLORES: MODERADOR DE COMENTÁRIOS DO BLOG disse...

Boa noite, Cristiano

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

MIRAFLORES: MODERADOR DE COMENTÁRIOS DO BLOG disse...

Boa tarde, Cristiano

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

Cristiano Dienstmann disse...

Joice, ainda não tive a oportunidade de testar esse ambiente em Windows 7, mas pretendo fazer nos próximos dias e posto aqui o resultado.

Cristiano Dienstmann disse...

Miraflores, isso parece tipicamente restrição de acesso do Postgresql para outras máquinas. Verifica se o "listen Address" está "*" no postgresql.conf.

MIRAFLORES: MODERADOR DE COMENTÁRIOS DO BLOG disse...

Cristiano,

está declarado desta forma:

"listen_addresses = '*' "
e a mensagem continua

Fabio Miraflores

SALOMAO.SLIMA disse...

Boa noite Cristiano, gostaria de saber como faço para importar dados de uma planilha excel para o postgre utilizando o delphi? ja vi algo na internet, mas to apanhando.

Carlos Eduardo disse...

Cristiano boa tarde...

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?

Anônimo disse...

Cristiano, meu aplicativo em tempo de design conecta banco, coloco active=true na zquery, ele apresenta os dados da tabela (select * from..), sem problemas.
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.

Cristiano Dienstmann disse...

Experimente substituir o nome do host pelo IP do servidor, provavelmente seja este o problema.

Anônimo disse...

já tentei, dai o erro é:
could not create socket... o provedor de serviços nao pode ser carregado ou inicializado.

Cristiano Dienstmann disse...

Uma situação que já experimentei é não poder executar o programa com o TZConnection já ativo. Experimenta começar com o Connected = false, e ativa ele na inicialização da tua aplicação.
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.

Anônimo disse...

Cristiano, vlw obrigado, era isso, abrindo a zconnection somente em runtime funcionou!!!
Parabéns pelo blog.