Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens...

32

Transcript of Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens...

Page 1: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...
Page 2: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...
Page 3: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

editorial

03

sumário

THE CLUBAv. Profº Celso Ferreira da Silva, 190

Jd. Europa - Avaré - SP - CEP 18.707-150Informações: (14) 3732-3689

Suporte: (14) 3733-1588 - Fax: (14) 3732-0987

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected] Informações: [email protected]

DúvidasCorrespondência ou fax com dúvidas devem

ser enviados ao - THE CLUB, indicando “Suporte”.

OpiniãoSe você quer dar a sua opinião sobre o clube

em geral, mande a sua correspondência para a seção “Tire sua dúvida”.

ReproduçãoA utilização, reprodução, apropriação,

armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada

publicação da revista “The Club Megazine” são terminantemente proibidos sem autorização

escrita dos titulares dos direitos autorais.

Impressão e acabamento:HIPERGRAF Indústria Gráfica

Tel.: (14) 3641-1665 - Cep 17340-000Rua Francisca A. Pereira Borges, 436

Barra Bonita - Vila São CaetanoTiragem: 5.000 exemplares

Copyright The Club Megazine 2007

Diretor TécnicoMauro Sant’Anna

Colaboradores Mauto Sant´Anna

Delphi é marca registrada da Borland International, as demais marcas citadas são registradas

pelos seus respectivos proprietários.

- Editorial .................................................................................................... 03

- A Evolução das Interfaces com usuário e o Microsoft Silverlight ................................. 04

- 10 perguntas sobre MSF ........................................................................... 05

- Criação de Integridade Referencial .................................................................. ................ 07

- Interatividade com Intraweb ...................... .......................................................... 09

- Usando o TOleContainer para integrar o MS-Word a aplicações Delphi ........................ 13

- Obtendo vantagem competitiva com a implementação do business inteligent ............. 16

- Dicas & Truques ........................................................................................ 23

EditorialQueridos leitores da The Club Megazine,

Nossa revista está cheia de matérias interessantes este mês, como sempre, começando com o artigo de nosso amigo Mauro Sant’anna, sobre o Silverlight. Este programa lançado não há muito tempo pela Microsoft começa a se disseminar e tem potencial para se tornar uma importante ferramenta para os desenvolvedores. O Fábio Câmara também publica um artigo sobre o MSF, com as 10 perguntas que as pessoas mais fazem a respeito do assunto.

Não deixe de ler também as matérias “Criação de integri-dade referencial”, “Interatividade com Intraweb”, a matéria do Marcelo Nogueira, “Obtendo vantagem competitiva com a implementação do business inteligent” e outras, sem esquecer é claro, das Dicas e Truques.

Nos vemos no mês que vem. Boa leitura!

Page 4: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

silverlight

04

Sobre o autor

Nos primórdios da informática os computadores não tinham algo que pudesse ser chamado de “interface com o usuário” da maneira que conhecemos hoje: a entrada de dados era feita com cartões

perfurados e a saída através de outros cartões perfurados ou impressora. Fitas de papel perfurado também eram uma alternativa aos cartões.

Não tardou para que alguém tivesse a idéia de ligar ao computador um teletipo – uma máquina eletromecânica que existe desde o início do século XX usada para enviar “telegramas” através de linhas de comunicação “telegráficas”. O teletipo consumia bastante papel, o que levou à criação do teletipo de vidro”, onde o papel era substituído por uma tela de televisão , onde os caracteres “rolavam”.

O passo seguinte foi permitir endereçar qualquer posição, para uma ma-nipulação bidimensional da tela. Esta é a tecnologia usada pelos terminais IBM 3270 e também pelo IBM PC original. Como os dados exibidos eram sempre caracteres, essa interface recebeu o nome de CUI – Caracter User Interface. Embora obsoleta, ela ainda é usada em várias aplicações, notoriamente em automação comercial.

O passo seguinte foram as interfaces gráficas. Uma tecnologia desen-volvida originalmente pela XEROX e popularizada inicialmente pela Apple e depois pela Microsoft, no Windows 3.0.

Até agora a evolução foi linear, com a etapa seguinte substituindo a anterior com vantagens. No entanto, quando a Internet apareceu, ela tinha vantagens e desvantagens sobre as interfaces gráficas como a do Windows. As principais vantagens da Web eram a facilidade de distribuição dos aplica-tivos (basta colocar o aplicativo em um único lugar, o web) e a independência de plataforma no cliente (vários sistemas operacionais e navegadores). Por

outro lado, os aplicativos Web têm várias desvantagens: são lentos, exigem o uso de mouse, não funcionam sem a conexão Internet e têm dificuldade em controlar precisamente a impressão.

Ao longo do tempo foram feitas algumas tentativas de melhorar a inter-face com usuário dos aplicativos Web através de código rodando no cliente. Uma das alternativas é o JavaScript (com ou sem AJAX), uma linguagem interpretada que roda no cliente e permite melhorar a interface. O Google é notório por utilizar muito bem os recursos do JavaScript, por exemplo no Google Maps ou GMail. Uma outra alternativa é o Flash, um plug-in da Macromedia/Adobe que interpreta uma linguagem e permite gráficos mais avançados. Seu uso mais notório é em sites infantis com jogos, como http://www.disney.com e http://www.neopets.com.

Tanto o JavaScript como o Flash permitem uma interface com usuário melhor. O problema é que desenvolver para eles é algo pouco produtivo e que exige novas habilidades dos desenvolvedores

Em 2007 a Microsoft lançou o Silverlight 1.0. O Silverlight 1.0 é basica-mente um concorrente do Flash. Ele permite manipulações de gráficos e vídeo sofisticadas, usando JavaSctipt como linguagem de programação. É um passo na direção certa, mas ainda assim é um ambiente trabalhoso.

Recentemente a Microsoft colocou em Beta o Silverlight 2.0. O Silverlight 2.0 é bastante diferente do 1.0, pois inclui uma implementação do .NET Framework. Ou seja, você pode programar com as linguagens C# ou VB.NET, utilizando uma biblioteca bastante rica que inclui Web Services, gráficos, áudio, vídeo, armazenamento local e muitas outras características.

O Silverlight estará disponível diretamente da Microsoft para Windows e MacIntosh. A Novell está desenvolvendo uma versão para Linux chamada “Moonlight”.

Acredito que o Silverlight irá revolucionar a maneira como desenvolvemos aplicativos. Ele resolve diversos dilemas na escolha de arquiteturas Windows versus Web. Penso que a maioria dos aplicativos a serem desenvolvidos na plataforma Microsoft usará o Silverlight.

Veja maiores informações em http://silverlight.net.

Mauro Sant’Anna nunca trabalhou na Microsoft, mas conhece bastante a empresa, já que é MVP e “Regional Director of the Year”. Ele coordena os cursos na M. A. S. In-formática (www.mas.com.br) e bloga em Português em http://blogs.vstsrocks.com.br e em inglês em http://maurosjungle.spaces.live.com .

Page 5: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

msf

05

Já se passaram muitos anos desde os primeiros documentos sobre MSF que datam do ano de 1991. De lá para cá, o que aconteceu? Como ficou o passado e como será o futuro? O que muda no MSF

por causa do Visual Studio Team System?

Respondendo estas e outras questões, decidimos simular uma entrevista real neste artigo. Aposta-mos que a objetividade desta pro-posta será muito mais eficiente que qualquer texto narrativo. Em nossa proposta, simplesmente numeramos as perguntas e colocamos o autor, ou seja o próprio que escreve agora, para responder.

Estas são as perguntas:

1) Qual a definição do MSF, metodologia ou disciplina?Resp.: Na minha leitura, está mais para metodologia do que para disci-

plina. Uma disciplina de engenharia de software se propõe a tratar um tema vertical com profundidade. O MSF apresenta assuntos horizontais e em muitos deles numa superficialidade maior do que eu gostaria. Da mesma forma, mui-tas pessoas me perguntam se é um framework como o próprio nome sugere. Ao meu ver, falta muito para ser um framework pois está mais na sugestão, modelo e direção do que na proposta prática de documentos e técnicas.

2) Qual o seu tempo de expêriencia com o MSF?Resp.: Comecei em 1998 a estudar e em 2000 tive a oportunidade de

praticar em um gigantesco projeto. Na época fui felizardo em trabalhar com pessoas da Microsoft que conhecem profundamente o MSF, como por exemplo o Otávio Pêcego e o Ricardo Mendes (técnicos que sou fã até hoje). De lá para cá tenho estudado muito e questionado muito o modelo de ciclo iterativo incremental, pois mesmo funcionando em meus históricos, tenho gostado mais de praticar ciclos empíricos.

3) Qual foi a melhor versão do MSF já lançada?Resp.: Sinceramente tenho dúvidas se é a versão 2.5 ou a 3.0, as duas

eram extremamente de vanguarda com os melhores príncipios de agilidade numa época que só se falava em ciclo waterfall e processos prescritivos para projetos de software. Quanto a pior, certamente é a 4.2 que acompanha o

Dez perguntas sobre MSF

Visual Studio Team System hoje. Seja a instância para CMMi como a instância para Agile, conseguiram fazer algo complexo demais e incompleto demais. Fico triste pela metodologia, que está precisando de novos (velhos) gurus , fico triste pelo efeito disso no VSTS, pois acredito que para uma empresa usar esta excelente ferramenta na plenitude obrigatoriamente terá que personalizar seu próprio modelo de processos (Process Template).

