Lazarus - Conectando PostgreSQL com ZeosLib

Neste artigo mostraremos como criar uma aplicação simples usando o conjunto de componentes ZeosLib e o banco de dados PostgreSQL (PG). ZeosLib precisar ser baixado e instalado. Depois de extrair os arquivos, inicie o Lazarus. Selecione no menu Package -> Open package file (.lpk). Localize o diretório onde você extraiu o componente e selecione o pacote zcomponent.lpk em \packages\lazarus. Na janela que abrir clique em Compile. Aguarde finalizar e então clique em Install. Esse procedimento irá recompilar o Lazarus e depois ele será reinicializado. Confira que uma nova aba foi adicionada na paleta de componentes - Zeos Access.
Com relação ao banco de dados, você pode baixá-lo no site oficial. A instalação é muito simples, inclusive no Ubuntu. No Windows localize libpq.dll no diretório de instalação do PG e copie-a para o diretório System32 - procedimento necessário para o funcionamento do Zeos com PG.
Agora que está tudo instalado, no PG, crie um novo banco de dados - chame-o de clientes - e as tabelas necessárias para o nosso exemplo:

create table cidade (id_cidade integer primary key, nome varchar(30));

create table cliente (id_cliente integer primary key, nome varchar(40), endereco varchar(40), id_cidade integer references cidade(id_cidade), telefone varchar(14), tipo char(1), status boolean);

Vamos criar uma aplicação semelhante àquela que criamos nos posts em Lazarus - Acessando banco de dados com SQLdb - Parte I e Parte II. Como a interface é a mesma, vamos descrever apenas a criação do Data Module.
Inicie o Lazaus, crie uma nova aplicação e adicione um Data Module ao programa. Defina Name como dmDados. É no Data Module que tudo irá acontecer daqui em diante.

TZConnection

Esse componente é reponsável por criar uma conexão com o banco de dados e controlar as transações. Veremos que ele possui propriedades que permitem que seja configurado para se conectar a vários bancos de dados: PostgreSQL, Firebird, Oracle, SQLite e outros. Coloque um desses no Data Module. As seguintes propriedades merecem um melhor entendimento:

AutoCommit - determina de que forma as alterações são confirmadas no banco de dados. Se deixar em True as alterações são confirmadas implicitamente. Caso se deseje confirmar explicitamente devemos mudar para False. No nosso caso deixemos em True.
Connected - estabelece uma conexão com o banco. Durante o desenvolvimento, se for necessário, coloque em True. Mas lembre de voltar para False antes de finalizar o projeto.
Database - define o nome do banco de dados. Digite clientes. Se estiver usando o Firebird ou SQLite você deve informar o caminho completo do arquivo do banco de dados.
HostName - informa o nome ou IP do servidor de banco de dados. Se for a máquina local atribua o nome localhost.
Name - informe dbCliente.
Password - informar a senha do servidor de banco de dados. Informe a senha do usuário definida durante a instalação do PG.
Protocol - define qual o banco de dados que será conectado. Informe postgresql-8 ou o que for adequado ao banco usado.
TransactionIsolation - define o nível de isolamento da transação. No nosso caso vamos usar tiReadCommitted.
User - define o nome do usuário do banco de dados. Informe o usuário criado durante a instalação do PG.

Para fazer um teste da conexão, mude a propriedade Connected para True. Se estiver tudo certo não deve acontecer erro.

TZUpdateSQL

Especifica os comandos SQL de atualização - INSERT, UPDATE e DELETE. Atua em conjunto com um TZQuery. Inclua um componente desse no Data Module e defina suas propriedades assim:

DeleteSQL - DELETE FROM CIDADE WHERE ID_CIDADE = :OLD_ID_CIDADE;
InsertSQL - INSERT INTO CIDADE VALUES (:ID_CIDADE, :NOME);
ModifySQL - UPDATE CIDADE SET NOME = :NOME WHERE ID_CIDADE = :OLD_ID_CIDADE;
Para informar os comandos clique na propriedade correspondente do Inspetor de Objetos. Digite o comando no editor e tecle OK.


Name - defina como upCidade.
Qualquer identificador precedido por dois pontos (:) é um parâmetro que será definido quando o comando for executado. O prefixo OLD possibilita o acesso ao valor do campo antes dele ser modificado.

TZQuery

