Pular para o conteúdo principal

Lazarus - Conectando Firebird com SQLdb ou ZeosLib

Vamos mostrar duas maneiras de acessar Firebird no Lazarus. Uma usando os componentes nativos SQLdb e outra usando ZeosLib. Já fizemos aqui alguns exemplos e a construção da interface não será mais tratada. Apresentaremos apenas os passos necessários no Data Module. Usaremos a versão 0.9.29 do Lazarus.
Antes de iniciar é importante ter conhecimento da versão do Firebird, principalmente para o caso de usar ZeosLib. Crie o banco dados. Vamos usar o mesmo banco usado em artigos anteriores.

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

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

Diferente do PG, no Firebird você pode ter um arquivo de banco em qualquer diretório que você queira, desde que seja na máquina local onde está instalado o servidor FB.

Usando SQLdb

Selecione a aba SQLdb e coloque no Data Module um TIBConnection. Ele que fará a conexão com o banco. Defina então as seguintes propriedades:

DatabaseName - informe o arquivo do banco de dados com o caminho completo.
HostName - informe o nome ou o IP do servidor de banco de dados.
Name
- informe um nome para a conexão. Por exemplo: dbCliente.
Password - informe a senha do usuário. Normalmente é masterkey.
UserName - informe o nome do usuário. Normalmente é sysdba.

Coloque agora um TSQLTransaction e selecione dbCliente na propriedade Database, e na propriedade Name digite trGeral, por exemplo.
Volte ao TIBConnection e informe trGeral na propriedade Transaction. Coloque a propriedade Connected em True para verificar se a conexão é feita. Depois volte para False.
Coloque um TSQLQuery no Data Module e defina suas propriedades:

Database - selecione dbCliente.
Name - defina queCidade.
SQL - informe SELECT * FROM CIDADE.
Transaction - selecione trGeral.

Coloque agora um TDataSource da aba Data Access e mude Name para dsCidade e em DataSet selecione queCidade.
No evento AfterPost de queCidade digite o código:

queCidade.ApplyUpdates;
trGeral.CommitRetaining;

No evento AfterDelete selecione o mesmo método para não repetir código.
Pronto. Está feita a configuração de acesso, tanto para leitura quanto para escrita, em uma tabela FB. Assim como nos exemplos anteriores lembre-se de conectar e desconectar o banco de dados através de código.

Usando ZeosLib

Usaremos a versão 7.0 do ZeosLib disponível no grupo Lazarus-BR. Coloque um TZConnection no Data Module. Defina as propriedades:

Database - informe o arquivo do banco com o caminho completo.
HostName - informe o nome ou IP do servidor do banco. Para máquina local informe localhost.
Name - digite dbCliente.
Password - informe a senha do usuário. Geralmente masterkey.
Protocol - informe firebird-xx. Observe a versão do FB que você está usando.
User - informe sysdba.

Mude Connected para True. No Windows se ocorrer um erro de dll, localize a mesma na pasta do FB e copie-a para system32 do Windows. Depois de conectar com sucesso volte Connected para False.

Coloque um TZQuery e um TZUpdateSQL e configure-os como foi feito no artigo Lazarus - Conectando PostegreSQL com ZeosLib.
Coloque um TDataSource da aba Data Access e defina Name como dsCidade e em DataSet selecione a TZQuery anterior. Ai está. Agora crie a interface com nos posts anteriores.

Comentários

Anônimo disse…
Primeiro meus parabéns pelo blog.É muito bom!! Mas eu gostaria de saber como resolver o problema do campo auto-incremento ( configurado pela trigger no banco de dados do firebird).

Valdirene
Professor Carlos disse…
Obrigado pelo comentário. Você poder dar detalhes do problema?
Anônimo disse…
Bem, eu tambem rodei o exemplo e está dando um erro relacionado com a trriger. A mensagem é "Project meuprojeto.exe raised exception class 'external: SISSEGV'.
Aparentemente é nesta linha:
procedure TDBEdit.KeyPress(var Key: char);
function CanAcceptKey: boolean;
begin
Result := Field.IsValidChar(Key) and
(Field.DataType<>ftAutoInc);
end;
var
SavedKey: Char;
Professor Carlos disse…
Você criou um trigger para o autoincremento? Qual o seu objetivo com esse código? Pode enviar o código do gatilho?
Anônimo disse…
Sim, eu criei uma trigger de autoincremento no banco de dados Firebird.
Eu quero que o formulário vá aumentando a numeração, ex: 01,02,03...). Mas na hora em que tento gravar dá um erro no lazarus.

Código da trigger:
Insert as
begin
if (new.id_cidades is null) then
new.id_cidades = gen_id(gen_cidades_id,1);
end
Professor Carlos disse…
O erro SIGSEGV acontece quando vc tenta acessar um objeto que não foi criado ou então foi destruido. Se vc puder criar um pequeno demo reproduzindo o problema, mande para o meu e-mail que vou verificar.
Fabio Ferreira disse…
Hi, I write in English because I don't know portuguese.
I have a blog with a clear tutorial to make an application with Lazarus+Zeos+Sqlite.

The link is this:

http://lazaruszeos.blogspot.com/