4) Qual o diferencial principal do MSF do seu ponto de vista em relação ao RUP e PMI?

Resp.: As duas propostas se assemelham mais do que se diferem. O RUP é mais formal, mais completo e mistura um pouco de ciclo iterativo incre-mental com pitadas de ciclo waterfall. Já o MSF é mais informal, incompleto em diversos aspectos, porém com “atitudes mentais” (em inglês, mindset) muito positivas visando produtividade e qualidade – fundamento isso nos valores “foco no cliente” e “foco no produto” do MSF. O modelo de equipe do MSF é também um belo exemplo a ser seguido, pois formaliza uma série de responsabilidades imprescindíveis para um projeto de software. O fato do MSF ser incompleto em diversos aspectos pode ser bom ou ruim, dependendo do ponto de vista. Por exemplo, se você quer usar algumas técnicas de XP (eXtreme Programming) com MSF certamente será mais simples que usar XP com RUP. Comento isso considerando que você quer preservar a origem e a essência do modelo MSF e do modelo XP. No caso do RUP, certamente você estaria criando um processo personalizado e desfiguraria a essência e o modelo. No meu caso prático, eu gosto muito de usar o modelo de equipes do MSF, com métodos de gestão e ciclo empíricos do SCRUM, com técnicas de levantamento de requisitos do APM – Agile Project Management e do Agile Modelling (Scott Ambler), com técnicas de codificação do XP (exceto Pair Programming) e TDD – Test Driven Development.

5) O modelo de equipe do MSF, sem hierarquia, funciona na prática?Resp.: A resposta sincera está mais para “não” do que para “sim”. O

problema, na minha leitura, não é o MSF Team Model. É a cultura de nosso país, de nosso povo. Modelos democráticos não funcionam no Brasil, somos acostumados a ser ordenados, a seguir outros e não a liderar. Somos acostu-mados com a “Lei de Gerson” e outros predicados que não funcionam numa equipe. Tem também a questão da formação acadêmica. Os cursos de ciências exatas não trazem nenhuma disciplina humana, por isso o aluno sai do curso uma “fera” em algoritmos e linguagens de programação, mas não sabe lidar com o amigo de trabalho ao lado da mesa, com seu cliente e com o seu chefe. Enfim, não quero fazer desta entrevista um manifesto político. Em resumo, o modelo não hierárquico do MSF tem como funcionar na prática, desde que

Page 6: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

msf

06

Sobre o autorFabio Camara ([email protected]) é MCT,

MCP, MCSA, MCAD Charter, MCITP, MCTS, MCSD.NET, MSF Practitioner, Certified ITIL Foundations e Certified SCRUM Master– Acredita em bons resultados em projetos com técni-cas ágeis, principalmente para as características do mercado brasileiro.

forme-se um modelo de auto-gestão individual em cada membro da equipe. Entenda-se aqui como auto-gestão, o próprio individuo se responsabilizar pelas suas atividades e por seus “check-lists”.

6) Você poderia citar um caso de sucesso, no qual foi utilizado o MSF para guiar o projeto?

Resp.: Primeiro vamos definir o que é um caso de sucesso. Se para você caso de sucesso é um projeto entregue no prazo previsto no primeiro momento e com o orçamento previsto na primeira estimativa, isso não faz parte de minhas crenças. O plano perfeito (ou seja, o cronograma imútavel e os requisitos congelados) são fábulas de livros de engenharia de software. Todo projeto evolui em comparação a sua primeira estimativa e por isso, para mim, caso de sucesso é entregar um projeto que teve requisitos, orça-mento e prazo alterados conservando a satisfação do cliente contratante do projeto. Agora que alinhamos o que é caso de sucesso, posso afirmar que o MSF Essentials orienta uma série de valores que conduzem ao resultado positivo. Mais uma vez, os valores “foco no cliente” e “foco no produto”, se corretamente compreendidos pela equipe do projeto, proporcionarão uma série de atitudes e técnicas comprometidas com a satisfação do cliente e com a entrega do produto final.

7) Quais os grandes diferenciais no modelo de times do MSF?Resp.: Certamente é a formalização das responsabilidades do usuário em

um projeto de software. O papel “User Experience” traz valores que adicionam muito mais uma parceria real do que o papel “Product Manager ” e seus simi-lares em outras metodologias. Traduzindo a frase anterior: inserir no projeto o papel formalizado do que o usuário deve fazer em um projeto de software transcende as outras propostas metodológicas que apresentam apenas o papel de Product Manager, ou Business Analyst, ou Product Onwer, ou qualquer stakeholder com a finalidade de definir e especificar o que deve ter o produto. Com este papel, atendemos uma série de expectativas de usuários reais, como usabilidade, ergonomia, requisitos não funcionais relacionados com desempenho e facilidade de uso. Outro diferencial é o papel Release Manager. Apesar de, na minha leitura, haver uma certa superficialidade na formalização deste papel pela metodologia, considerar em seu projeto um membro responsável por infra-estrutura para o desenvolvimento, por controle dos códigos fontes (administração da ferramenta) e por máquinas de compilação (administração de versões) pode significar a diferença entre resultados previsíveis e desastres de última hora.

8) Do seu ponto de vista, o MSF é realmente eficaz, ou possui pontos que podem ser aperfeiçoados?

Resp.: No meu ponto de vista, usar uma só metodologia em seus proje-tos é torná-los míopes. As receitas mudam de resultado conforme quem as implementa. É fundamental permitir-se a revisão se o método do MSF ou de qualquer outra metodologia é o mais adequado para determinado projeto constantemente. Em meus históricos de projetos, conclui que o fator mais importante é o líder do projeto e não importa muito qual metodologia ele usa. As metodologias são importante para formalizar procedimentos e permitir uma cultura única no desenvolver de um projeto. A metodologia formal tam-bém facilita a entrada de novos participantes, pois pode-se contratar técnicos com os conhecimentos necessários para a cultura do projeto. A metodologia é também uma espécie de braço direito do líder, pois orienta-o procedimentos, gestão e check-lists. Agora respondendo exclusivamente sua pergunta, o MSF

é bastante maduro, fato que patrocina sua eficácia, porém perdeu muito da indentidade Microsoft nos útimos anos. Muita gente competente, como Steve McConnell, Randy Miller e David Anderson entre muitos outros que injustamente não estou citando, contribuíram para o enriquecimento do MSF como uma metodologia de mercado. No meu entender, este foi o problema. Quando o MSF não estava preocupado com o mercado e simplesmente em ser a forma como a Microsoft desenvolvia seus produtos internamente, a metodologia era muito autêntica. Hoje, depois de tantas transformações, temo que as empresas que usam MSF (incluindo a própria Microsoft) na verdade usem uma versão própria derivada do MSF. O problema disso é que em breve não teremos mais os fundamentos essenciais do MSF para personalizar e utilizar em nossos projetos – teremos algo sem “predigree”. Acreditando nisso, rogo para que o MSF não tenha mais aperfeiçoamentos, mas sim recupere sua matrizes genéticas, tornando-se novamente “o MSF”, uma metodologia ímpar.

9) O que muda no MSF por causa do Visual Studio Team System e qual o futuro do MSF?

Resp.: O VSTS enriquece o MSF. De certa forma, todas as empresas que desenvolvem projetos possuem algum tipo de ciclo fabril, seja tácito aos participantes ou muito bem formalizado. Este ciclo fabril, corretamente ma-peado e cobrindo todas as necessidades para a construção do projeto pode ser chamado de ciclo de vida de desenvolvimento de software (em inglês SDLC ). O VSTS é uma ferramenta para automatizar o ciclo vida de desenvolvimento de software. Como todo o SDLC é inspirado em alguma metodologia, podemos afirmar que o VSTS automatiza o MSF amplificando os possíveis resultados propostos pelos princípios e valores da metodologia. Sobre o futuro, acredito na sensibilização de gestores da Microsoft para a continuidade evolutiva (como comentei na resposta 8, voltando as raízes) do MSF. Acredito nisso porque o MSF vai se tornar mais popular do que nunca foi em virtude de sua distribuição e primeira opção de utilização junto do VSTS.

10) É possível usar o MSF sem o Visual Studio Team System?Resp.: De novo, o VSTS enriquece o MSF. O VSTS não canibaliza nenhuma

metodologia, simplesmente a automatiza. Respondendo assim afirmamos que você pode usar o VSTS com SCRUM, com RUP ou com XP assim como você pode usar o MSF com StarTeam (da Borland) ou sem nenhuma ferramenta de automação de processos fabris. Minha recomendação para as empresas que desejam utilizar o MSF sem o VSTS, que baseiem-se na versão 3.0 do MSF.

Quero registrar meu agradecimento ao aluno Anderson Suzuki, de um curso de Ciência da Computação de alguma universidade no nosso país, que resolveu fazer seu TCC sobre MSF e de tanto me enviar perguntas, me inspirou a fazer este artigo (principalmente neste formato).

Sucesso em seus projetos.

Page 7: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

integridade referencial

07

O modelo relacional, assim como os próprios bancos de dados, nasceram com a necessidade de compartilhar dados entre usuários, com diferentes visões da mesma informação.

Um banco de dados de alto desempenho é a base do ambiente de infor-mação relacional e é justamente o banco de dados que irá determinar com que rapidez uma organização será capaz de responder a novas oportunidades de negócios, a novas estratégias competitivas, a novos mercados, etc.

Se preocupa, básicamente, em armazenar a informação uma única vez em um único lugar, com regras específicas de validação, manutenção e inte-gração das informações armazenadas nas diferentes tabelas. Regras devem ser impostas para a aceitação dos dados.

