terça-feira, 8 de outubro de 2013

Banco de Dados - Pt. 1

Banco de Dados ou Base de Dados! O que vem a ser isto? O Banco de Dados é um grupo de registros organizados de uma forma regular. Nesta primeira parte, falarei sobre a conceituação disto, suas principais denominações e uso.

Bom… Uma Base de Dados é organizada em Tabelas. Cada tabela possui os seus Campos e cada campo possui o seu tipo.

Vamos entender melhor -->  Suponhamos que eu tenha a tabela de Clientes na minha base de dados; Questiona-se: O que é interessante guardar sobre os clientes? Vamos armazenar nesta tabela, o Nome, Endereço, CPF, RG, N de Filhos,  Telefone, Nome do Pai, Nome da Mãe e Estado Civil. Cada uma das informações que eu quero guardar nesta Tabela, torna-se um campo; Logo, vamos imaginar assim:

Clientes
Nome Endereço CPF RG Nº de Filhos Telefone Nome do Pai Nome da Mãe Estado Civil

Viu só? Cada uma das informações que desejamos guardar dentro da tabela de clientes, torna-se um campo (de novo)! Por que? Cada uma destas informações é variável e mudará de acordo com cada registro. Veja bem, você terá vários e vários clientes dentro da mesma tabela!


Clientes
Nome Endereço CPF RG Nº de Filhos Telefone Nome do Pai Nome da Mãe Estado Civil
Misael Soler Aqui 2345678909 45987989 1 34047070 Félix Eugênia Casado
Rodolfo Alí 23423424 312312312 1 44234234 Félix Eugênia Solteiro

Viu só!? E por aí vai… as tabelas não tem fim! E cada vez que inserimos um novo registro em uma tabela, geramos uma nova linha na tabela, logo, cada linha corresponde a um registro na base de dados (também chamada de Tupla) e cada coluna à um campo!

Quantas tabelas podemos ter em uma base de dados? Quantas forem necessárias… tudo depende da relevância que os dados têm para a gente…

E quantos registros podemos inserir em uma tabela? Quantos forem necessários também!

Ah, legal! Mas, e como visualizamos estes dados!?

Antes, vou deixar uma pergunta no ar, e vamos ver quem sabe me responder:> Você sabe a diferença entre dado e informação!? Na minha próxima atualização eu respondo… até lá, vamos trocando figurinha com os leitores...

Os dados são visualizados por meio dos SGBD. Um Sistema Gerenciador de Banco de Dados. Você conhece algum? Eu aposto que sim, existem várias ferramentas no mercado, e eu já trabalhei com várias delas: Oracle, SQL Server, MySQL, FireBird, PostGree, Access, dentre outros vários!

O objetivo das atualizações deste gênero, é falar sobre a linguagem padrão para o uso dos Bancos de Dados: O SQL!

Hoje, tivemos uma breve introdução, logo logo, vamos mergulhar fundo e descobrir que a Base de Dados de todo sistema é o coração do mesmo! Este artigo tem o objetivo complementar as vídeo aulas que já postei sobre banco de dados, com um pouco mais de conceitos.

terça-feira, 1 de outubro de 2013

Impressão com o método Canvas - Final

Hoje vamos terminar a série de artigos sobre Impressão com o Método Canvas.

Para fazer isto, podemos montar uma procedure que monte o relatório desejado, desta forma, será possível chamar esta procedure sempre que quisermos um botão imprimir na tela!

Bom, faça o seguinte: Na área de declaração de Procedures, digte:

procedure MontaRelatorio;

Depois, pressione as teclas CTRL + SHIFT + C, para que o Delphi crie automaticamente o código:

procedure TForm1.MontaRelatorio;
Begin

End;

Antes do comando begin, crie às variáveis:

coluna, linha      : Single;
I, J, cont, espaco : Integer;
ilogo              : TBitmap;
Data : String;

Logo, nosso código ficará assim

procedure TForm1.MontaRelatorio;
var
  coluna, linha      : Single;
  I, J, cont, espaco : Integer;
  ilogo              : TBitmap;
  Data : String;
Begin

End;

Pronto, já podemos começar  programar. Atente-se para o seguinte: Os próximos comandos que vierem agora estarão sempre entre os comandos de Begin e End.

