quarta-feira, 2 de fevereiro de 2011

Gaste tempo e depois ganhe mais ainda ao ler este artigo


Algumas idéias citadas abaixo ajudarão profissionais que trabalham com banco de dados a serem mais produtivos e atingir metas firmadas no acordo de nível de serviços (SLAs)
Não paramos e não podemos parar, desde o momento em que acordamos até a hora de se deitar. O mundo está cada vez mais competitivo, lutando por sobrevivência, e podemos afirmar que certamente neste momento há alguém estudando e aprendendo novas tecnologias ou tentando inventar um novo “Google”, por exemplo. Ninguém tem tempo a perder, ao ler este artigo você está gastando ele, mas espero que após a leitura lhe ajude a ganhar outros tantos que lhe dará tempo e uma vida mais calma.

A rotina de quem trabalha com dados é incessante, a infinidade de lugares, formatos e tamanhos, no qual é obrigado a controlar para manter simples conjuntos de bytes em algo compreensível é importante, faz com que se gaste muito tempo criando e executando rotinas estressantes que exigem muita habilidade e conhecimentos técnicos.


Hoje em dia os Databases Administrators(DBAs) são obrigados a gerenciar ambientes complexos que podem envolver diferentes plataformas de banco de dados, nas quais dependem de uma série de tarefas e rotinas, que precisam ser aprendidas em horas e dominadas em dias para serem aplicadas em todas as instâncias. Além disso tem a necessidade de aprender a utilizar a ferramenta de gestão de cada fabricante, que aplicam conceitos diferentes e tornam o aprendizado ainda mais demorado.


Uma forma de resolver estes problemas e também é uma dica que ofereço, é escolher uma ferramenta que permita gerenciar de maneira igual diferentes tipos de banco de dados, permitindo que o DBA domine uma única ferramenta e o seu aprendizado já seja inserido e replicado em qualquer plataforma de banco de dados, direcionando a preocupação do DBA em resolver o problema rápido, sem intervenção das peculiaridades de uma plataforma.


Ao pensarmos em modelagem, muitos a utilizam na fase de criação da estrutura do banco de dados e após a produção da aplicação abandonam o modelo, deixando obsoleto e sem manutenção. Desta maneira começam a surgir as famosas “gambiarras” para manter o sistema em funcionamento, mas de forma “sofrível”.


A modelagem não deve ser apenas utilizada na fase de criação da aplicação, ao integrar a ferramenta de modelagem no banco de dados, possibilitará ainda controle de todo o ciclo de vida e das mudanças, que forem realizadas e propagadas de maneira mais rápida, contribuindo também para uma documentação atualizada e sempre disponível de forma automática.


Outro conselho é escolher uma ferramenta de modelagem que propicie a empresa trabalhar de forma articulada e centralizada, permitindo que analistas de negócios façam o levantamento de requisitos e necessidades de seus usuários, reduzindo o mal entendimento e possibilitando que áreas especialistas em captação de informação possam trabalhar de maneira integrada e automatizada com DBAs e arquitetos de dados. Isso tudo porque ao realizar o modelo conceitual que foi gerado a partir de uma necessidade de negócio será permitido a geração do modelo do banco de dados lógico e físico já direcionado ao usuário, evitando desperdício de esforço aplicado em retrabalho.


Ao termos um modelo atualizado e em uso podemos, ir mais além e, oferecer aos desenvolvedores acesso ao dicionário de dados padronizado seguindo templates pré-fabricados para serem reutilizados pelos desenvolvedores, evitando que eles “reinventem a roda”. Ao sugerir e criar alternativas ou até mesmo novos objetos para armazenar dados, o desenvolvimento de software tem conseguido ser satisfatório seguindo implementações como Gang of Four (GoF) e UML patterns ,do mesmo modo a construção de um banco de dados não precisa ser feito de maneira diferente.


Arquitetos podem disponibilizar para os desenvolvedores estruturas e associações que necessitarão ser reutilizadas com frequência como dados cadastrais de clientes ou produtos, indicando os campos obrigatórios e tipos de dados utilizados, o ganho de tempo estará na constante reutilização e na transformação dos dados para serem movidos ou carregados via ETL.


Boas práticas de mercado são ótimas para serem lidas, nos ajudam a entender como o mercado trabalha e para onde estamos caminhando. Entretanto sabemos que muitas vezes a cultura e até mesmo a dificuldade em adotar uma ou outra técnica acabam dependendo de diversos fatores, mas ao mesmo tempo em que você ou sua empresa não adota ou não se adapta ao mundo de hoje, serão obrigados a viver o mundo de ontem, no qual a tecnologia e seus concorrentes não fazem questão de lembrar.

Função FormatDateTime


FormatDateTime é uma função que retorna uma string de acordo com o formato passado como 1º parametro, tendo como base o 2º parametro que é a data. Veja nesta dica todos os detalhes e exemplos de uso desta função
Ela está presente na unit SysUtils (Delphi 7), com a seguinte implementação:
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
begin 
  DateTimeToString(Result, Format, DateTime); 
end;
Segue um exemplo de uso, para ser colocado no evento onClick de um button, por exemplo:
begin 
  ShowMessage(FormatDateTime('dd/mm/yyyy', (Now + 1))); 