Como exemplo, na figura abaixo, temos abaixo uma tabela de CLIENTES e uma tabela de PEDIDOS:

Como você pode notar, embora precisemos relacionar PEDIDOS com CLIENTES, não iremos colocar na tabela PEDIDOS nenhuma informação da tabela CLIENTES além da CHAVE correspondente àquele determinado cliente. Esse valor será anotado na coluna CHAVE_CLIENTE da tabela PEDIDOS.

Através dele, usando consultas SQL com o relacionamento das tabelas, poderemos obter toda e qualquer informação relativa aos pedidos do cliente em questão. E qualquer atualização de cadastro para um determinado cliente, será automaticamente visualizada para todos os seus pedidos.

Além disso, teremos a condição de ordenar ao banco de dados:

- que não aceite na tabela PEDIDOS nenhum valor para o campo CHAVE_CLIENTE que não possa ser encontrado no campo CHAVE da tabela CLIENTES;

- que não deixe ser excluído da tabela CLIENTES nenhum registro que con-tenha correspondentes pelo campo CHAVE_CLIENTE da tabela PEDIDOS.

Neste exemplo temos um relacionamento de 1 para N, ou seja:

- para cada pedido podemos ter apenas 1 cliente, mas - para cada cliente podemos ter “N” pedidos.

Agora podemos usar as ferramentas de integridade referencial do Oracle para construirmos um relacionamento seguro e confiável para essas duas tabelas, baseado em regras inteligentes... Elas estão, enfim, relacionadas!

E todas essas regras não implicam em nenhuma linha de código no Delphi, mesmo porque não é do “front-end” a responsabilidade de manter esse relacionamento, ao qual chamamos integridade referencial. E embora esses conceitos possam à primeira vista parecerem óbvios, essas regras geralmente não são respeitadas, principalmente por aqueles desenvolvedores que se “formaram” com o Clipper, que não oferece recursos para integridade referencial.

E como construimos então a integridade referencial?Depois de criadas as duas tabelas, podemos utilizar o comando ALTER

TABLE para criar uma INTEGRITY CONSTRAINT, da seguinte forma:

ALTER TABLE NOME DA TABELA ADD(

CONSTRAINT NOME DA CONSTRAINT

FOREIGN KEY (CAMPO) REFERENCES NOME DA

TABELA(CAMPO));

Que no caso do nosso exemplo resultaria em:

Page 8: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

integridade referencial

08

Sobre o autorMário Camilo Bohm - Bohm,Interal

email: [email protected]

ALTER TABLE PEDIDOS ADD(

CONSTRAINT PEDIDOS_CLIENTE_FK

FOREIGN KEY (CHAVE_CLIENTE) REFERENCES

CLIENTES(CHAVE));

Para excluir posteriormente uma integridade referencial, podemos tam-bém utilizar o comando ALTER TABLE:

ALTER TABLE PEDIDOSDROP CONSTRAINT PEDIDOS_CLIENTES_FK;

DICA:

Para todo e qualquer campo de relacionamento, no caso do nosso exemplo o campo CHAVE_CLIENTE da tabela PEDIDOS, crie um ÍNDICE. É fundamental para um bom desempenho na resolução de consultas (SELECT’s)!

DICA:

Note que estamos propondo um padrão de trabalho:

A chave-primária de qualquer tabela terá o nome CHAVE, será do tipo NUMBER e terá seus valores gerados por uma SEQUENCE.

Já o campo de outras tabelas que se relacionarem com essa chave-primária (porque somente uma chave-primária pode fundamentar uma integridade referencial), terá o nome “CHAVE_ + NOME DA TABELA DE ORIGEM”, que no nosso exemplo resultaria em CHAVE_CLIENTE, já que a tabela em questão é CLIENTES.

Page 9: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

intraweb

09

Salve amigos do The Club. Será que esta revista é real? O computa-dor que você utiliza existe mesmo? Sejam bem-vindos ao Mundo de Matrix. Vocês podem escolher: pílula azul levará vocês para um

mundo de interatividade, onde o sexto sentido é apenas um coadjuvante, ou a pílula vermelha, onde você aprenderá alguns truques sobre Intraweb.

Agora, falando apenas com você, isso mesmo, você amigo! Sabia que você é inteligente e capaz de mudar coisas ao seu redor? Fazer com que o amor da sua vida, que nem sabe que você existe, se apaixone por você através de simples palavras? Isto é interatividade. Você pode, você deve fazê-lo. Não deixe para amanhã, pois o amanhã foi ontem!

Vamos aproveitar a era da interatividade, e desenvolver um simples projeto utilizando o Intraweb. Simples projeto? Amigos essa é a chave para o sucesso: interatividade. Interaja, imagine, faça.

Apesar de simples, recomendo tomar a pílula azul (não estou falando do Viagra, hein!) e aproveitar melhor o objetivo do projeto.

Let´s go friends !!!

Crie um novo projeto, através das opções File/New/Other..., selecione a seção Intraweb e escolha o modelo Stand Alone Application.

Em seguida, selecione o diretório do nosso projeto (exemplo c:\intraweb\theclub).

Insira a unit SysUtils, na cláusula uses da aplicação, para que possamos fazer algumas operações.

Grave toda a aplicação, e insira os componentes que seguem no FormMain:

OBJETO

Objeto Propriedade Valor

TIWLabel Name IWLabel1

Caption Calculadora

Left 112

Top 16

Interatividade com Intraweb

OBJETO

Objeto Propriedade Valor

TIWHRule Left 56

Top 40

Width 225

OBJETO

Objeto Propriedade Valor

TIWLabel Name IWLabel2

Caption Insira dois números e selecione a operação

Left 56

Top 56

OBJETO

Objeto Propriedade Valor

TIWEdit Name edN1

Left 56

Text (deixe em branco)

Top 80

OBJETO

Objeto Propriedade Valor

TIWEdit Name edN2

Left 56

Text (deixe em branco)

Top 112

Page 10: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

intraweb

10

OBJETO

Objeto Propriedade Valor

TIWHRule Left 56

Top 114

Width 73

OBJETO

Objeto Propriedade Valor

TIWEdit Name edTotal

Left 56

Text (deixe em branco)

Top 152

OBJETO

Objeto Propriedade Valor

TIWButton Name btAdicao

Caption +

Left 144

Importante >>> Tag 1

Width 25

OBJETO

Objeto Propriedade Valor

TIWButton Name btSubtracao

Caption -

Left 172

Importante >>> Tag 2

Width 25

OBJETO

Objeto Propriedade Valor

TIWButton Name btMultiplicacao

Caption x

Left 208

Importante >>> Tag 3

Width 25

OBJETO

Objeto Propriedade Valor

TIWButton Name btDivisao

Caption :

Left 240

Importante >>> Tag 4

Width 25

A figura 1 ilustra nosso formulário.

figura 1 formulário do projeto

Agora vamos codificar o botão btAdicao. No evento OnClick do botão, insira o código que segue:

var n1,n2,total:single; operacao:integer; begin try n1:=StrtoFloat(edN1.Text); n2:=StrtoFloat(edN2.Text); total:=0; operacao:=(Sender as TIWButton).Tag; case operacao of

Page 11: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

intraweb

11

1:total:=n1+n2; 2:total:=n1-n2; 3:total:=n1*n2; 4:total:=n1/n2; end; edTotal.Text:=FloatToStr(total); except on EZeroDivide do WebApplication.ShowMessage(‘Divisão por zero !’); on EOverFlow do WebApplication.ShowMessage(‘Aconteceu OverFlow !’); // end;

Antes de analisar o código, selecione os demais botões, e associe o código do evento OnClick, como ilustra a figura 2.

Figura 2 associação do evento OnClick aos demais botões.

Vamos analisar o código.

var n1,n2,total:single; operacao:integer;

Neste primeiro bloco estamos declarando variáveis para execução da operação matemática (n1, n2 e total), bem como uma variável auxiliar (operação) com o intuito de associar o botão que estão chamando o evento. Em cada botão, definimos valores diferentes para a propriedade TAG, que será facilmente assimilado por nossa aplicação.

try n1:=StrtoFloat(edN1.Text); n2:=StrtoFloat(edN2.Text); total:=0; operacao:=(Sender as TIWButton).Tag;

Em seguida, iniciamos um bloco protegido (try), e convertemos o con-teúdo dos campos de edição edN1 e edN2, para o tipo float. Neste mesmo bloco estamos iniciando a variável total, e atribuindo à variável operacao, o valor contido na propriedade TAG de um objeto do tipo TIWButton, que em nosso caso, são representados pelos botões btAdicao, btSubtracao, btMul-tiplicacao e btDivisao.

case operacao of 1:total:=n1+n2; 2:total:=n1-n2; 3:total:=n1*n2; 4:total:=n1/n2; end;

Neste bloco, fazemos as devidas operações de acordo com o botão pressionado.

Page 12: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

intraweb

12

Sobre o autorEmerson Facunte

edTotal.Text:=FloatToStr(total);

Em seguida, atribuímos ao objeto edTotal o resultado da operação.

except on EZeroDivide do WebApplication.ShowMessage(‘Divisão por zero !’); on EOverFlow do WebApplication.ShowMessage(‘Aconteceu OverFlow !’); // end;

Por fim, tratamos duas exceções EZeroDivide (divisão por zero), e EOver-Flow (Overflow na operação). Repare que em caso de erro, estamos apre-sentando mensagens ao usuário. É muito parecido com o famoso Application.ShowMeesage. Neste caso, utilizamos o WebApplication.ShowMessage.

