Pular para o conteúdo principal

Postagens

Mostrando postagens de 2010

Lazarus – Herança de form e criação de componentes em run-time

Neste post vamos mostrar como criar um formulário de cadastro, independente da tabela do banco de dados. A idéia é que, ao abrir o formulário, um trecho de código identifica cada campo da tabela, instancia um TDBEdit para esse campo e ainda o identifica com um TLabel. Além do mais esse código será implementado em um formulário pai. Cada formulário de cadastro será derivado – ou herdado – deste. Nosso demo terá um form principal que chamará o form de cadastro, o form pai onde todas as ações irão acontecer, um form de cadastro derivado e um Data Module . No Data Module colocamos os componentes de acesso ao banco de dados. Para isso iremos utilizar ZeosLib com banco de dados PostgreSQL. Coloque então um TZConnection para conectar ao seu banco de dados e o configure adequadamente. Coloque também uma TZQuery e um TZUpdateSQL . Consulte o post Lazarus – Conectando PostgreSQL com ZeosLib se tiver dúvida de como fazer essas definições. Não coloque TDataSource no Data Module

Lazarus - AutoCommit no ZeosLib com PostgreSQL

Por padrão, o PostgreSQL trata cada comando SQL como sendo executado dentro de uma transação. Ou seja, cada comando DML (INSERT, UPDATE ou DELETE) tem um comando de início de transação (BEGIN) e um comando COMMIT – caso seja bem sucedido – executados implicitamente antes e depois. Para a execução de múltiplos comandos DML isso leva a um overhead . Desta forma, sugere-se fortemente envolver todos os comandos DML em uma única transação – se a lógica da sua aplicação permitir. Para demonstrar esta recomendação fizemos um teste simples. Escrevemos um pequeno programa para inserir 5.000 linhas em uma tabela. Primeiro fizemos o teste com o controle de transação padrão - cada uma das 5.000 linhas tem seu próprio BEGIN e COMMIT - e depois modificamos o código para controlar a transação manualmente. Neste último teste todas as 5.000 linhas são inseridas dentro de uma única transação. Para nosso teste usamos ZeosLib. Por padrão o ZeosLib também opera no modo Auto-Commit, ou seja, cada comando é

Lazarus - Aplicação WinCE usando tabelas DBF

Há algum tempo eu escrevi um artigo aqui no blog chamado Lazarus - Criando uma aplicação para WinCE . Nesse artigo usei SQLite para WinCE. E a implementação tinha bastante código pois usava a unit sqlite3ds . Agora vou mostrar que é possível desenvolver usando tabelas Dbase, aquelas que tem a extensão DBF. Para isso vamos usar o componente TDbf da aba Data Access . A seguir os passos necessários: 1) Crie uma tabela Dbase. 2) Inicie uma nova aplicação e coloque um TDbf no DataModule . Na propriedade TableName localize a tabela que foi criada. 3) Nas propriedades FilePath e FilePathFull ele vai automaticamente definir o caminho do PC onde está a tabela. Depois vamos resolver isso. 4) Coloque um TDataSource no Data Module e faça a associação necessária com o TDbf . 5) Agora vamos ao form da interface e coloque os controles (da aba Data Controls ) necessários para cada campo da tabela. Associe a propriedade DataSource de cada controle com o DataSource inserido no passo 4. Na

Lazarus - Relatório Mestre detalhe com LazReport

Neste post iremos mostrar como criar um relatório mestre detalhe usando o componente LazReport. No artigo Lazarus - Criando relatórios com FortesReport (Parte I) mostramos como instalar o LazReport. Para o exemplo que será criado aqui usaremos o banco de dados Firebird e o conjunto de componentes ZeosLib. Use o seguinte script para criar as tabelas. O Data Module Inicie uma aplicação no Lazarus e insira um Data Module . Selecione a aba Zeos Access e coloque um TZConnection no Data Module . Defina as propriedades da seguinte forma: Database - informe o banco de dados Firebird que foi criado. Name - dê um nome ao componente. Por exemplo: dbVendas . Password - masterkey . Protocol - firebird-2.0 ou a versão que está sendo usada. User - sysdba . Mude Connected para true , para verificar se a conexão está configurada corretamente. Coloque um TZReadOnlyQuery e defina: Connection - selecione o TZConnection . Name - defina um nome para o componente. Por exemplo: qu

Lazarus - Dicas de LazReport