Application.ProcessMessages; //Permite que a aplicação processe as mensagens que estão na fila de mensagens.
coluna := Printer.PageWidth  / 200; //Aqui estamos pegando  a largura da página (Printer) e dividindo por 200, ou seja, 200% para termos o valor inserido dividido por 200% lembra da segunda parte do artigo?
  linha  := Printer.PageHeight / 200; //Aqui estamos pegando a altura da página e dividindo por 200, da mesma forma que na coluna,  isto são coisas opcionais, só faço isto para  ficar mais fácil de pensar;
  Printer.BeginDoc; //Começamos a desenhar o relatório aqui.

With Printer.Canvas do
Begin

Agora, vamos desenhar retângulos para começar o nosso formulário.
Aqui, desenhamos um retângulo na linha 002, até a linha 020 todas as vezes que usarmos o coluna * alguma coisa, temos que utilizar a função Round, porque  coluna é número dividido por 200, e o resultado desta divisão pode ser quebrado, o que implica em confusão no código;

Rectangle(Round(coluna * 005), Round(linha * 002),Round(coluna * 195), Round(linha * 020));      

Aqui, desenhamos outro retângulo um pouco mais abaixo do primeiro, no entanto, note que e este retângulo ficará dentro do primeiro que foi desenhado e é bem menor que o primeiro;

Rectangle(Round(coluna * 045), Round(linha * 003),Round(coluna * 095), Round(linha * 018));      

Pen.Width := 1; (Vide artigo 2)

Com estas duas linhas, desenhamos uma linha na mesma posição em X que no segundo retângulo, e como a linha é menor que o tamanho do retângulo, sabemos que esta linha estará dentro deste;

Lembre-se, MoveTo começa a linha, e LineTo termina a linha com coordenadas iniciais e finais;

MoveTo(Round(Coluna * 045), Round(linha * 012));
LineTo(Round(Coluna * 094.6), Round(linha * 012));

Podemos inserir uma imagem na página, assim:

ilogo := TBitmap.Create;  //Iniciamos a variável do tipo TBitmap;
ilogo.Assign(imgLogo.Picture.Bitmap);  //No caso, imgLogo é um componente TImage que está instanciado no Form;
StretchDraw(Rect(Round(coluna * 010), Round(linha * 004), Round(coluna * 031),Round(linha * 018)), ilogo); //StretchDraw, desenha um retângulo na tela, no entanto, a imagem que está na variavel ilogo, ficará encaixada certinho dentro do retângulo que está desenhado, entenderam?

Como já disse, o restante é opcional, particularmente, gosto de separar coisas diferentes dentro de retângulos, assim, o relatório fica mais organizado, depois o conteúdo vai dentro da área que compreende a extensão do retângulo, e o que é mais legal, você não precisa seguir uma ordem do tipo:
Desenha retângulo, insere conteúdo, desenha retângulo, insere conteúdo.

Como  o você indica o número da coluna e da linha, podemos desenhar o relatório sem seguir necessariamente uma ordem:
Rectangle(Round(coluna * 005), Round(linha * 021.5),Round(coluna * 195), Round(linha * 52.5));
Rectangle(Round(coluna * 005), Round(linha * 52.3),Round(coluna * 195), Round(linha * 086.5));
Rectangle(Round(coluna * 005), Round(linha * 086.5),Round(coluna * 195), Round(linha * 105));
Rectangle(Round(coluna * 005), Round(linha * 105),Round(coluna * 195), Round(linha * 115));
Rectangle(Round(coluna * 005), Round(linha * 115),Round(coluna * 195), Round(linha * 195));

E depois vem o conteúdo, observe que até agora a gente só inseriu retângulos…

Font.Style := [fsBold];
Font.Name  := ‘Tahoma’;
Font.Size  := 010;
TextOut(Round(coluna*050), Round(linha*04.5), ‘Nº Relatório’);
Font.Size := 007; //Até aqui, formatamos o texto, daqui pra frente, com a função TextOut, estamos escrevendo na linha e na coluna indicada;
TextOut(Round(Coluna*050),Round(linha*014), ‘Teste:’);
Font.Name :=’Tahoma’;
Font.Size := 008;
TextOut(Round(coluna*100), Round(linha*005), ‘Status:’); //Note que como não reformatamos o texto e escrevemos 2 vezes em locais diferentes, o próximo texto assume a formatação anterior.
TextOut(Round(coluna*100), Round(linha*16.7), ‘Data Abertura:’);
End; //Este end é referente ao Begin da senteça With.

Quando formos finalizar o relatório, temos que utilizar o comando:

Printer.EndDoc;

E assim vai.

Não faz sentido montar um relatório todinho aqui, porque isto fica a gosto de cada um!
O importante é saber que indicamos a coluna e a linha que queremos e depois o que queremos desenhar no canvas do formulário.

Até a próxima!