A figura 3, ilustra nossa aplicação em tempo de execução.

figura 3 projeto em execução

Em seguida temos nossa mensagem de erro. A figura 4 ilustra um erro de divisão por zero.

figura 4 - erro [ divisão por zero ]

O poder está em suas mãos.

Quem sabe esta calculadora possa oferecer inúmeras operações, cientí-ficas, financeiras, entre outras, e conquistar um novo mundo.

Não desistam, o Arquiteto tem um plano para nós.

Muita luz e sucesso a todos!!!

Page 13: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

delphi

13

Usando o TOleContainer para integrar

o MS-Word a aplicações Delphi

1. Introdução

É comum nos depararmos com a necessidade de desenvolver aplicações Delphi nas quais haja a possibilidade da edição de documentos de texto. Nestes casos, temos como possível solução, a construção de um “pseudo editor de textos” usando componentes do próprio Delphi, como por exemplo o TRichEdit. No entanto, esta solução pode implicar em tempo adicional para conclusão do aplicativo em questão e, além disso, há também o fato de que a maioria dos usuários de computadores já está acostumada a usar o Microsoft Word como editor de textos. Então, para que reinventar a roda ?

De modo a poupar trabalho para a implementação de um novo editor de textos, como, também, para permitir que o usuário continue dispondo de todos os recursos oferecidos pelo Microsoft Word, sem ter a necessidade de executá-lo paralelamente a aplicação Delphi, podemos utilizar o componente TOleContainer, que permitirá “embutir” o Word em nossa aplicação.

2. O Componente TOleContainer

O componente TOleContainer se encontra disponível a partir da paleta System do Delphi e, como se pode constatar através do próprio Help deste componente, o mesmo dispõe de várias propriedades e métodos.

Para efeito de exemplo de utilização das principais propriedades e métodos envolvidos na utilização do TOleContainer como ferramenta para a integração de aplicativos Delphi e o MS-Word, desenvolveu-se uma aplicação exemplo, conforme descrito abaixo.

3. A Aplicação Exemplo

A aplicação foi desenvolvida utilizando um Form, no qual foi inserido um Menu (TMainMenu), conforme a Figura 1.

Figura 1 – Opção Arquivo do menu da aplicação.

Somente foi inclusa no menu a opção Arquivo, visto que, no momento em que for criado um objeto no OleContainer, o menu da aplicação embutida (nesse caso o Word) é mesclado com o menu da aplicação Delphi. Dessa maneira, o menu da aplicação Delphi se encarrega das opções referentes às operações de criação, abertura, fechamento, salvamento e impressão do documento, bem como do encerramento da aplicação. O menu da aplicação embutida trará as demais opções, tais como: Editar, Inserir, Formatar, Fer-ramentas, etc.

O objeto OleContainer deve ser inserido sobre um panel para que este, no momento da criação de um objeto, fique restrito às dimensões do panel. A opção align do OleContainer deve ser configurada como alClient, de forma que o OleContainer ocupe todo o espaço disponível no panel, como também pode ser visto na Figura 1.

Page 14: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

delphi

14

3.1. O Funcionamento da Aplicação

A fim de ilustrar a utilização do componente TOleContainer, nossa aplicação implementou as operações de criação, a abertura, o fechamento, o salvamento (através das opções Salvar e Salvar como...) e a impressão de um documento.

3.1.1. A criação de um novo documento

A operação de criação de um documento foi implementada a partir da opção Novo, do menu Arquivo. A criação se dá a partir do método CreateOb-ject do OleContainer, conforme a Figura 2.

Figura 2 – Procedimento executado pela opção Novo, do menu Arquivo.

Esse método tem como parâmetros OleClassName e Iconic. O parâmetro OleClassName é do tipo string e se refere à classe do objeto que desejamos criar. Por exemplo, para criarmos um documento do Word, precisamos definir o parâmetro OleClassName como Word.Document.8. Esses nomes de classes podem ser pesquisados a partir da chave HKEY_CLASSES_ROOT do registro do Windows, utilizando-se do editor de registros (Regedit). A partir dessa chave do registro é possível saber o nome da classe associada a qualquer tipo de documento, como por exemplo, uma imagem jpg (.jpg), um arquivo html (.htm ou .html), uma planilha do excel (.xls) e vários outros. Já o parâmetro Iconic é do tipo boolean. Se Iconic for definido como True, o objeto do OleContainer será criado em forma de um ícone e seu conteúdo somente poderá ser editado através do duplo-clique do mouse. Já, se for definido como False, o parâmetro Iconic determina que o objeto criado estará disponível imediatamente para a edição.

No caso da nossa aplicação exemplo, imediatamente após clicar a opção Novo, do menu Arquivo, o usuário já tem a sua disposição um novo documento do Word para editar.

3.1.2. A abertura de um arquivo existente

De forma semelhante a criação de um documento, a abertura de um já existente ocorre através do acionamento da opção Abrir..., do menu Arquivo, que faz uma chamada ao método CreateObjectFromFile, como se pode ver através da Figura 3.

Figura 3 – Procedimento executado pela opção Abrir, do menu Arquivo.

A diferença entre este método e o utilizado anteriormente para a criação de um documento, está no fato de que não informamos como parâmetro a classe do objeto, mas sim o caminho de um arquivo, a partir do qual um novo objeto será criado no OleContainer. Ao informarmos o caminho do arquivo, o próprio OleContainer se encarrega de determinar qual a classe do documento que estamos abrindo. Assim como ocorre no método CreateObject, podemos comandar a criação do objeto em forma de ícone ou modo normal.

Quando criamos um objeto a partir de um arquivo, o mesmo não é exibido através da interface da sua aplicação de origem (no nosso caso, o Word), mas sim, disposto como se fosse simplesmente um Memo, como se pode notar a partir da Figura 4.

Figura 4 – Abertura de documento usando o método CreateObjectFromFile.

A interface da aplicação de origem somente será acionada se o OleCon-tainer receber um duplo-clique do mouse. No entanto, pode não ser conve-niente que deixemos a cargo do usuário executar este duplo-clique sobre o OleContainer, a fim de exibir o documento na sua interface original. Para solucionar este problema, podemos fazer uso do método Perform, herdado pelo OleContainer da classe TControl.

Utilizando o método Perform, juntamente com a mensagem WM_LBUTTONDBLCLK da Api do Windows, podemos simular o duplo-clique do mouse sobre um componente. É exatamente isso que ocorre imediata-mente após a abertura do documento pelo OleContainer em nossa aplicação exemplo, como também pode ser visto acima, na Figura 5.

Figura 5 – Documento aberto com o envio da mensagem WM_LBUTTONDBLCLK.

Page 15: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

delphi

15

Sobre o autor

A fim de facilitar a interação com o usuário, foi utilizado um OpenDialog, presente na guia de componentes Dialogs, para que o mesmo informe a localização e o nome do arquivo que deseja abrir.

3.1.3. O Fechamento de um Documento

Em algum momento, pode ser necessário fechar um documento que se encontra aberto. Para isso, acionamos o método DestroyObject do OleCon-tainer, através da opção Fechar, do menu Arquivo, conforme Figura 6.

Figura 6 – Procedimento executado pela opção Fechar, do menu Arquivo.

O único detalhe a ser considerado neste ponto, é que se o usuário não salvou o documento antes de solicitar o fechamento do mesmo, perderá todas as informações. O componente não dispõe de nenhum método ou propriedade explícitos que permitem identificar se houve alteração no documento desde o último salvamento. Esse é um problema que merece ser estudado a parte.

3.1.4. O Salvamento de um Documento

O menu arquivo dispõe as opções Salvar e Salvar como... destinadas a gravação física do conteúdo do documento atual. Caso o usuário se utilize da opção Salvar, sem ter salvo o documento nenhuma vez desde a sua criação, a própria aplicação se encarregará de disparar a opção Salvar como..., que interage com o usuário através de um SaveDialog, também disponível na guia de componentes Dialogs, de modo que o mesmo informe a localização e o nome do arquivo com que deseja que o documento seja salvo.

Ambas as opções de salvamento chamam o método SaveAsDocument do OleContainer. Esse método, ao contrário do SaveToFile, faz com que o ar-quivo seja salvo com toda a formatação necessária para que o mesmo possa ser lido pela sua aplicação de origem (a qual estamos apenas embutindo em nossa aplicação Delphi).

3.1.5. Imprimindo um Documento

Dado que o OleContainer não substituirá nossa opção de menu Arquivo pela original, da aplicação embutida, temos de implementar uma maneira de acionar o comando de impressão da aplicação. No caso do Word, uma das formas de comandar a impressão é através do pressionamento das teclas CTRL+P. Mais uma vez, vamos simular uma ação do usuário de forma que nosso documento possa ser impresso.

Para enviar uma seqüência de teclas para um componente de nossa apli-cação, ou até mesmo para outra aplicação que está rodando, podemos utilizar a função SendKeys, disponível a partir da unit SndKey32.pas, que se encontra dentro da pasta \Info\Extras\SendKeys do CD de instalação do Delphi. A sintaxe dessa função prevê como parâmetros a seqüência de teclas a ser enviada e um flag, indicando se a função deve aguardar o processamento da mensagem

referente a cada uma as teclas enviadas antes de enviar a próxima.A Figura 7 ilustra a utilização da função SendKeys para a simulação do