Query que deve ser usada para atualizar dados em tabelas. É usada em conjunto TZUpdateSQL para que execute as operações de INSERT, UPDATE ou DELETE. Para cada tabela do banco deveremos ter um desses componentes no Data Module. Inclua uma TZQuery no Data Module e vamos alterar suas propriedades:


Connection - especifica o objeto TZConnection. Selecione dbCliente.
Name - queCidade.
SQL - especifica um comando SELECT para mostrar os dados da tabela. Informe: SELECT * FROM CIDADE.
UpdateObject - define o objeto TZUpdateSQL que será usado em conjunto com TZQuery. Selecione upCidade.

Para finalizar o desenho do acesso à tabela Cidade, coloque um TDataSource da aba Data Access. Defina Name como dsCidade e DataSet como queCidade.
Com exceção de TZConnection - que deve ser apenas um - repita o processo para definir o acesso à tabela Cliente. O Data Module deverá ter esse aspecto:


Não é necessário incluir todo aquele código no evento AfterPost das TZQueries. Isso é feito automaticamente pois a propriedade AutoCommit de TZConnection está definida como True. A partir de agora o programa é exatamente igual ao que foi criado em Lazarus - Acessando banco de dados com SQLdb - Parte I e Parte II. Siga os mesmos passos desses posts. Bem, uma pequena modificação se faz necessária. Nos eventos OnShow e OnClose de frmPrincipal na aplicação anterior nós incluimos códigos para abrir e fechar a conexão. Diferente do SQLdb, no Zeos, o comando para abrir a conexão será:

dmDados.dbCliente.Connect;

e para encerrar:

dmDados.dbCliente.Disconnect;

Qualquer dúvida na criação dessa aplicação, podem me escrever ou deixar um comentário. Terei o maior prazer em ajudar.

7 comentários:

ximenes disse...

Profesor parabens, cada vez que você atualiza seu blog fico impressionado com o tamanho do seu conhecimento, nao é querendo lhe bajular, gosto muito dos seus poster e fico filiz de lhe seguir na blogosfera.
_____________________________________
http://wximenes.blogspot.com/

Anônimo disse...

Profesor parabens, cada vez que você atualiza seu blog fico impressionado com o tamanho do seu conhecimento, nao é querendo lhe bajular, gosto muito dos seus poster e fico filiz de lhe seguir na blogosfera.
_____________________________________
http://wximenes.blogspot.com/

ojuaran disse...

Querido Professor
Por favor crie curso de lazarus em dvd, com diversos níveis, e venda-os. Estamos necessitando de fonte didática sobre o lazarus. Ou até mesmo livros sobre o assunto pois nada há no mercado. ojuaran@gmail.com--Muito obrigado

Anônimo disse...

Boa tarde Professor, me chamo Fabrício sou universitário do curso de Analise de Sistemas, estou fazendo um projeto em lazarus e estou com muitas dificuldades por não achar material disponível, gostaria de sua ajuda se for possível, por onde começo a estudar? pelo Free Pascal? posso usar uma apostila de Delphi como base? estou meio sem rumo aguardo seu retorno professor, obrigado.


Fabrício - Goiânia - GO

Professor Carlos disse...

Fabrício
Aqui no blog tem muitos artigos para quem está começando no Lazarus. Desde criação de menus, barra de ferramentas e de status e acesso a bancos de dados. Mas pode usar uma apostila de Delphi sim. Tem muita coisa parecida. Aqui você encontra a documentação completa do Free Pascal:
ftp://ftp.freepascal.org/pub/fpc/docs-pdf/

Unknown disse...

Prezado Professor, estou iniciando no Lazarus x PostgreSql 9.0.3 no Ubuntu 10.04 e está sendo bastante interessante. Estou com uma situação complicada e não estou conseguindo sair do outro lado!
Estou utilizando o PQConnection1, SqlTransation e TSqlQuery, executo a query mas na hora de incluir ou alterar qualquer informação simplesmente não estou conseguindo sucesso. Poderia me ajudar, grato,

Professor Carlos disse...

José Maria

Você pode ser mais claro sobre o que significa não estar conseguindo sucesso? Dá erro? Que erro? Não consegue gravar no banco?

Django - Composição de queries brutas (raw queries)

Django Rest Framework (DRF) é uma poderosa ferramenta para criar Web APIs. Ele requer o uso de Python e do framework Django. Mesmo o Django...