O SQLite é um banco de dados, simplificado ao máximo.
Ele não exige SGDB (Sistema Gerenciador de Banco de dados), pois tudo fica armazenado em uma unica lib. Que gerência o DB (Data Base) e suas tabelas.
Para quem é destinado o SQLite
O SQLite é destinado a aplicações que precisam armazenar um volume grande de informações, sem grande concorrencia. Permitindo uso de comandos SQL tradicionais de SGBD, sem a necessidade de instalação de complexos sistemas, pois tudo fica em um unico arquivo, e uma lib (biblioteca).
De forma geral, quando existe uma aplicação que armazena dados temporários, ou de integração, sem concorrencia de várias aplicações. O SQLite é o banco de dados ideal para esta atividade.
Caso não goste de aplicações e queira acessar diretamente através de linha de comando. Isso tambem é possível.
Basta instalar os binários do SQLite, e rodar da seguinte forma:
No meu projeto Etiquetas, existe uma pasta sqlite, lá uma sub pasta scripts.
Contendo os scripts do banco e tambem o sqlite3.exe.
Entre na pasta scripts, e por linha de comando dê o seguinte comando:
Após a execução surgirá um prompt semelhante ao mysql ou ao plsql.
Ao dar um comando de select, percebemos o retorno, conforme apresentado.
Rodando scripts
Para executar um script externo é muito simples:
.read [script.sql]
Comando para executar o scritp
Lazarus
Introdução
O Lazarus é uma ferramenta de desenvolvimento de aplicação Desktop, multi plataforma, usa linguagem PASCAL Objects, para desenvolvimento de aplicações complexas. Tem uma IDE de desenvolvimento otimizada similar ao Delphi.
Não irei entrar nos detalhes do Lazarus, pois fugiriamos da proposta deste artigo.
Zeoslib
Zeos lib é um pacote de componentes visuais e não visuais, multi plataforma, e multi banco. Sua finalidade é realizar a integração com bancos de dados, entre eles o SQLite.
Não entrarei nos detalhes de instalação do Zeoslib, pois fuguriamos da proposta deste artigo.
Usando Lazarus com SQLite
A primeira coisa que precisamos criar é um datamodulo, para agrupar nossos componentes de banco de dados.
Usarei o projeto Etiqueta, que estou criando. Pois contem referências no git e podem ser vistos posteriormente.
Em seguida, criarei um componente TZConnection, onde apresentarei as seguintes propriedades:
Database – O caminho absoluto do arquivo etiqueta.db
LibraryLocation – O caminho absoluto do arquivo sqlite3.dll
Protocol – sqlite-3
Faça um teste de conexão, ativando o Connected (true), caso não retorne mensagem de erro.
Voce conseguiu conectar no banco de dados.
O proximo passo é criar um componente TZTable
, e vincular ele ao TZConnection através da propriedade Connection.
Em seguida, na propriedade TableName, selecionamos a tabela product, que iremos gerenciar.
Para não fugir muito do tema, os detalhes adicionais, deixarei disponível no GIT.
O SQLite é uma poderosa ferramenta para gerenciar dados transitórios, e para criação de aplicações rápidas porem robustas. Tem um conjunto de ferramentas que podem auxiliar o desenvolvedor.
Destinado a aplicações embarcadas ou em desktop o sqlite têm seu nicho de uso, garantindo um precioso espaço na gestão de informações transitórias.
Neste artigo, e nos demais, irei continuar o trabalho apresentado no MNote2, gerando um pacote para um projeto em Lazarus, este projeto consiste em um sistema Cliente/Server, que consome um banco de dados Mysql.
Este artigo tem relação tambem sobre outro conjunto de artigos:
A instalação deste tipo de aplicação demanda certo trabalho, que irei abordar durante o ciclo de posts, aqui apresentados.
Vou apresentar aqui muito sutilmente um caso de construção de uma interface em Lazarus.
Qual a diferença entre uma interface e uma classe.
A Interface é como um contrato, onde se estabelece as conexões de saída (Métodos e propriedades) que serão utilizadas. Nela voce não precisa criar código, pois só estabelece quais serão as conexões.
Ao criar uma classe, vc estabele as conexões porem tem que realizar uma série de codificações (implementation) que de fato não seriam necessárias. Pois a codificação fica a cargo da classe filha.
Exemplo de projeto
Desenvolvi uma interface no projeto da API da impressora.
Na unit imp_generico.pas, estabelecemos a interface, que será herdada das demais classes.
{ TIMP_GENERICO }
TIMP_GENERICO = interface
['{045F6EED-2C11-447D-A7DC-09DB995367C2}']
function getserial : string;
procedure setserial(value : string);
function InitPrint(): string;
function NewLine(): string;
function LineText(Info : string): string;
function Negrito(): string;
function Normal(): string;
function Sublinhado(): string;
function DoubleTexto(): string;
function beep(): string;
function Guilhotina(): string;
function AcionaGaveta(): string;
function Barra1D(Info : string): string;
function Barra2D(info : String): string;
function loadImagem(X,Y : integer; Info : String): string;
function imprimeImagem(X,Y : integer): string;
property Serial : String read getserial write setserial;
end;
No fonte imp_ELGINI9.pas, chamamos a interface, criando os métodos, realmente propostos na interface.
type
{ TIMP_ELGINI9 }
TIMP_ELGINI9 = class(TInterfacedObject,TIMP_GENERICO)
FCOLUNA : integer;
FSERIAL : String;
private
function getserial : string;
procedure setserial(value : string);
public
constructor create();
destructor destroy();
function NewLine(): string;
function InitPrint(): string;
function LineText(Info : string): string;
function beep(): string;
function Negrito(): string;
function Normal(): string;
function Sublinhado(): string;
function DoubleTexto(): string;
function Guilhotina(): string;
function AcionaGaveta(): string;
function Barra2D(Info : string): string;
function Barra1D(Info : string): string;
function loadImagem(X,Y : integer;Info : String): string;
function imprimeImagem(X,Y : integer): string;
function Centralizado(): string;
function PaginaM616(): string;
function CorPg618(): string;
function HabilitaArmazenaDados(): string;
function Armazenadados( Info : string): string;
function ImprimeQRCODEArmazenado(): string;
published
property Serial : String read getserial write setserial;
end;
var
IMPELGINI9: TIMP_ELGINI9;
implementation
Omiti a implementation, para que o artigo não fique demasiado longo.