pressionamento da tecla de atalho do comando de impressão do Word, dessa maneira, o OleContainer exibirá a caixa de diálogo de impressão.

Figura 7 – Uso da função SendKeys para a impressão do documento.

4. OleContainer para Gravação de Documentos em Banco de Dados

O OleContainer pode ser utilizado para interfacear o armazenamento de documentos num banco de dados.

Através do uso dos métodos LoadFromStream e SaveToStream, aliados a um objeto TStream, podemos ler documentos no OleContainer a partir de um campo Blob de uma base de dados, bem como gravar documentos do OleContainer para o campo da base de dados.

5. Considerações Finais

Como pode ser visto acima, o OleContainer pode facilitar a vida do programador em muitas situações e, até mesmo, incrementar as aplicações desenvolvidas em Delphi. Um ponto, que pode ser visto por muitos como desvantagem para o uso do OleContainer é o fato de que o mesmo causará a execução do Word (ou de outra aplicação) paralelamente ao aplicativo Delphi. No entanto, o mesmo ocorreria se fosse necessário utilizar o Word como editor de textos separado da aplicação Delphi, sendo que, nesse caso, ainda teríamos o inconveniente de ficar alternando entre as duas aplicações. Dessa forma, para o usuário, trata-se de uma única aplicação rodando, uma única interface e, além do mais, se precisarmos tratar de alguma forma o conteúdo dos documentos editados no OleContainer, podemos faze-lo dire-tamente, como, por exemplo, a inclusão desse numa base de dados, como foi citado acima.

Este artigo, bem como a aplicação implementada para exemplo, limi-taram-se a demonstrar o uso do OleContainer apenas para a criação/edição de documentos do Word. No entanto, utilizando-se dos conceitos aqui abordados e dos métodos empregados para as operações com o OleContainer, pode-se utilizá-lo para a integração com outras aplicações, como, por exemplo, Corel Draw, Excel, Power Point e muitas outras.

Reginaldo Rubens da Silva.Bacharel em Ciência da Computação pela Universidade do Vale do Itajaí

– UNIVALI.Mestrando em Ciência da Computação na Universidade Federal de Santa

Catarina.Professor Substituto do Curso Técnico em Informática do Colégio Agrícola

de Camboriú (CAC/UFSC).Analista/Programador na Universidade do Vale do Itajaí.Co-Autor do Livro Métodos de Ordenação – Implementação, Análise e

Desempenho em Delphi. Editora Visual Books.

Page 16: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

business inteligent

16

Resumo - Num ambiente competitivo e de mudança cada vez mais complexo, a gestão adequada da informação assume uma importância decisiva no processo de tomada de decisão nas or-

ganizações. Com a implementação do Business Intelligence, além do avanço tecnológico, cria-se a real possibilidade de extrair de um sistema, informações relevantes que venham não só contribuir com as decisões empresariais, bem como ser um fator de excelência empresarial, permitindo novos negócios, permanência e sobrevivência num mercado atuante.

Palavras-chave: BI, CRM, OLAP, Data Mining e Data Warehouse.

1. Objetivo

Este trabalho tem por objetivo principal apresentar a importância da implementação do Business Intelligence (BI), como um dos fatores críticos de sucesso na obtenção de vantagens competitivas para as organizações.

Este artigo pretende contribuir com outros estudos de implementação do BI nas empresas.

2. Introdução

Com o advento da globalização, cada vez mais as empresas, buscam apoiar-se em sistemas de informações que possam trazer relevantes con-tribuições aos negócios. O grande desafio está em buscar tecnologias que possam de forma real, organizar operacionalmente o processo de informa-ção, centralizar dados de forma que possam ser analisados agrupadamente, e conseqüentemente encontrar nessa base de dados, ligações e possíveis informações que levarão a estabelecer estratégias de negócios em mercados ainda não explorados ou não enxergados, obtendo diferenciação e vantagens competitivas.

Obtendo vantagem competitiva com a

implementação do business inteligent

FIGURA 1VANTAGEM COMPETITIVA.

O ambiente da era da informação, tanto para as organizações do setor de produção quanto para as do setor de serviços, exige novas capacidades para assegurar o sucesso competitivo. A capacidade de mobilização e exploração dos ativos intangíveis ou invisíveis tornou-se muito mais decisiva do que investir e gerenciar ativos físicos tangíveis. Os ativos intangíveis permitem que uma empresa:

· Desenvolva relacionamentos que conservem a fidelidade dos clientes existentes e permitam que novos segmentos de clientes e áreas de mercado que sejam atendidos com eficácia e eficiência.

· Lance produtos e serviços inovadores desejados por seus clientes-alvo.

· Produza bens e serviços customizados de alta qualidade a preços baixos e com ciclos de produção mais curtos.

· Mobilize as habilidades e a motivação dos funcionários para a melhoria contínua de processos, qualidade e os tempos de resposta.

· Utilize tecnologia da informação, bancos de dados e sistemas.

Com a implementação do BI, as empresas enfrentarão o ambiente de competição com maiores possibilidades de obtenção de êxito nas suas operações, diante das possibilidades reveladas pelas informações omitidas pelo aglomerado de dados esquecidos em suas bases.

Page 17: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

business inteligent

17

3. Sistemas de Informação & Vantagem Competitiva

Segundo Laudon, um dos papéis mais importantes para os sistemas de informação tem sido a sua aplicação em problemas que se relacionam à vantagem competitiva de uma empresa. Esses sistemas são chamados de sistemas de informação estratégicos, porque concentram suas operações em resolver problemas relacionados com a prosperidade da empresa a longo prazo e sobrevivência. Tais problemas podem significar a criação de novos produtos e serviços, o estabelecimento de novas relações com clientes e fornecedores, ou a descoberta de meios mais eficientes e mais eficazes de se administrar às atividades internas da empresa.

Os sistemas de informação estratégicos fornecem informações que vão possibilitar um apoio aos processos decisórios e operacionais. Esses proces-sos, ocorrendo da forma mais consciente e correta, vão fornecer vantagem competitiva.

O objetivo desses sistemas é fornecer soluções que permitirão às em-presas derrotar e frustrar concorrentes. Embora qualquer aplicação de um sistema de informação seja “importante” no sentido que ele resolve algum problema empresarial importante, um sistema estratégico de informação é aquele que coloca a empresa em uma vantagem competitiva. Os sistemas estratégicos de impacto têm ação de grande alcance e estão profundamente arraigados; eles mudam fundamentalmente os objetivos, produtos, serviços ou relações internas e externas da empresa.

FIGURA 2ABORDAGEM SISTÊMICA NA SOLUÇÃO DE PROBLEMAS.

FIGURA 3ESTRUTURA DOS SISTEMAS DE INFORMAÇÃO.

Conforme Porter, existem 5 forças competitivas para serem analisadas:

Riscos de novos concorrentes

· Poder de barganha dos fornecedores· Poder de barganha dos compradores· Risco de produtos substitutos · Rivalidade entre empresas existentes

Ainda estabelece 3 alternativas estratégicas genéricas:

· Liderança Global de custos· Diferenciação· Enfoque

Através dos sistemas de informação estratégicos, as empresas terão as

informações que apoiarão para a tomada de decisão nos aspectos favoráveis e direcionados ao seu posicionamento estratégico adotado, obtendo assim vantagens competitivas.

Page 18: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

business inteligent

18

FIGURA 4POSICIONAMENTO ESTRATÉGICO.

4. Tipos De Vantagens Competitivas

As vantagens competitivas tornaram-se a base do pensamento estraté-gico moderno. As demais técnicas de apoio à decisão são dignas de respeito, porém devem ser relegadas a um segundo plano. É extremamente importante entender a racionalidade das vantagens competitivas, seu valor e seu uso.

Zaccarelli ainda distingue cinco tipos de vantagens competitivas (VC) e dois tipos de posições privilegiadas (PP) para o sucesso de uma organização:

· VC por ter preferência dos clientes / consumidores;· VC por custos internos relativamente baixos;· VC por custos externos relativamente baixos;· VC por ter diferenciação no negócio;· VC por ter na empresa pessoas com extraordinária capacidade de

localizar e aproveitar oportunidades de negócios;· PP por estar em um bom negócio em si;· PP por administrar invenções em monopólio temporário;

5. Sistemas Integrados de Gestão

Com o avanço da Tecnologia da Informação as empresas passaram a utilizar sistemas computacionais para suportar suas atividades. Geralmente, em cada empresa, vários sistemas foram desenvolvidos para atender aos requisitos específicos das diversas unidades de negócio, plantas, departamen-tos e escritórios. Por exemplo, o departamento de planejamento da produção utiliza um sistema próprio e o departamento de vendas utiliza outro. Dessa forma, a informação fica dividida entre diferentes sistemas.

O principal problema dessa fragmentação da informação é a dificuldade

de obtenção de informações consolidadas e a inconsistência de dados redun-dantes armazenados em mais de um sistema. Os sistemas ERP (Enterprise Resource Planning) solucionam esses problemas ao agregar, em um só sistema integrado, funcionalidades que suportam as atividades dos diversos processos de negócio das empresas.

Após a implantação do ERP, o passo seguinte é a implementação das tecnologias para inteligência empresarial, ou Business Intelligence (BI), entre elas Data Warehouse, Data Mining, CRM entre outras.

A informação é a chave para o sucesso neste novo milênio. Com ela é possível prever tendências, antecipar fatos e guiar com mais segurança as ações empresarias.

Para a implementação do BI com sucesso, faz-se necessário à utilização dos conceitos de inteligência competitiva.

