sexta-feira, 6 de março de 2015

dbExpress Suporte ao MySQL no Delphi 2010 e XE


Parece ser frequente as dúvidas relacionadas a utilização do driver dbExpress para MySQL, na grande maioria usuários das versões 2010 e XE do Delphi
O arquivo readme.html que está localizado no diretório onde o Delphi foi instalado, documenta as versões de MySQL e dos outros bancos suportados pelo dbExpress. No caso do MySQL o arquivo inclui as combinações de versões de server e bilbiotecas clientes suportadas, infelizmente o MySQL a cada nova versão traz inúmeras alterações nas API’s e acabe dificultando uma pouco nosso trabalho.

Abaixo informações que você deve saber.

Versões de servidores MySQL oficialmente suportadas e testadas.

MySQL 5.1, 5.0.27, 4.1 (Todas) (Driver dbxMYS.dll, Client libmysql.dll)

Combinação das versões de servidores e clientes MySQL que foram testadas

LibMySQL.dll (5.1.XX) Client - DBXMys.dll MySQL 4.0.XX Server
LibMySQL.dll (5.1.XX) Client - DBXMys.dll MySQL 5.0.XX Server
LibMySQL.dll (5.1.XX) Client - DBXMys.dll MySQL 5.1.XX Server
Em resumo, você tem que instalar a versão do cliente do MySQL 5.1.xx para que sua aplicação cliente funcione com servidores MySQL 4.0.XX, 5.0.XX e 5.1XX

O que fazer caso você tenha outras versões do Delphi na mesma máquina?

Caso isso aconteça o IDE poderá carregar uma das versões antigas do driver dbExpress para MySQL, isso acontece porque o diretório bin da versão anterior do Delphi está a frente na variável de sistema PATH, para resolver este problema, no menu Tools -> Options -> Environment Variables adicione o PATH da versão atual do Delphi a frente de todas as variáveis. Lembre-se que casa você use a versão anterior instalada na sua máquina, você deverá atualiza a variável de ambiente PATH novamente.

Espero que essas dicas tenham ajudado. 

Post Origial blog do Andreano.
http://www.andreanolanusse.com/pt/dbexpress-suporte-ao-mysql-no-delphi-2010-e-xe/

Usando Coalesce em Comandos SQL


Nessa dica, vou expor uma situação comum para nós desenvolvedores, que pode ser resolvida de várias formas, (como tudo em programação), mas sempre existe a forma correta ou a que vai garantir a integridade do sistema, e ainda, ser resolvida em pouquíssimo tempo.

Imaginem a seguinte situação, uma empresa possui uma entidade chamada TitulosPagar, nessa entidade estão gravados os titulos a pagar com as suas respectivas datas de vencimento. Nessa mesma entidade temos um campo chamado Prorrogado, que é preenchido quando o fornecedor concede uma prorrogação no título para que o mesmo seja pago após a data de vencimento sem juros etc.

Vocês ja devem ter imaginado que o sistema em questão possui um relatório de Titulos a Pagar em um determinado período. Certo?

Nesse caso o mesmo poderia usar o um Sql simples como o abaixo:

Select titulo, valor, vencimento
From titulosPagar
Where dataVcto between :dataIni and :dataFim

Tranquilo né. O Sql retorna todos os títulos a pagar com vencimento no período passado nos parâmetros dataIni e dataFim.

Vamos complicar, um belo dia o cliente liga para você pedindo para que nesse mesmo relatório de titulos a pagar considerasse a data de prorrogação também, ou seja deve ser listado todos os títulos analisando a data de vencimento, e também a data de prorrogação. 

Saída rápida, fazer duas querys, com dois Sql diferentes, um analisando o período pela data de vencimento e o outro analisando pela data de prorrogação, depois gravar tudo em um ClientDataSet e ligar o Client ao relatório. Beleza? Funciona com certeza, mas da um trabalhão, sem falar no tempo de processamento, dependendo o tamanho da entidade de TitulosPagar o processo será demorado.

Solução:
Criar o seguinte comando SQL.

Select titulo, valor, vencimento
From titulosPagar
Where Coalesce(Prorrogado, dataVcto) between :dataIni and :dataFim

Bingo! Temos uma query apenas, um processamento, e a solução com certeza não demorou mais que 1 minuto para alterar a query.

Sistema Fechando Sozinho


Amigos, acompanhando os grupos de discussão sobre programação e outros, percebi que muitas pessoas estão enfrentando um problema em comum.
Programas feitos em Delphi e ou VB, fechando sozinho, do nada o sistema fecha, como se alguém tivesse clicado em finalizar processo.

Também passei por isso, e depois de muitos testes descobri a causa.
O Bradesco, contratou uma empresa para desenvolver uma solução de segurança para eles, a mesma criou um processo que é inicializado quando o site do banco é aberto, e que verifica todos os outros processos que estão rodando. Caso considere o programa suspeito imediatamente encerra o processo.

Se você tem o costume de usar o compactador de exe chamado UPX, esse processo de segurança irá identificar o seu sistema como um programa malicioso ou suspeito, e irá finalizá-lo. 
Fato já comprovado! Para piorar o processo inicializado pelo site do Bradesco não é finalizado quando o browser é fechado, ou seja, para você conseguir usar o seu programa precisa reinicializar a máquina.