Neste post vou apresentar algumas dicas para criar relatórios com mais eficiência em LazReport. No post Lazarus - Criando relatórios com FortesReport (Parte I) eu mostrei como instalar o LazReport e o link para um tutorial que ensina passo a passo como criar um relatório. Exportando um relatório para PDF Esse é um procedimento bastante simples, mas é necessário instalar dois pacotes. Para exportar um relatório para PDF você precisa do LazReportPDFExport . Este componente está em source\addons\pdfexport no mesmo diretório do LazReport. Mas este componente depende do PowerPDF . Você pode fazer o download do pacote PowerPDF no repositório de componentes e código Lazarus . Instale o PowerPDF e depois o LazReportPDFExport . O PowerPDF irá aparecer em uma nova aba de componentes e o LazReportPDFExport será um novo componente - TfrTNPDFExport - na aba do LazReport. Supondo que você já criou o relatório, coloque um TfrTNPDFExport no mesmo form onde está o TfrReport . Execute o seu

Java - Strings, memória e imutabilidade

O entendimento sobre pilha e heap pode facilitar em muuito a compreensão de temas como passagem de parâmetros, polimorfismo, garbage collector, etc. Mas neste post darei apenas uma rápida visão para poder falar o assunto principal que é a forma como Java trata os objetos String . Em geral, variáveis de instância, objetos e arrays - que também são objetos - residem no heap . Já as variáveis locais, tanto de tipos primitivos quanto as referências, residem na pilha . Sabemos que uma String pode ser instanciada de várias maneiras, como nestes exemplos: String s = new String("abcd");   // ou s = "abcd"; Para que o uso da memória seja mais eficiente em Java, a JVM mantém uma área especial de memória chamada pool de Strings constantes . Quando o compilador encontra um literal String , ele verifica se existe uma String idêntica no pool . Se existir, a referência ao novo literal é direcionada à String existente e não é criado novo objeto String . Mas quando um

Lazarus - Conectando Oracle com SQLdb ou ZeosLib

A Oracle oferece uma versão free do Oracle Database 10g. É o Oracle Database 10g Express Edition . Utilizamos esta versão neste artigo. Além disso, utilizamos a versão 0.9.29 do Lazarus, Free Pascal 2.4.1 e ZeosLib 7.0.0. Para os testes usamos o usuário do Oracle hr , que é criado em uma nova instalação. Depois de instalado o banco de dados, o usuário hr deve ser desbloqueado pelo DBA e definida uma senha. Esse usuário tem acesso às tabelas do schema hr , também instalado junto com o banco. No entanto criamos uma nova tabela para os testes, de forma a manter as tabelas originais inalteradas. Criamos então nossa famosa tabela CIDADE. CREATE TABLE "CIDADE" ( "ID_CIDADE" NUMBER NOT NULL ENABLE, "NOME" VARCHAR2(40), CONSTRAINT "CIDADE_PK" PRIMARY KEY ("ID_CIDADE") ENABLE ) Existe ferramenta de administração visual na instalação do Oracle, mas não é objetivo deste artigo expor a utilização da mesma. Conexão com

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 - Aplicação embarcada com Firebird e ZeosLib

Uma aplicação embarcada, ou embutida, com Firebird é uma aplicação que não necessita do servidor de banco de dados para executar. É uma solução excelente para criar demos de programas, criar um catálogo de produtos em CD, entre outras aplicações. Resumidamente, o motor do Firebird embedded está em uma dll. A versão embedded do Firebird executa apenas em modo local, não reconhecendo nem mesmo localhost . Ela ignora qualquer instância do Firebird executando na mesma máquina. Procure usar sempre o usuário SYSDBA para a conexão com o banco. Como não existe a figura de um servidor de banco de dados, você poder rodar quantas aplicações forem necessárias. Cada uma será uma instância diferente. Tudo depende da memória da máquina. Instalação do Firebird O primeiro passo consiste em fazer o download da versão embarcada do Firebird. Escolha a versão e a plataforma desejada em http://www.firebirdsql.org/index.php?op=files . Vamos mostrar aqui apenas o procedimento para o ambiente Windows. Voc

Lazarus - Criando componentes em run-time