6. Inteligência Competitiva

Inteligência Competitiva é um processo sistemático e poderoso para decifrar os sinais do mercado em tempo de salvar uma empresa do declínio. Este processo, ou metodologia que permitirá a uma empresa evitar pontos cegos, que conseguiriam derrubar até mesmo os gigantes do mercado.

FIGURA 5INTELIGÊNCIA DE NEGÓCIOS.

SHAPE \* MERGEFORMAT

No fluxo real da inteligência competitiva, podemos ressaltar três pontos básicos:

· A informação precisa ser pesquisada e coletada, pois nem sempre estará disponível;

· O processo de inteligência competitiva, para dar resultados precisa ser permanente e não esporádico;

· O quadro de referência competitiva evolui no tempo e, por isso,

Page 19: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

business inteligent

19

precisa ser avaliado historicamente;

Serra afirma que existem cinco fatores essenciais para o sucesso de um processo de inteligência competitiva:

· Regionalidade;· Dinamismo;· Regulamentação;· Concentração;· Integração;

E para iniciar um projeto de inteligência competitiva nas organizações, há um conjunto básico de passos a serem seguidos:

· Definir temas de interesse;· Mapear o ambiente competitivo relativo a cada tema;· Identificar as fontes de informação pertinentes;· Efetuar uma pesquisa preparatória de material básico a respeito de

cada tema, para que possa estabelecer um contexto de análise;· Definir a estratégia de coleta de informações;· Implantar a atividade de pesquisa, coleta e registro das informa-

ções;· Identificar experts para darem apoio técnico à análise;· Definir os métodos de análise que serão empregados;· Criar bases de dados de referência para cada tema;

A inteligência competitiva pode ser vista como uma pirâmide. Os quatro lados da pirâmide têm a seguinte interpretação:

· Pessoas· Processos· Informações· Tecnologia

As quatro camadas, da base para o topo, correspondem a cinco processos fundamentais da inteligência competitiva:

1. Planejamento e direção2. Pesquisa e coleta de informações3. Análise e contextualização4. Disseminação e uso5. Gestão e avaliação, que atravessa todas as outras camadas ver-

ticalmente.

Essas ferramentas disponíveis no mercado tecnológico são responsáveis pela viabilização da implementação do BI nas organizações.

7. BI

A história do Business Intelligence teve início na década de 70, quando alguns produtos de BI foram fornecidos para os analistas de negócio. O grande problema era que esses produtos exigiam intensa e exaustiva programação, não disponibilizavam informação em tempo hábil nem de forma flexível, e além de tudo tinha alto custo de implantação.