I hope it will be usefull
Willian Tessaro disse…
e essa ligação daria certo para WIndowsMobile? queria conectar o SQLITE do palm com um banco de dados FIREBIRD do computador. seria possivel via wireless? esse tutorial funcionaira compilando meu projeto para WinCE?
Professor Carlos disse…
Da maneira que está feito não funciona no WM. Precisaria ter um SGBD Firebird no PDA, que não existe. A solução é criar um servidor de aplicação no desktop acessando o FB. Dai o PDA envia as requisições necessárias ao appserver, que executa e devolve o resultado. Dá pra fazer isso usando o componente lNet, que é compatível com o WM.
Anônimo disse…
Ola tudo bom?
Começei montar um programa com lazarus e usei o ibexplex, fiz a conecção igual seu tutoail e funcionol, só que tem um problema, eu fiz uma chave estrangeira na tabela imprestimo de livro , liguei id livro ao campo livro emprestado, ai como faço para na hora de cadastrar um emprestimo ele puxar o livro da tabela livro?
tipo no meu serviço é em delphi quando vc vai cadastar um produto por exemplo vc aperta tab no campo e aparece uma lsita com todos produtos, ñ tou conseguindo fazer essa ligação no lazarus.
Tem alguma dica?
t+++
Professor Carlos disse…
Use DBLookUpComboBox. Eu descrevo como fazer isso no post http://professorcarlos.blogspot.com/2010/02/lazarus-acessando-banco-de-dados-com_24.html
Anônimo disse…
Olá professor estou tentando instalar o Zeoslib para usá-lo com o mysql5.5 só que durante a compilação na Unit ZAbstractROdataset aparece a seguinte mensagem de erro:C:\Users\lidiane\programas\src\component\ZAbstractRODataset.pas(3024,47) Error: Illegal expression
e aí o componente não é instalado.
Eu estou usando a versão 0.9.31 do lázarus.
Obrigada
Lidiane
Professor Carlos disse…
Quais as versões do Zeos e Lazarus que você está usando?
Unknown disse…
Boa tarde Professor!
Olá tudo bem
Estou usando Lazarus,Zeus, Firibird
No windows Xp esta conectando mas no win 7 não conecta ao banco ja setei varias biblio mas todas diz que tem incompatibilidade o senhor teria alg
Professor Carlos disse…
Se o seu Windows for 64 bits, as dlls devem ficar no SysWOW64

Postagens mais visitadas deste blog

Lazarus - Acessando banco de dados com SQLdb - Parte I

Para fazer nossa primeira aplicação usando banco de dados no Lazarus vamos usar o SQLite e o conjunto de componentes nativo SQLdb. Inicialmente vamos apresentar passo como essa aplicação foi criada. Essa foi a maneira que eu fiz, e eu agradeço sugestões e questionamentos que pessoas que já passaram por essa experiência. Depois irei fazer algumas considerações sobre o uso do SQLdb. SQLite SQLite é uma biblioteca que implementa um motor de banco de dados SQL. É livre para qualquer finalidade, seja uso particular ou comercial. Lê e escreve em um único arquivo que pode ter além de tabelas, índices, gatilhos e visões. Executa em várias plataformas e é indicado para aplicações embarcadas. Maiores detalhes podem ser encontrados no site oficial. Para usá-lo, baixe-o do site e faça a instalação adequada para o seu sistema operacional. No Windows isso é muito simples, apenas copie sqlite3.dll para o system32 da pasta do sistema operacional. Existe uma ferramenta de linha de comando chamada

Tipos de dados no SQLite

Em SQLite, diferente de outros motores de banco de dados, o tipo de dado de um valor está associado com o valor propriamente dito, e não com o seu contêiner. É um sistema de tipo dinâmico. Um campo de uma tabela em SQLite pode receber qualquer tipo de dado. Assim, o SQLite simplesmente ignora o tipo informado no comando CREATE TABLE. Então, dizemos que no SQLite existem classes de armazenamento. E essas classes são: NULL - como em qualquer outro banco de dados. INTEGER - inteiro com sinal, armazenado em 1, 2, 3, 4, 6 ou 8 bytes dependendo da grandeza do valor. REAL - valor de ponto flutuante armazenado em 8 bytes. TEXT - uma string armazenada usando UTF-8, UTF-16BE ou UTF-16LE. BLOB - armazena um blob, como indica o nome. Uma coluna INTEGER PRIMARY é uma exceção. Só aceita números inteiros. Qualquer valor em um comando SQL tem uma classe de armazenamento implícita. Durante a execução do comando SQL, o SQLite pode converter valores entre classes numéricas (INTEGER e REAL)

Lazarus - Criando relatórios com FortesReport (Parte I)

Para a criação de relatórios, o Lazarus já trás o componente LazReport, no entanto ele precisa ser instalado no IDE. Para fazer a instalação do pacote, acesse o menu Package -> Open package file (.lpk) . Localize o diretório de instalação do Lazarus e na pasta components abra lazreport e depois source . Abra o pacote lazreport.lpk , clique em Compile e depois em Install . Como já sabemos isso irá recompilar o IDE. Depois de inicializado novamente estará disponível a aba LazReport . Leia aqui um tutorial básico sobre o LazReport. No entanto queremos mostrar uma alternativa ao LazReport . Por essa razão, vamos apresentar neste artigo o FortesReport . Para quem conhece o QuickReport, que fazia parte do Delphi, não terá dificuldade de desenvolver com esse componente. Baixe o pacote aqui e instale. Os procedimentos são semelhantes aos que mostramos acima. Você terá uma nova aba chamada Fortes Report . Conectando o banco de dados O primeiro passo para criar a aplicação é fazer