Pular para o conteúdo principal

Lazarus - Conectando MySQL com SQLdb ou ZeosLib

Vamos mostrar duas maneiras de acessar MySQL no Lazarus. Uma usando os componentes nativos SQLdb e outra usando ZeosLib. Utilizamos no exemplo a versão 5.1.46 do MySQL. O SQLdb da versão 0.9.28.2 não funciona com essa versão do MySQL. Dessa forma, foi instalado o snapshot Lazarus-0.9.29-25198-fpc-2.4.1-20100505-win32.exe (usamos o Windows XP nos testes). Snapshots são builds noturnos do Lazarus compilados com os últimos códigos fonte, corrigindo alguns erros e provavelmente introduzindo outros.

Crie o banco dados no MySQL. Vamos usar o mesmo banco usado em artigos anteriores. Este é o script de criação das tabelas:

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

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

Usando SQLdb

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

DatabaseName - informe o nome do banco de dados que foi criado.
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. Se usar root como nome de usuário, informe a senha definida no momento da instalação do MySQL.

UserName - informe o nome do usuário. Pode ser o root.

Coloque agora um TSQLTransaction e selecione dbCliente na propriedade Database, e na propriedade Name digite trCliente, por exemplo.
Volte ao TMySQL50Connection e informe trCliente na propriedade Transaction. Coloque a propriedade Connected em True para verificar se a conexão é feita. Se retornar uma mensagem de falta da dll libmySQL, localize a mesma no diretório bin do MySQL e copie-a para o diretório system32. Depois volte a propriedade 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 trCliente.

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;
trCliente.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 do MySQL. Crie uma interface seguindo os passos descritos no post Lazarus - Acessando banco de dados com SQLdb - Parte I.
Selecione o form principal e, no editor de código, digite abaixo de Implementation:

uses u_dmdados;

Localize o evento OnShow na aba Eventos do Inspetor de objetos.  Dê um duplo clique à direita e digite:

dmDados.dbCliente.Open;

Assim, sempre que o programa for iniciado a conexão com o banco de dados será aberta.

Usando ZeosLib

Usaremos a versão 7.0 do ZeosLib disponível no grupo Lazarus-BR. Para instalar o pacote siga as instruções apresentadas no post Lazarus - Conectando PostgreSQL com ZeosLib. Coloque um TZConnection no Data Module. Defina as propriedades:

AutoCommit - deixe em True para que as transações no banco sejam comitadas automaticamente.
Database - informe o nome do banco de dados criado anteriormente.
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. Em geral a senha do usuário root.

Protocol - informe mysql-5. Observe a versão do MySQL que você está usando.
User - informe o nome do usuário. Geralmente é root.

TransactionIsolation - define o nível de isolamento da transação. No nosso caso vamos usar tiReadCommitted.
Mude Connected para True. No Windows deve ocorrer um erro de ausência de dll. Faça o download aqui 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.
No TZUpdateSQL defina essas 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;


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.

Atualizado em 04/06/2010.

Comentários

Unknown disse…
Bom dia,


como vc comentou no post.. A dll realmente não é compatível. Fiz uma aplicação aqui e tentei rodar no windows mobile 5.0 e ele dá uma mensagem de erro dizendo q a dll não foi encoontrada. Sabe como resolver esse problema??? Existe alguma dll pro mobile??

Agradeço imensamente e, se puder, me responda via e-mail mara.moura@gmail.com.

Att, Silvia
Anônimo disse…
Estou com problema na exibição de campo tipo float, por exemplo: no banco ta gravado 1,15 e 2,1 so que quando vou exibir ele vem no DBEdit assim 115 e 21.
Já tentei configurações internacionais, decimalseparator:=','
Properties EditMask embaralha tudo.
Alguem ja passou por situação semelhante? Sabe como posso resolver este problema?
Minha configuração:
Lazarus version #:0.9.28.2 FPC Version:2.2.4 SVN Revision 22279
MySQL 5.0
ZeosLib 666
Meu e-mail:fbertoldo@dba.com.br
Att.
Fernando Bertoldo
Professor Carlos disse…
Fernando

Enviei resposta para o seu e-mail
Boa noite, também estou com o mesmo problema do Fernando, se puder me enviar a resposta te agradeço.

Alexandre Krepe
alexandrekrepe@gmail.com
Professor Carlos disse…
Mandei pro seu e-mail a mesma sugestão que fiz ao Fernando. Na verdade eu não sei como ele resolveu, pois não tive retorno
Admin disse…
Oi Professor Carlos tudo bm?
estou utilizando a versao 0.9.29 x86, meu SO eh o windows 7 x64 e utilizo o mysql 5.1.

Segui todos so seus procedimentos com a conexao utilizando o componente SQLdb porem sugiu o seguinte erro: Error: Project raised exception class 'External:SIGSEGV'.
Nao entendi pq daria este erro de memoria neste codigo. Agradeco a atencao.
Professor Carlos disse…
Maiko

Isso acontece quando você tenta usar um objeto que não existe mais. Existe a referência, mas não o objeto. Se você preferir mande um demo reproduzindo o erro. Posso tentar ajudar se tiver os fontes.
Oda disse…
Olá Prof. Carlos, tudo bem?

Estou com dificuldades em conectar via Zeos, utilizando Lazarus no Mac OS X.

O problema: ao tentar conectar em tempo de projeto, exibe já a mensagem:
None of the dynamic libraries can be found: libmysqlclient.so.15, libmysqlclient.so

Não sei se já teve experiência em sistema operacional OS x para poder tentar ajudar.

Qualquer ajuda é bem vinda.

Obrigado.
Professor Carlos disse…
Oi
Não tenho experiência com OS x, mas sei que o Zeos precisa dessas libs pra acessar o banco de dados. Como você tem que instalá-las eu não sei :).
Unknown disse…
Ajuda me . EU fiz tudo que vc ensinou, baixei as dll, em outro lugar, devido ao fato que o link seu estava quebrado. coloquei as, nas pastas system 32, system e WOW sys 64, mais nao consigo, da o erro da falta das lib!
Professor Carlos disse…
Guilherme

Teriamos que saber se as novas versões do MySQL são compatíveis com os componentes SQLdb ou Zeos (qual você está usando?). Isso eu realmente não tenho certeza. Mas o procedimento é esse, copiar as dlls necessárias para a pasta da aplicação ou do system, seja 32 ou 64 bits.
Unknown disse…
Ola professor estou com o problema da dll ja coloquei no diretorio porem continua o erro o meu SO e win 7
Obrigado e Parabens pelo blog
Professor Carlos disse…
Marco Aurélio, leia o comentário que fiz para o Guilherme logo acima.

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