Com o surgimento dos bancos de dados relacionais, dos PC`s e das in-terfaces gráficas como Windows, aliados ao aumento de complexidade dos negócios, começaram a surgir os primeiros produtos realmente direcionados aos analistas de negócios, que possibilitavam rapidez e uma maior flexibili-dade de análise.

Características dos sistemas de BI:

· Extrair e integrar dados de múltiplas fontes;· Fazer uso da experiência;· Analisar dados contextualizados;· Trabalhar com hipóteses;· Procurar relações e causa e efeito;· Transformar os registros obtidos em informação útil para o

conhecimento empresarial.

Os sistemas de informação desenvolvidos com as tecnologias citadas respeitam as técnicas e os objetivos característicos dos sistemas de BI.

8. Arquitetura do Bi

Pode-se entender uma visão geral de uma arquitetura BI, através da figura a seguir:

FIGURA 6 ARQUITETURA DO BI.

Page 20: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

business inteligent

20

9. Tecnologias do Bi

São ferramentas / Tecnologias de BI:

Database Marketing, CRM, Data Mart, Data Warehouse, OLAP, Data Mining e Balanced scorecard.

A seguir, serão demonstradas as principais tecnologias de BI e suas definições e funcionalidades.

9.1 DATABASE MARKETING

Database Marketing é uma abordagem interativa para marketing, que usa canais e meios de comunicação de marketing.

Serve para:

· Ampliar a ajuda a um púbico-alvo da empresa;· Estimular sua demanda;· Para estar perto deles, registrando e mantendo uma memória

eletrônica de banco de dados de clientes, a fim de ajudar a melhorar todos os contatos futuros.

O Database Marketing oferece alguns tipos de vantagens competitivas:

· Mensurável = Respostas de campanhas são medidas;· Passível de ser testado = Testar eficácia de diferentes elementos

de uma abordagem;· Seletivo = Direcionar campanhas com exatidão;· Personalizar = Aumento da taxa de resposta com a personalização

com cada cliente;· Flexível = Programar novas campanhas para obter efeito no mo-

mento exato;

9.2 CRM

O Customer Relationship Management (CRM), ou gerenciamento do relacionamento com clientes, é referir-se a um conceito amplo, complexo e que ainda está em construção. Sua filosofia pode ser aplicada em todas as soluções que dizem respeito às relações empresa / cliente: Pontos de contato, Call Center, central de atendimento, canais de ofertas etc.

Os objetivos a serem alcançados com a implantação do CRM são:

“Adquirir, reter e aumentar a lucratividade por cliente”.

9.3 DATA WAREHOUSE

Um banco de dados voltado para suporte à decisão de usuários finais, derivado de diversos outros bancos de dados operacionais.

É um conjunto de tecnologias com o objetivo de converter uma grande quantidade de dados em informações utilizáveis.

É um ambiente e não um produto.

9.4 DATA MART

Os Data Marts têm escopo mais limitado e são identificados com grupos de necessidades dos usuários, o que se traduz em esforço concentrado.

Um Data Mart é um pequeno Data Warehouse que fornece suporte à decisão de um pequeno grupo de pessoas, somente para algumas áreas funcionais da empresa.

FIGURA 7

DATA MART.S. 9.5 DATA MINING

É a exploração e análise de grande quantidade de dados classificados para descobrir significativamente modelos e regras.

O Data Mining é uma tecnologia usada para revelar informação estratégica escondida em grandes massas de dados.

Um Data Mining, “garimpa” os dados revelando informações preciosas que levam a organização a obter vantagens competitivas.

9.6 OLAP

O termo OLAP (On-line Analytic Processing) refere-se ao tipo de proces-samento e ferramentas voltadas para análise de dados típica do suporte à decisão, onde os dados são apresentados por meio de uma visão multidimen-sional. Essa visão é independente de como os dados estão armazenados.

Page 21: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

business inteligent

21

HUMOR

9.7 BSC

Uma das grandes preocupações da gerência é como acompanhar e as-segurar que os objetivos de sua estratégia estão sendo alcançados. Em uma época onde a agilidade estratégica é fortemente cobrada, as dúvidas do tipo: Como garantir que a estratégia definida está correta; Como verificar se ela não precisa de correções e ajustes; são perguntas que constantemente emergem entre a camada gerencial.

O Balanced Scorecard, metodologia formulada por Kaplan e Norton, surgiu no início da década de 90 porque algumas empresas acreditavam que a utilização dos indicadores de desempenho tradicionais estava prejudicando sai capacidade em criar valor econômico para o futuro, já que esses indicadores refletiam apenas parcialmente seus objetivos estratégicos.

Os objetivos e as medidas focalizam o desempenho da organização sob quatro perspectivas:

· Financeira = Retorno financeiro para acionistas;· Clientes = geração de retorno financeiro;· Processos Internos = Criação de bons produtos e serviços;· Aprendizado e Crescimento = Melhoria contínua dos processos

internos;

Quatro etapas devem ser contempladas:

· Esclarecer e traduzir a visão estratégica.· Comunicar e associar objetivos e medidas estratégicas.· Planejar, estabelecer metas e alinhar iniciativas estratégicas.· Melhorar o feedback e o aprendizado estratégico.

As chances de sucesso de um projeto de Balanced Scorecard aumentam muito se ele estiver apoiado por um ambiente de tecnologia da informação.

Dependendo da complexidade da organização, as ferramentas de software podem desempenhar um papel decisivo na viabilização da implementação do planejamento estratégico. Em um cenário influenciado fortemente pelas transações feitas eletronicamente, a velocidade de atualização das informa-ções gerenciais que apóiam as decisões dos executivos torna-se vantagem competitiva.

10. Conclusão

Durante o século XX, aconteceram profundas mudanças nas formas de organização do trabalho e administração do negócio, e essas mudanças estão se tornando cada vez mais velozes, em conseqüência dos enormes avanços nas tecnologias de informação e da comunicação. A gestão da informação, como um dos principais fatores desse cenário de mudanças, tem sido vastamente implementada nas organizações.

Novos conceitos estão sendo utilizados, objetivando agregar valor às informações disponíveis e desenvolver bases de conhecimento nas organiza-ções. A implementação das tecnologias do Business Intelligence pesquisadas compõem os fatores críticos de sucesso para a busca de vantagem competitiva para as organizações, permitindo maior participação do mercado atuante bem como sua sobrevivência.

e-mail: [email protected]

Sobre o autorMarcelo Nogueira é bacharel em Análise de Sistemas, Mestre em

Engenharia de Produção com ênfase em Gestão da Informação, Professor Universitário, Instrutor e Desenvolvedor Delphi desde 1995.

Page 22: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas & truques

22

Page 23: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas & truques

23

RichEdit – Como pesquisar e substituir texto.

Nesta dica iremos demonstrar como pesquisar e substituir texto em um RichEdit que contenha texto formatado. A abordagem mais conhecida é através da utilização da função POS, contudo tratando-se de texto formatado ela pode falhar e não localizar a posição correta do texto e, neste caso lan-çamos mão do método FindText existente no próprio RichEdit, acompanhe o código a seguir:

// Código do botão OK.procedure TForm1.SpeedButton1Click(Sender: TObject);varFoundAt: LongInt;

StartPos, ToEnd: Integer;beginwhile FoundAt <> -1 dobeginwith RichEdit1 dobegin

if SelLength <> 0 thenStartPos := SelStart + SelLengthelseStartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(edPesquisar.Text,StartPos, ToEnd, [stWholeWord]);if FoundAt <> -1 thenbeginSetFocus;SelStart := FoundAt;SelLength :=Length(edPesquisar.Text);SelText := edTrocaPor.Text;end;end;end;end;

O projeto de exemplo referente esta dica está disponível para download em: http://files.theclub.com.br/download/RichEdit_PesqSub.zip

ShowMessage com quebra de linha

Para realizar a quebra utilize o código #13 como mostrado a seguir

procedure TForm1.Button2Click(Sender: TObject);beginShowMessage(‘THE CLUB’+#13+ ‘Seja bem vindo!’);end;

Page 24: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas & truques

24

Windows - Como verificar a versão do Windows.

Neste exemplo apresentamos uma rotina para verificar qual a versão do Windows. O que diferencia esta rotina de outras já apresentadas é que ela consegue distinguir entre todas as versões do Windows, ou seja, se é Windows 95, 98, ME, NT 4, 2000 ou XP.

function GetWinVersion: String;begincase Win32MajorVersion of 3: Result := ‘Windows NT 3.51’; // NT 3.514: // WIn9x/ME, NT 4case Win32MinorVersion of0: Result := ‘Windows 95’;10: Result := ‘Windows 98’;90: Result := ‘Windows ME’;elseif (Win32Platform and VER_PLATFORM_WIN32_NT) <> 0 thenResult := ‘Windows NT 4.0’elseResult := ‘SO desconhecido’;end;5: // Win2K, XPcase Win32MinorVersion of0: Result := ‘Windows 2000’;1: Result := ‘Windows XP or .NET server’;elseResult := ‘SO desconhecido’;end;elseResult := ‘SO desconhecido’;end;

end;// Chamada:{ mostrar em um label }OSVersion.Caption := GetWinVersion;

Retornando pastas compartilhadas de todas as máquinas na rede

{ Procedure que irá percorrer as máquinas da rede e retornar compartilhamento

}procedure GetNetworkedDrives( strings: TStrings);

procedure EnumNetworkDrives( pnr : PNetResource);varhEnum: THandle;i, enumRes, count, BufferSize: DWORD;buffer: pointer;beginBufferSize := $4000; { buffer de 16kb }buffer := nil; { para garantir alocação de memória.}if WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK, 0, pnr, hEnum) =ERROR_SUCCESS thentryGetMem(buffer, BufferSize);while true do

begincount := dword(-1); { pega todos osítens possíveis.}enumRes := WNetEnumResource(hEnum, count, buffer, BufferSize);

{caso ocorra algum problema,cancela.}if (enumRes <> ERROR_SUCCESS) thenbreak;pnr := buffer; { reutiliza o ponteiro. }for i := 1 to count dobeginif (pnr.dwDisplayType =RESOURCEDISPLAYTYPE_DOMAIN orRESOURCEDISPLAYTYPE_SERVER) and(pnr.dwType = RESOURCETYPE_DISK) thenstrings.Add(pnr.lpRemoteName);{ chamada recursiva da função. }if (pnr.dwUsage andRESOURCEUSAGE_CONTAINER) > 0 thenEnumNetworkDrives(pnr);inc(longint(pnr),sizeof(TNetResource));end;end;finallyFreeMem(buffer);WNetCloseEnum(hEnum);end;end;

Page 25: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas e truques

25

beginif strings = nil thenexit;EnumNetworkDrives(nil);end;Para utilizar a procedure, adicione um componente Button e um componente ListBox e faça a chamada assim:procedure TForm1.Button1Click(Sender: TObject);beginGetNetworkedDrives(ListBox1.Items);

end;

Alterando as propriedades de vários componentes TEdits de um Form simultaneamente

var i : integer;begin for i := 0 to ComponentCount -1 do begin if Components[i] is TEdit then begin TEdit(Components[i]).Enabled := True; TEdit(Components[i]).Color :=clWindow; end; end;end;

Como procurar arquivos com determinado conteúdo

Neste exemplo iremos implementar um sistema de busca de arquivos semelhante a ferramenta ‘Procurar’ do Windows Explorer, com a possibilidade de informar máscara para o tipo de arquivo (Ex: *.PAS) e também, arquivos que contenham um determinado texto. Crie um novo projeto e adicione 3 componentes Edit (edTipo, edTexto e edLocal), 4 componentes Label (‘Tipo de arquivo’, ‘Que contenham o texto’, ‘Localização’ e ‘Resultado’), 2 compo-nentes Button (btLocalizar = ‘Localizar’ e btCancelar = ‘Cancelar’), 1 compo-nente SpeedButton (sbtnLocal = ‘?’), um componente ListBox (lbArquivos) e 1 componente Animate (Animate1). Na figura 1 sugerimos um layout para

este formulário.

Figura 1.

Antes de partirmos para os procedimentos, declare uma variável que será utilizada para cancelarmos o processamento através do botão ‘Cancelar’:

var Form1: TForm1; Canc: Boolean; implementation {$R *.dfm}

Agora, vamos partir para implementação dos procedimentos responsáveis em localizar os arquivos e pesquisar o texto dentro dos mesmo. Nossa primeira função será a ‘ScanFile’ que irá receber como parâmetro o nome do arquivo, o texto à ser procurado e finalmente um parâmetro lógico informando se a busca será sensitiva (caixa alta/baixa) ou não, veja a listagem 1.

function ScanFile(const FileName: string; const forString: string; caseSensitive: Boolean): Longint;{ retorna a posição da substring na string ou -1 caso não encontre }const BufferSize = $8001; { 32K+1 bytes }var pBuf, pEnd, pScan, pPos: PChar; filesize: LongInt; bytesRemaining: LongInt;

Page 26: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas e truques

26

bytesToRead: Integer; F: file; SearchFor: PChar; oldMode: Word;begin Result := -1; { assume falha. } if (Length(forString) = 0) or (Length(FileName) = 0) then Exit; SearchFor := nil; pBuf := nil; { abre o arquivo como binário } AssignFile(F, FileName); oldMode := FileMode; FileMode := 0; { acesso somente leitura } Reset(F, 1); FileMode := oldMode; try { aloca memória para o buffer } SearchFor := StrAlloc(Length(forString) + 1); StrPCopy(SearchFor, forString); if not caseSensitive then { converte para uppercase } AnsiUpper(SearchFor); GetMem(pBuf, BufferSize); filesize := System.Filesize(F); bytesRemaining := filesize; pPos := nil; while bytesRemaining > 0 do begin if bytesRemaining >= BufferSize then bytesToRead := Pred(BufferSize) else bytesToRead := bytesRemaining; BlockRead(F, pBuf^, bytesToRead, bytesToRead); pEnd := @pBuf[bytesToRead]; pEnd^ := #0; pScan := pBuf; while pScan < pEnd do begin if not caseSensitive then { converte para maiucula } AnsiUpper(pScan); pPos := StrPos(pScan, SearchFor); { procura a substring } if pPos <> nil then begin { Achou! } Result := FileSize - bytesRe

maining + Longint(pPos) - Longint(pBuf); Break; end; pScan := StrEnd(pScan); Inc(pScan); end; if pPos <> nil then Break; bytesRemaining := bytesRemaining - bytesToRead; if bytesRemaining > 0 then begin Seek(F, FilePos(F) - Length(forString)); bytesRemaining := bytesRemaining + Length(forString); end; end; { While } finally CloseFile(F); if SearchFor <> nil then StrDispose(SearchFor); if pBuf <> nil then FreeMem(pBuf, BufferSize); end;end; { ScanFile }

Listagem 1 – Função para pesquisar texto em arquivos.

Nosso próximo procedimento será o responsável em buscar os arquivos em um path informando como parâmetro. Os parâmetros deste procedi-mento serão a máscara para filtrar o tipo de arquivo, a lista (TStrings) onde o resultado será adicionado e o texto à ser procurado nos arquivos, acompanha a listagem 2.

procedure GetAllFiles(mask: string; Lista: TStrings; ToSearch: string);var search: TSearchRec; directory: string;begin directory := ExtractFilePath(mask); // procura arquivos. if FindFirst(mask, $23, search) = 0 then

Page 27: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas e truques

27

begin repeat // adiciona na lista. if ScanFile(directory + search.Name, ToSearch, false) >= 0 then Lista.Add(directory + search.Name); Application.ProcessMessages; if Canc then Break; until FindNext(search) <> 0; end; // Sub-Pastas. if FindFirst(directory + ‘*.*’, faDirectory, search) = 0 then begin repeat if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> ‘.’) then GetAllFiles(directory + search.Name + ‘\’ + ExtractFileName(mask), Lista, ToSearch); Application.ProcessMessages; if Canc then Break; until FindNext(search) <> 0; FindClose(search); end;end;

Listagem 2.

Vamos agora codificar o evento OnClick do botão ‘Confirma’, veja a listagem 3.

procedure TForm1.btnLocalizarClick(Sender: TObject);var directory, mask, ToSearch: string;begin Canc := false; lbArquivos.Items.Clear; directory := IncludeTrailingBackslash(edLocal.Text); mask := edTipo.Text;

ToSearch := edTexto.Text; Animate1.Visible := true; btnLocalizar.Enabled := false; btnCancelar.Enabled := true; try GetAllFiles(directory + mask, lbArquivos.Items, ToSearch); finally Animate1.Visible := false; btnLocalizar.Enabled := true; btnCancelar.Enabled := false; end; ShowMessage(IntToStr(lbArquivos.Items.Count) + ‘ arquivos encontrados!’);end;

Listagem 3 – Evento OnClick do botão Confirma.

Neste momento, nosso projeto já está funcionando e efetua a busca de arquivos que contenham determinado texto. Prosseguindo, vamos codi-ficar o botão sbtnLocal através do qual chamaremos uma caixa padrão do Windows para o usuário selecionar o path onde será efetuada a busca, veja a listagem 4.

procedure TForm1.sbtnLocalClick(Sender: TObject);var s: string;begin if SelectDirectory(‘Localização’, ‘’, s) then edLocal.Text := s;end;

Listagem 4 – Botão para selecionar path.

OBS. Declare a unit FileCtrl na lista uses para poder utilizar ‘SelectDirectory’.

E por fim, adicione o código para o botão ‘Cancelar’:

procedure TForm1.btnCancelarClick(Sender: TObject);begin Canc := true;end;

Page 28: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas e truques

28

Rodando a aplicação, você terá um resultado parecido com a figura 2.

Figura 2 – Aplicação em execução.

Download: http://files.theclub.com.br/downloads/ProcuraArquivos.zip

Windows – Verificar FAT32 ou NTFS

Esta dica demonstra como verificar se uma partição (unidade de disco) está utilizando sistema de arquivos FAT32 ou NTFS.

function GetHardDiskPartitionType(const DriveLetter: Char): string;// FAT// NTFSvarNotUsed: DWORD;VolumeFlags: DWORD;VolumeInfo: array[0..MAX_PATH] of Char;VolumeSerialNumber: DWORD;PartitionType: array[0..32] of Char;beginGetVolumeInformation(PChar(DriveLetter + ‘:\’), nil, SizeOf(VolumeInfo),@VolumeSerialNumber, NotUsed,VolumeFlags, PartitionType, 32);Result := PartitionType;end;// Exemplo de chamada:procedure TForm1.Button1Click(Sender:

TObject);beginShowMessage(GetHardDiskPartitionType(‘c’));ShowMessage(GetHardDiskPartitionType(‘d’));end;

Removendo as barras de rolagem vertical e horizontal em um componente DBGrid

Existem duas formas de se fazer isto. Na primeira podemos desligar a barra de rolagem do DBGrid através do evento onDrawColumnCell, mas pode ser que não fique perfeito. Pode ser que fique piscando a barra de ro-lagem no DBGrid. Se não quiser assim crie um novo componente e redefina a procedure Paint.

// Aqui é a primeira solução onde des-ligamos// no evento OnDrawColumnCellprocedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);begin SetScrollRange(TDBGrid(Sender).Handle,SB_VERT, 0, 0, False);end;

Agora a segunda solução é deve criando um método Paint exatamente igual ao do componente pai (o DBGrid), ou seja um método paint com a clausula override. Este método paint, vai chamar um outro método SetScroll-Range da API para pegar o valor máximo e o valor mínimo do scroll e passar ele para zero, desabilitando o scrollbar, e depois, chamar o método paint ascendente. O código abaixo faz isso para você.

unit NovaGrid;interfaceuses WinTypes, WinProcs, Classes, DBGrids;type TDBGridSemRolagem = class(TDBGrid) protected

Page 29: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas e truques

29

procedure Paint; override; end;procedure Register;implementationprocedure TDBGridSemRolagem.Paint;begin SetScrollRange(Self.Handle, SB_VERT, 0,0, False); inherited Paint;end;procedure Register;begin RegisterComponents(‘Data Controls’,[DBGridSemRolagem]);end;end.

Veja como chamar um site utilizando o seu browser padrão.

Para testar o exemplo abaixo inclua no seu form um componente Button e inclua o código abaixo no evento OnClick do componente Button.

implementation uses UrlMon;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);beginHlinkNavigateString(nil,’http://www.theclub.com.br’);end;

Compreendendo a cláusula WITH LOCK

Como o engine considera, por sua vez, cada registro contido numa instrução de lock explícito, então ou ele retorna a versão do registro que foi mais recente comitada, independentemente do estado da base de dados quando a declaração foi submetida, ou retorna uma exceção. O comporta-mento de espera e os conflitos reportados dependerão dos parâmetros da transação especificados no bloco TPB.

Quando uma declaração de UPDATE passar por um registro que esteja

bloqueado por outra transação, ou uma exceção de conflito de update é apre-sentada ou ela espera que a transação que possui o bloqueio seja finalizada, dependendo do modo TPB. O Comportamento do engine é o mesmo como se este registro já tivesse sido modificado pela transação que estabeleceu o bloqueio.

O engine garante que todos os registros visíveis por uma instrução de lock explícito estão realmente bloqueados e satisfazem as condições de pesquisa especificadas na clausula de WHERE, desde que a condição de pesquisa não dependa de outras tabelas, via joins, subqueries, etc. Ainda garante que os registros que não satisfazem a condição de pesquisa do WHERE não serão bloqueados pela instrução. Porém, não pode garantir que não existam registros que, embora satisfaçam as condições de pesquisa do WHERE, não estejam bloqueados.

Esta situação pode acontecer se alguma outra transação paralela comitar suas alterações durante a execução das instruções de lock.

O engine trava os registros no momento que são descarregados ( fetch ). Isto tem conseqüências importantes se você travar vários registros de uma só vez. Muitos métodos de acesso ao Firebird utilizam pacotes para descarregar alguns registros de cada vez (“buffered fetches”). Grande parte dos compo-nentes de acesso aos dados não poderão devolver os registros contidos no último pacote descarregado, onde o erro ocorreu.

A cláusula FOR UPDATE estabelece um método para prevenir a utilização de “buffered fetches”, opcionalmente com o OF <nome-das-colunas> para ativar updates posicionados. Como alternativa, isto pode ser possível nos seus

Page 30: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...

dicas e truques

30

componentes de acesso configurados com o tamanho do buffer de “fetch” para 1. Isto lhe permitirá o processamento do registro corrente que está travado antes que o próximo registro seja descarregado e travado, ou para controlar erros sem a necessidade de executar o rollback da transação.

O Rollback de um savepoint implícito ou explícito libera os registros travados que tenham sido adquiridos nesse savepoint, mas isto não notifica outras transações que estejam aguardando. A aplicação não deve tirar uso deste comportamento, pois é provável que seja modificado no futuro.

Embora os locks explícitos possam ser utilizados para prevenir e/ou controlar erros pouco comuns de conflitos de updates, o volume de erros de deadlock irá aumentar a menos que se tenha uma estratégia cuidadosa e que a controle rigorosamente.

A maioria das aplicações não necessitará de locks explícitos. O objetivo principal dos locks explícitos é:

. Prevenir o controle de erros de conflito de update em aplicações pesadas

. Manter a integridade de objetos mapeados para uma base de dados relacional em ambientes de clusters.

Se usar o lock explícito fora destas duas categorias, então é a forma errada de executar esse serviço no Firebird.

O lock explícito é uma funcionalidade avançada, não a use inconsciente-mente! Embora estes casos sejam preciosos para web sites que controlam milhares de escritas concorrentes, ou para aplicações ERP/CRM utilizadas em grandes empresas, a maior parte das aplicações não necessitam de trabalhar nestas condições.

Desabilitar o botão fechar o form

O exemplo abaixo irá desabilitar o botão fechar do Bloco de Notas do Windows. Antes de testar este exemplo chame o Bloco de Notas do Windows. Abra um projeto em Delphi e inclua um componente Button. Inclua o código abaixo no evento OnClick do componente Button.

// Evento OnClick do componente Tableprocedure TForm1.Button1Click(Sender: TObject);varhwndHandle : THANDLE;hMenuHandle : HMENU;beginhwndHandle := FindWindow(nil,‘Sem título - Bloco de Notas’);if (hwndHandle <> 0) thenbeginhMenuHandle := GetSystemMenu(hwndHandle, FALSE);if (hMenuHandle <> 0) thenDeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);end;end;

Verificar se um programa já está aberto

Estas alterações devem ser feitas no arquivo .DPR da sua aplicação. Para isto vá até o menu do Delphi em Project | View Source.

program Project1;usesForms,// Declare a unit WindowsWindows,Unit1 in ‘Unit1.pas’ {Form1};{$R *.res}// Declarar a variávelvarHwnd : THandle;begin// FindWindow vai procurar pela classe// TApplication que tenha o nome do titulo // que você configurouHwnd := FindWindow(‘TApplication’, ‘Teste’);// se o Handle for 0 significa que//não foi encontradoif Hwnd = 0 thenbeginApplication.Initialize;// Esta linha e’ colocada //automaticamente pelo Delphi// ao se configurar o TitleApplication.Title := ‘Teste’;Application.CreateForm(TForm1, Form1);Application.Run;endelse// Esta funcao traz para frente// (da o foco) para a janela// da aplicacao que ja esta rodandoSetForegroundWindow(Hwnd);end.

Page 31: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...
Page 32: Editorial - O maior clube de programadores do Brasil! · PDF filevantagens e desvantagens sobre as interfaces gráficas como a do Windows. ... Seja a instância para CMMi como a ...