end;
Se hoje for 17/12/2010, este código resultará em uma mensagem contendo:
‘18/12/2010'.
Uma das grandes facilidade que a função nos traz é durante a interação com um banco de dados. Exemplo para o mySQL:

begin 
  MyQuery.SQL.Text := Format( 
    'SELECT * FROM `log` WHERE `date` BETWEEN ''%s'' AND ''%s''', 
    [ 
      // Data inicial 
      FormatDateTime('yyyy-mm-dd', (Now)),
      // Data final 
      FormatDateTime('yyyy-mm-dd', (Now + 1)) 
    ]); 
end;
Veja agora a tabela com os formatos possíveis e seus respectivos resultados, considerando a data e hora "02/09/2008 07:04:01":
Sintaxe Finalidade Resultado
FormatDateTime('c', Now) Resulta na Data e hora com o formato ShortDateFormat + LongTimeFormat. (Se for exatamente meia-noite não irá mostrar a hora) 02/09/2008 07:04:01
FormatDateTime('d', Now) Resulta no valor número que representa o Dia do mês ( sem 0 na frente ) 2
FormatDateTime('dd', Now) Resulta no valor número que representa o Dia do mês ( com 0 na frente [00] ) 02
FormatDateTime('ddd', Now) Resulta na abraviação do nome do dia da semana ter
FormatDateTime('dddd', Now) Resulta no nome do dia da semana terça-feira
FormatDateTime('ddddd', Now) Resulta na data formatada usando ShortDateFormat 02/09/2008
FormatDateTime('dddddd', Now) Resulta na data formatada usando LongDateFormat terça-feira, 2 de setembro de 2008
FormatDateTime('m', Now) Resulta no valor número que representa o mês ( sem 0 na frente ) 9
FormatDateTime('mm', Now) Resulta no valor número que representa o mês ( com 0 na frente [00] ) 09
FormatDateTime('mmm', Now) Resulta na abreviação do nome do mês set
FormatDateTime('mmm', Now) Resulta no nome do mês setembro
FormatDateTime('y', Now) Resulta no ano em dois digitos 08
FormatDateTime('yyyy', Now) Resulta no ano em quatro digitos 2008
FormatDateTime('h', Now) Resulta nas horas ( sem 0 na frente ) 7
FormatDateTime('hh', Now) Resulta nas horas ( com 0 na frente [00] ) 07
FormatDateTime('n', Now) Resulta nos minutos ( sem 0 na frente ) 4
FormatDateTime('nn', Now) Resulta nos minutos ( com 0 na frente [00] ) 04
FormatDateTime('s', Now) Resulta nos segundos ( sem 0 na frente ) 1
FormatDateTime('ss', Now) Resulta nos segundos ( com 0 na frente [00] ) 01
FormatDateTime('z', Now) Resulta nos milisegundos ( sem 0 na frente ) 31
FormatDateTime('zzz', Now) Resulta nos milisegundos ( com 0 na frente [000] ) 031
FormatDateTime('t', Now) Resulta na hora formatada usando ShortTimeFormat 07:04
FormatDateTime('tt', Now) Resulta na hora formatada usando LongTimeFormat 07:04:01
FormatDateTime('am/pm', Now) Reajusta a hora resultada para horários de 12 horas (manha e tarde)



segunda-feira, 31 de janeiro de 2011

Programa - Simulação de Lucro Com Rendimento Mensal


Galera Delphiana! Bom, esta dica que escrevo é muito simples e se trata de um simulador de rendimento de aplicação financeira mensalmente.
O arquivo do projeto encontra-se compactado e disponivel para download aqui (7,64 KB).
Dentro dele, estão todos os códigos desenvolvidos, que não são nada complexos.

Apagando itens selecionados de um ListBox

 
Esta dica mostra como apagar vários itens de uma só vez de um ListBox, não importando se eles são selecionados em sequência ou aleatoriamente. Lembrando que para selecionarmos vários itens de um ListBox, sua propriedade MultiSelect deve estar ativada. Segue o código:
//A procedure tem que ser declarada na sessão "Public" ou "Private" da unit
procedure TForm1.ApagaVarios (var ListBox: TListBox);
var
  i: integer;
  lista: TStringList;
begin
  for i:=0 to ListBox.Items.Count-1 do
    if ListBox.Selected[i] then
      ListBox.Items[i] := '';

  lista:= TStringList.Create;
         
  for i:=0 to ListBox.Items.Count-1 do
    if ListBox.Items[i] <> '' then
      lista.Add(ListBox.Items[i]);

  Listbox.Clear;
  ListBox.Items.Assign(lista);  
  lista.Free;
end;
Para usá-la, coloque um componente ListBox e um componente Button em seu form. Adicione alguns itens no ListBox e ative a sua propriedade MultiSelect, conforme comentado no início e, no onClick do botão, faça o código que chama a procedure para apagar os itens selecionados:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ApagaVarios(ListBox1);
end;
Por: David
Contato: sapodiou2@bol.com.br



Dica do editor

Segue abaixo uma outra forma de se fazer o mesmo procedimento, de maneira mais otimizada:

procedure TForm1.ApagaVarios2(var ListBox: TListBox);
var
  i: integer;
begin
  i := 0;
  while i <= ListBox.Items.Count-1 do
  begin
    if ListBox.Selected[i] then
      ListBox.Items.Delete(i)
    else
      i := i + 1;
  end;
end;