A primeira pergunta que alguém pode fazer é "Por que eu preciso criar componentes em tempo de execução?" Posso dar vários motivos e vou citar apenas dois. Primeiro: suponhamos que você permita que o usuário do seu sistema crie novos campos em um tabela. Para que ele possa usar esses novos campos são necessários novos componentes no form, correto? Segundo: eu quero criar um relatório genérico que possa imprimir dados de qualquer tabela. Apenas em tempo de execução eu irei saber quais e quantos componentes eu irei usar nesses casos. Então vamos à prática. Para nosso exemplo irei criar um botão da classe TButton . Mas poderia ser qualquer componente que você precise criar. Criando um TButton em tempo de execução A primeira coisa a fazer é declarar uma variável para o botão, por exemplo: Botao: TButton; Pode ser necessário incluir a unit StdCtrls . Em seguida escrevemos o código que cria o componente: Botao := TButton.Create(nil); O construtor Create espera

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ã

Firebird - Vem ai a versao 2.5

 O banco de dados Firebird®, de código aberto, possui excelente performance e expressiva escalabilidade, indo desde modelos embarcados (mono-usuário) até sistemas empresariais com múltiplos bancos de mais de 500GB e centenas de conexões simultâneas. O Firebird suporta o padrão ACID, triggers, stored procedures, UDF e eventos; roda nas versões 32 e 64 bits do Windows, Linux, MacOS X, HP-UX, FreeBSD, etc., sendo muito fácil a migração entre essas plataformas. Um dos recursos chave do Firebird é a arquitetura multi-geracional, que permite o desenvolvimento e suporte de sistemas híbridos OLTP e OLAP. Suporta o padrão ACID, triggers, stored procedures, UDF e eventos; possui suporte compreensivo ao padrão SQL92, além de inúmeras opções de conectividade. A combinação de alta performance, baixo consumo de recursos, escalabilidade suprema, instalação simples e silenciosa e distribuição 100% livre de royalties, fazem do Firebird uma escolha atrativa para todos os tipos de desenvolvedores e fo

Java - Certificado de Programador Sun (SCJP)

Há pouco tempo escrevi um artigo na revista Urissanê - revista eletrônica do curso de Sistemas de Informação do CEULS/ULBRA, onde trabalho. Nesse artigo eu apresento diretrizes gerais sobre uma das certificações de TI mais procuradas - a SCJP. Abordamos cada certificação Java que a Sun oferece, mostrando as diferenças entre elas, como e onde se inscrever para o exame, como se preparar, dicas gerais sobre o conteúdo do exame, informações sobre o exame propriamente dito e o que acontece depois do exame. Leia o artigo 4 no site do curso . Logo estarei iniciando neste blog uma série de artigos com informações fundamentais para os candidatos a essa certificação, uma espécie de tutorial Java de preparação.

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

No post Lazarus - Criando relatórios com FortesReport (Parte I) mostramos a criação de um relatório simples com agrupamento. Neste artigo vamos mostrar como criar um relatório mestre detalhe usando o FortesReport. Para implementar o exemplo usei um banco de dados Firebird e ZeosLib. Use o seguinte script para criar as tabelas. Neste caso o relacionamento mestre detalhe é formado pelas tabelas VENDA e ITEM . O Data Module Inicie uma aplicação no Lazarus e insira um Data Module . Selecione a aba Zeos Access e coloque um TZConnection no Data Module . Defina as propriedades da seguinte forma: Database - informe o banco de dados Firebird que foi criado. Name - dê um nome ao componente. Por exemplo: dbVendas . Password - masterkey . Protocol - firebird-2.0 ou a versão que está sendo usada. User - sysdba . Mude Connected para true , para verificar se a conexão está configurada corretamente. Coloque um TZReadOnlyQuery e defina: Connection - selecione o TZConnection

Lazarus - Emulador WinCE/Windows Mobile

Há alguns dias escrevi um post mostrando o desenvolvimento de uma pequena aplicação para WinCE usando SQLite. Na época fiz os testes em um PDA, não usei emulador. Muitas pessoas tem entrado em contato comigo questionando sobre emuladores. Sempre tive dificuldades com os emuladores da Microsoft. Mas passei a procurar por um emulador que funcione e acabei por encontrar no site da PDAExpert . Lá encontrei as versões Standard e Professional do emulador para Windows Mobile 6. Por limitações de banda fiz o download da versão Standard que oferece três emuladores diferentes. Consegui executar o exemplo do artigo, como mostra a figura. No entanto, o programa não consegue acesso ao banco SQLite. Minha forte suspeita é que a dll não é compatível com Windows Mobile 6. Ainda não tenho dados suficientes para afirmar isso. Por conta disso, pretendo criar uma nova aplicação que grava os dados em XML ou mesmo em arquivo texto usando TFixedFormatDataSet, como mostrei no post Lazarus - Tratamento de A

