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!

segunda-feira, 30 de setembro de 2013

Impressão com o Método Canvas - Pt. 2

Dando sequência à série sobre o método Canvas no Delphi, hoje falarei um pouco mais sobre o código.
No exemplo que vamos ver, desenvolvi um formulário que só possui as Querys, o PrinterDialog e uma imagem, pois achei legal colocar uma logo marca no canto superior esquerdo.

Mas… antes de começar, direto nisto, vamos ver o que é possível fazer com o método Canvas:

O método Canvas serve para desenhar em cima de alguns objetivos. Pode-se utilizá-lo em Imagens do tipo Bitmap (e unicamente Bitmap, se tentarmos utilizar uma imagem do tipo JPEG com funções do Canvas o Delphi apresentará erro de tipo de arquivo), nos formulários, para desenhar no Form mesmo, e também podemos utilizar no Printer, neste último, faremos uma impressão mesmo.

O que faz o método Canvas e onde posso utiliza-lo? Este tipo de implementação pode ser feita tanto em um formulário que tenha dados, como por exemplo uma ficha, e depois podemos criar o botão “Imprimir” e desenvolver o relatório com o que acabou de ser preenchido. Isto é muito utilizado em sistemas que emitem Nota Fiscal, por exemplo. Também é possível, a título de sugestão, criar um segundo formulário, que só tenha o componente PrinterDialog e as Querys que você precisa para emitir o relatório.

Muito bem, agora que sabemos o que o método Canvas faz e onde podemos utiliza-lo, vamos ver suas principais funcionalidades:

Desenhado uma linha:
Form1.Canvas.MoveTo(X, Y); //Sendo X e Y valores inteiros e aqui, representados pelo começo da linha
Form1.Canvas.LineTo(X,Y) ;// Sendo X e Y valores inteiros e aqui representados pelo valor final da linha;

Temos algumas opções para o uso da linha, tais como:

Form1.Canvas.Pen.Width := 2;  //Neste caso, quanto maior o número, mais grossa será a linha;
Form1.Canvas.Pen.Color := clRed; // Aqui, atribuo a cor vermelha para a linha; Lembre cl+cor em inglês para ter qualquer cor;
Form1.Canvas.Pen.Style := psSolid; //Este é  default, mas temos vários estilos de linhas (tracejado) tais como: psDash, psDot, psDashDot e psDashDotDot;

Desenhando um Retângulo:
Form1.Canvas.Rectangle(10, 10, 10, 10); // procure pensar assim: os 2 primeiros números é o lugar de X e Y (respectivamente) que eu quero o retângulo seja desenhado; os 2 últimos valores são respectivamente, a largura e a altura do retângulo; O próprio Delphi explica de um jeito diferente, sendo o primeiro valor a posição de X para o canto superior esquerdo e o segundo valor, a posição de Y para o canto superior esquerdo; os próximos 2 valores são X e Y do canto inferior direito, mas procure pensar da forma como sugeri, os 2 primeiros valores são posições de X e Y na tela e os 2 últimos são largura e altura;

Todas as propriedades que foram utilizadas para formatar a linha também podem ser utilizadas para formatar o retângulo;

Desenhando uma Elipse:
Form1.Canvas.Elipse(10, 10, 10, 10); //Pense da mesma forma como o retângulo, não tem segredo.

Escrevendo em uma Imagem:
Pense desta forma: Altere a fonte e escreva; Altere a fonte e escreva; Claro, isto se você quiser letras diferentes.

Image1.Canvas.Font.Style := [fsBold]; //Atribui negrito à fonte, para fonte em itálico, digite fsItalic, para fonte normal, abra e feche o colchetes, para Sublinhado, digite fsUnderline, para taxado (com um risco cortando a palavra) digite fsStrikeOut, para mais de um atributo, coloque-os seguido de vírgula dentro dos colchetes;
Image1.Canvas.Font.Color := clGreen; // Coloca a cor verde na letra, mesma lógica de mudar a cor da linha;
Image1.Canvas.TextOut (10, 10, ‘Digite o texto aqui’); //Aqui, temos 3 parâmetros: A posição de X, a posição de Y e finalmente o texto que queremos escrever; Seguindo estas linhas de código, colocamos a cor verde em negrito, demos margem de 10 pixels em X e Y e escrevemos o texto “Digite o texto aqui”;

