Mostrando postagens com marcador zeos. Mostrar todas as postagens
Mostrando postagens com marcador zeos. Mostrar todas as postagens

terça-feira, 29 de julho de 2008

ZeosLib, ParamCheck e Conversão

É sabido que o o nosso bravo PG é um banco de dados objeto-relacional, certo?

O que isso significa? Que você pode encarar uma tabela como uma classe, e um registro como instância e por ai vai. Mas não vou entrar neste mérito não. Tenho que comer mais arroz e feijão.

Eu quero é chamar a atenção é que algumas funções como CAST ou EXTRACT pode ser facilitada da seguinte forma:


SELECT CAMPOTIMESTAMP::DATE
FROM NOME TABELA


Percebeu os "::"?

Veja um exemplo prático:



Ou seja, consegui extrair a data de um campo TIMESTAMP de uma forma bem tranquilo e isso vale para outras conversões também.

Mas o lance é aplicar isso no Delphi...

Se você tentar fazer a mesma coisa diretamente no TZQuery dá o seguinte erro:



Por que?

Isso acontece por causa dos parâmetros que você pode definir dentro da query, que são identificados por ":".

Para resolver isso, porém abdicando dos parâmetros, desabilite o parâmetro ParamCheck.

Funciona que é uma beleza!

quarta-feira, 28 de maio de 2008

Zeos, Mensagens de erros em português

As mensagens de erros do Zeos está na unit ZMessages, que está localizado em (ZEOS)\src\core\ZMessages.

Sugiro que no começo desta unit você crie um define, como no exemplo abaixo:



Pronto! O erros agora virão em português.

Zeos, Postgres e Stored Procedures

Olá! Enfim um tópico que reflete o objetivo do blog. =D

Se quiser ir direto à solução, acesse:
http://www.activedelphi.com.br/forum/viewtopic.php?t=40660

1ª Parte: O Problema

Um colega de profissão, Leonardo, me mandou um e-mail nestes últimos dias, com a seguinte situação:

Migrar do SQL Server para PostgreSQL. Porém usa-se extensivamente storeds procedures, sendo necessário usar o TZStoredProc para facilitar esta migração.

Problema: Ao executar a Stored Procedure dá a seguinte mensagem de erro: unssuported function.

Ambiente: Delphi 7, ZeosLib 6.5.1, PostgreSQL 8.2


Pois bem, este assunto estava na fila já faz tempo e resolvi encarar o problema de frente.

Pergunta: Da onde vem esta mensagem?

Nos fontes do Zeos, procurei a mensagem de erro. Fui encontrar em ZMessages, sendo que ele alimenta uma variável chamada SUnsupportedOperation.

Daí corri atrás da SUnsupportedOperation e vi que ela é usada em vários lugares, a fim de gerar exceptions, em especial, nas operações não suportadas, ou seja, nas que ainda não foram implementas.

Abaixo um print do Call Stack até chegar na mensagem de erro:



Outra coisa interessante é que os parâmetros (no caso os de input) não seguiram em frente também.

Afunilando mais ainda, percebi que o problema está em CreateCallableStatement, presente na classe TZAbstractConnection. As classes descendentes desta, precisam reescrever este método, do contrário ela gera o exception. E isso não foi feito em TZPostgreSQLConnection, declarada em ZdbcPostgreSql.

Logo...

O TZStoredProc não serve para nada em relação ao PostgreSQL.

2ª Parte: A solução para quem usa a versão 6.6.1

A partir da versão 6.6.1, tudo o que escrevi aqui na parte de cima virou passado, mas continou sendo problemático usar a TZStoredProc com o PostgreSQL.

Neste meio tempo o Leonardo postou esta dúvida no fórum do Active Delphi e o Marcos Thomaz disponibilizou um componente que ele desenvolveu, o TZFunction.

Acompanhe o tópico:

http://www.activedelphi.com.br/forum/viewtopic.php?t=40660

Link para o componente TZFunction:

http://ube-167.pop.com.br/repositorio/28488/meusite/ZFunction.zip

Por enquanto é isto.

Devo voltar neste assunto nos próximos tópico.

quarta-feira, 30 de janeiro de 2008

TZPgSqlQuery - Consultas sem a cláusula FROM

Estava às turras com certos tipos de consultas com os componentes do Zeos.

A instrução abaixo, por exemplo, não ia para frente:

SELECT CURRENT_DATE;


Ficava no limbo.

O que acontece é que o componente espera que exista a cláusula FROM na consulta.
Como não tem, fica "eternamente" procurando.

A solução é configurar a propriedade options do componente incluindo doQuickOpen.

Isso é útil para executar storeds procedures.

quarta-feira, 25 de julho de 2007

Instalação do Zeos

A instalação do Zeos é meio chatinha e confusa mesmo...

Um bom tutorial disponível é o que foi publicado por Tiago Marcel Knipers em julho de 2005 na iMasters.

E para minha surpresa funcionou muito bem no BDS2006 e com a versão 6.6.1 beta do Zeos.

http://www.imasters.com.br/artigo/3377

Minha lista de blogs