Lazarus - Relógio para jogar Xadrez

Para os aficcionados do milenar jogo de Xadrez que não querem ou não podem pagar por um relógio, estou disponibilizando um programa bem simples que simula um relógio, cujo executável pode ser baixado aqui . O programa não requer instalação, podendo inclusive ser executado em um pendrive. Ele foi desenvolvido usando a fantástica ferramenta Lazarus/FreePascal e substitui com eficiência os relógios de mesa. Além disso, aqueles que estão dando os primeiros passos em Lazarus encontrarão um exmplo de programa que usa bastante componentes e código para seus exercícios. Antes de mostrar o código vou mostrar a interface e explicar o funcionamento do relógio. A interface Na parte superior do relógio está a configuração do tempo que será usado na partida. Há três caixas de texto ( TEdit ). Uma para hora, a segunda para minutos e a terceira para segundos. À direita encontram-se três botões ( TButton ). O primeiro para iniciar o relógio, o segundo para reset e o terceiro para pausar. Abaixo

Lazarus - Funcoes de tratamento de Strings

Sysutils é uma unit do Free Pascal que implementa várias funções/procedimentos utilitários e tem a vantagem de ser multiplataforma. Esses utilitários são organizados em grupos e dentre eles podemos destacar: as rotinas de conversão de dados, as rotinas de data e hora, as rotinas de formatação de strings e as rotinas de manipulação de strings. Destacamos neste post as funções/procedimentos de manipulação de strings: LeftStr(const s: string; n: integer): string; Retorna os n primeiros caracteres da string s . Por exemplo: var s: string; begin s: 'Free Pascal'; writeln(LeftStr(s, 4)); // imprime Free end; RightStr (const s: string; n: integer): string; Retorna os n últimos caracteres da string s . Por exemplo: var s: string; begin s: 'Free Pascal'; writeln(RightStr(s, 1)); // imprime "l" end; Neste caso o exemplo pega o último caractere de uma string e imprime na tela. Trim(const s: string): string; Retira os espaços das

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

Lazarus - Criando XML a partir de um DataSet

Sabemos que um documento XML pode ser criado manipulando strings e arquivos texto. Esta opção não é aconselhável, pois é difícil garantir que o documento seja bem formado. A melhor forma de fazer isso é usar DOM (Modelo Objeto de Documento). Já usamos esse padrão para ler um documento XML no artigo anterior. Para ilustrar a criação de um documento vamos implementar uma aplicação que gera um XML a partir dos registros de um DataSet . Para isso vamos usar nosso banco de dados SQLite de exemplos anteriores e vamos usar ZeosLib . Mas pode ser usado qualquer conjunto de componentes, inclusive SQLdb . Coloque então um TZConnection no form, ou num Data Module . Defina a propriedade Database com o banco SQLite, ou qualquer outro. Defina a propriedade Protocol com sqlite-3 . Coloque também um TZReadOnlyQuery e defina Name como queCidade . Em Connection selecione o TZConnection . Na propriedade SQL digite SELECT * FROM CIDADE . Insira um botão, que vai executar a criação do XML. Na

Lazarus - Lendo XML em um TreeView

XML (Extensible Markup Language) é uma linguagem de marcação, baseada em texto, recomendada pela W3C para troca de informações entre diferentes sistemas e plataformas. Linguagens usadas para troca de dados, como XHTML, a maioria dos WebServices, se baseiam em XML. Aqui está o exemplo de um arquivo XML: Joao da Silva (93)3522-0001 Jose Sousa (93)3522-0002 jose@email.com.br Maria da Silva (93)3522-0003 (93)9122-0001 Raimunda de Sousa rsousa@email.com.br Em Lazarus/Free Pascal existem três units que dão suporte a XML. São chamadas XMLRead, XMLWrite e DOM. Fazem parte da FCL (Biblioteca de Componentes Livres). Só precisamos adicionar as units na cláusula uses para ter suporte a XML. DOM (Modelo Objeto de Documento) define uma interface padrão. Quando você escreve código que usa essa interface, você pode mudar para outras implementações de DOM sem precisar mudar seu código fonte. Lendo XML em um TreeView Co