Fácil, não é? Agora já sabemos quais as principais funcionalidades do método Canvas, e onde podemos utiliza-lo. Ainda exitem outras diversas funções deste método de impressão, aqui procurei mostrar somente as principais. Na próxima atualização vamos ver como fazer de fato os relatórios utilizando este recurso.

terça-feira, 24 de setembro de 2013

Instalando o componente de conexão Zeos no Delphi 7.0

Nesta vídeo aula aprenderemos a instalar o componente de conexão Zeos na versão do Delphi 7.0, este é um dos componentes que podemos utilizar para nos conectar com o Banco de Dados. A grande vantagem deste componente é a facilidade de se conectar a qualquer plataforma.




O site que cito nesta vídeo aula não existe mais. Agora mantenho somente este blog.

Até a próxima.

segunda-feira, 23 de setembro de 2013

Impressão com o Método Canvas - Pt. 1

Dentre os diversos desafios que a minha profissão oferece, há um tempo atrás fui confrontado com um desafio interessante!

Fazer a impressão de relatórios por meio do método Canvas. Imagine só fazer um relatório inteirinho no código! Pois é… é assim que foi feito.

Vantagens? Bom se você considerar o fato de que por meio deste não é necessário nenhum componente externo para fazer relatórios é uma vantagem bem relevante... principalmente porque desta forma você manipula do jeito que quiser o seu relatório, sem correr o risco de sair fora da folha, ou de não ter espaço. Você estará livre dos problemas insensatos do QReport (que já está obsoleto, mas ainda é visto por aí) de simplesmente não aparecer o campo relacionado, e estará livre dos sub relatórios do Report Builder, por exemplo. É só instanciar uma nova query e montar o select desejado, depois escrever o campo na posição desejada… mas bom, isto nós veremos com calma mais adiante.

Desvantagens? Pense na manutenção disto. Pronto, não preciso dizer mais nada. Não que seja complicado, aliás, muito pelo contrário, é até divertido de montar os relatórios, só que demora muito. Se compararmos com componentes externos, depois que o relatório está pronto, mudar um campo de lugar ou mesmo substituí-lo por outro é mais rápido do que alterar o código.

Claro que se pusermos na balança, há mais vantagens do que desvantagens, principalmente pelo fato de que só teremos “problemas” (isto mesmo, entre aspas) com o método Canvas quando formos mudar as posições dos campos, e não substituí-los.

Consideração Importante: Um relatório é medido em Pixels na tela. Qual a importância de termos isto em mente? De uma impressora para outra sempre teremos problemas de pixels, pois as medidas são diferentes, uma impressora pode utilizar mais ou menos pixels para impressão, principalmente de uma marca para outra.

Aí não dá pra pedir para o usuário comprar a impressora X ou Y em função do seu relatório ter sido testado só na impressora X ou Y, não é mesmo? E o que é pior! Já imaginou, fazer um relatório diferente para cada modelo e marca de impressora que houver no mercado?!

E aí, como resolvemos este tipo de problema? Trabalhando com porcentagem e não com medidas fixas.

Entendendo melhor, se quisermos escrever alguma coisa no meio da folha e imaginar que ela tenha, por exemplo, 250 pixels de largura, num primeiro momento, faríamos assim:

250 / 2 = 125, logo, é só informar no código que a coluna 125 e a linha 1 (X e Y, reparou!?) que teríamos o meio da página na primeira linha. Mas uma folha para a impressora X pode ter a medida de 500 pixels, o que resultaria em ¼ deste valor, e o nosso relatório já começaria desalinhado.

Como eu já disse, pra resolver isto, pegamos sempre a porcentagem da folha, e informamos a posição em porcento, e não em valores reais. Se eu disser que quero 50% do total de colunas da linha 1 eu sempre estarei no meio da folha, entendeu? Assim, não importa se  uma impressora considere 500 ou 250 pixels.

Nas próximas atualizações falaremos um pouco mais de código e veremos como pegar o tamanho da página, como proporcionar isso, dentre diversas outras abordagens.

Procurei dividir este assunto em partes pra não ficar muito cansativo e depois de terminar os artigos, vou confeccionar vídeo aulas sobre o mesmo assunto.. acredito que seja de grande importância e enquanto estive pesquisando, descobri que muitas pessoas têm dúvidas sobre isso!

Pessoal, vou ficando por aqui! Espero que tenham gostado e até a próxima! Um forte abraço!

segunda-feira, 16 de setembro de 2013

Sistema Operacional: O que é?

O foco deste que vos escreve é falar sobre programação.

Porém, tudo que programamos roda dentro de um Sistema Operacional, não dá pra fazer nada sem ele! Aliás, nem existe computador se não houver um Sistema Operacional antes de tudo!
Muitas pessoas dizem que tem o sistema operacional A, ou o B, se fôssemos conceituar isto, o que seria?

Isto é muito importante que todos saibam existem 3 tipos de programa.

Os programas Aplicativos, que são as nossas ferramentas do dia a dia, Word, o Excel, o Internet Explorer, um jogo que tenhamos instalado no computador, são programas que servem para algum fim construtivo ou recursivo. Recursivo: um programa para ouvir músicas por exemplo, faz uso da sua placa de som e das caixas instaladas no computador.

O segundo tipo de programa são os Utilitários. São programas que servem para fazer a manutenção do computador. O desfragmentador, o anti vírus, o scandisk… e por aí vai. Hoje existem diversas ferramentas no mercado que nos ajudam a manter o computador sempre atualizado e limpo.

Notaram a diferença?

O primeiro nível de programas servem para os usuários, o segundo nível serve para o computador!
Um anti vírus para você não serve para nada! Só para o computador!

Então e o terceiro nível de programas? Que na verdade, deveria ser o primeiro, porque sem este os dois primeiros não existem! São os programas Básicos! Vejam só hein… alguns ex-alunos meus achavam que básico é sinônimo de fácil e não é. Uma cesta básica por exemplo, só possui itens básicos para nossa sobrevivência, itens que não podem faltar! Logo, um programa Básico é um programa que não pode faltar no computador! Qual é? Sim, exatamente… é o nosso amigo, o Sistema Operacional!

O Sistema Operacional é o Software (programa) que faz a junção entre todos os programas do computador e também é a interface com o usuário. Como o próprio nome sugere o Sistema Operacional é um conjunto de partes, afinal isto é um sistema. Imagine o seu Sistema Respiratório, isto mesmo, podemos comparar um Sistema Operacional com o nosso sistema respiratório, digestivo ou qualquer que seja! O nosso sistema respiratório é composto de sangue, ar, pulmões, dentre outras partes… ;) Podemos estudar um pulmão isoladamente e conhecer as suas peculiaridades e funções? Podemos! Só que um pulmão fora do nosso corpo, fora do nosso sistema respiratório serve para quê? Da mesma forma, podemos estudar o Word, o Delphi, o Excel, mas fora do Sistema Operacional eles servem para quê mesmo?

Aí um engraçadinho vai olhar e dizer: “A Misael, um pulmão serve para respirar e o Word serve para fazer textos mesmo estando fora de um sistema” Porém, funciona fora? Não, né? Pois é este composto de partes que caracteriza um sistema.

Para escrever-lhes, por exemplo, estou utilizando o Windows 7.



O legal de um Sistema Operacional é que ele deve ser transparente para o usuário!

O programa mais importante é também o que menos aparece (pelo menos é assim que deveria ser) nós não utilizamos O sistema e sim os programas que estão nele! Quando “reparamos” que estamos dentro de um sistema operacional, é sinal de que há alguma coisa errada! (a famosa tela azul, BSD ou Blue Screen of Death ). Ao lado temos o novo modelo da tela para Windows 8.




Pessoal, vou ficando por aqui, pra não ficar muito cansativo!
Espero ter colaborado para o conhecimento de quem lê! Um forte abraço e até a próxima!