terça-feira, 11 de dezembro de 2007

Resolvendo o erro "No metadata could be loaded from: BD" no RAD Studio 2007

Existe um erro ocorrendo em algumas máquinas no RAD Studio 2007. O erro é o seguinte. Na primeira vez que tentamos acessar o Data Explorer, aparece: "Object reference not set to an instance of an object". Após isso, podemos reparar que os drivers referentes ao Ado.Net não foram carregados.

Tentando configurar uma nova conexão no dbExpress, podemos verificar que a configuração ocorreu com sucesso, após clicarmos no botão "Test Connection", mas quando tentamos acessar as tabelas ou quaisquer metadados daquele banco de dados previamente configurado, aparece o erro: "No metadata could be loaded from: BD", onde BD substituímos pelo banco de dados em questão, seja, MySQL, Interbase, ou outro banco configurado.

Para resolvermos esse erro, devemos, no diretório Bin do RAD Studio 2007, geralmente, C:\Arquivos de programas\CodeGear\RAD Studio\5.0\bin, renomear o arquivo DataExplore.exe.config para DataExplore.exe.config.old, e renomearmos DataExplore.exe.config.backup para DataExplore.exe.config.

Basta reiniciar o RAD Studio 2007 e os dois erros estarão resolvidos.

Abraços

Giordano Kostcoski - Borland Instructor Certified
(giordano@tdstecnologia.com.br / giordanocwb@yahoo.com.br)
Instrutor TDS Tecnologia - Curitiba/PR

sexta-feira, 7 de dezembro de 2007

Microsoft Windows completa 22 anos

No dia 20 de novembro, o MS-Windows completou 22 anos, assista a uma retrospectiva um tanto quanto nostálgica sobre todas as versões do Windows.





No mínimo curioso!!!

Abraços

Giordano Kostcoski - Borland Instructor Certified
(giordano@tdstecnologia.com.br / giordanocwb@yahoo.com.br)
Instrutor TDS Tecnologia - Curitiba/PR

sexta-feira, 30 de novembro de 2007

Palestras da BorCon 2007

Pessoal, já estão disponíveis para download as palestras da Borland Conference 2007 (BorCon 2007) que aconteceu agora no final de outubro em São Paulo.

O link para as palestras é: http://dn.codegear.com/br/article/37375

Tivemos várias palestras muito interessantes sobre várias ferramentas da Borland e da CodeGear, principalmente sobre o RAD Studio 2007.

Dentre os destaques, o próprio RAD Studio 2007 e palestras sobre a nova ferramenta da CodeGear, o 3rd Rail, que proporciona uma IDE para os programadores de Ruby, linguagem para desenvolver softwares para internet.

Também tivemos palestras sobre Asp.Net 2.0, .Net Framework 3.0, C++ Builder, Delphi for PHP, Interbase, JBuilder e o ALM.

Vale a pena dar uma olhada nas palestras.

Abraços

Giordano Kostcoski - Borland Instructor Certified
(giordano@tdstecnologia.com.br / giordanocwb@yahoo.com.br)
Instrutor TDS Tecnologia - Curitiba/PR

quinta-feira, 29 de novembro de 2007

Soma Condicional no Rave Reports

Nesse artigo vou demonstrar como se faz uma soma condicional no Rave Reports. Na verdade, podemos fazer qualquer cálculo, mas o mais comum em um relatório é realmente o somatório de um campo.

Nesse caso, vou fazer o somatório de um campo, baseado no valor de outro campo. Por exemplo, quero fazer o somatório dos valores que já foram pagos e dos valores que ainda não foram pagos, onde terei uma coluna chamada “PAID” que terá valor “y” (pagos) ou “n” (não pagos).

Outro exemplo prático para esse artigo, poderia ser o somatório de faturas baixadas, faturas em aberto e faturas em atraso. Bom, na verdade, temos vários exemplos práticos para esse modelo de relatório.

Infelizmente não podemos fazer isso diretamente usando componentes do Rave, de uma maneira simples.

Inicialmente, preciso de um banco de dados para fazer meu relatório. Eu vou utilizar o banco de dados “EMPLOYEE.GDB” que acompanha o Delphi há algum tempo. Ele está localizado em “C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data” para o Delphi 2006, 2005 ou 7, ou no caso do RAD Studio 2007 está localizado em “C:\Arquivos de programas\Arquivos comuns\CodeGear Shared\Data”.

Na minha aplicação eu vou utilizar o dbExpress, e farei um relatório mestre-detalhe, usando a prática de Nested DataSets (DataSets aninhados) para fazer esse relacionamento. Não vou entrar em detalhes de como será feito o relacionamento, pois o foco do artigo é no Rave Reports.

Vamos à aplicação em si. Crie um novo projeto através do menu File | New | VCL Forms Application.

Defina o nome do formulário principal como “frmPrincipal” e salve a unit do como “uPrincipal.pas” e o projeto como “ProjetoRaveSomaCondicional.dpr”.

Insera um componente TSQLConnection, o renomeie para “conexao” e o aponte para o banco EMPLOYEE.GDB.

Coloque os seguintes componentes, nessa ordem e configure as seguintes propriedades:


Após a configuração do cdsClientes, adicionaremos todos os campos nele, clicando duas vezes no componente e abrindo o Fields Editor, após isso, acionamos o menu de contexto com o botão direito, e selecionamos “Add all fields” ou Ctrl + F. Repare na lista de campos, que o último campo deve ser do tipo TDataSetField, ou seja, um campo que contém um dataset, com o nome “sqlDsVendas”. Se ele não aparecer, repita o processo.

Na seqüência vamos configurar mais alguns componentes.


A tela deverá estar configurada semelhante a da figura abaixo.


Vamos partir para o relatório agora. Com um duplo-clique no RvProject abriremos o Rave Reports Designer.

Selecione o menu File | New para criar um novo relatório, salvaremos o arquivo gerado como “RelatorioCondicional.rav”, salvando-o no mesmo diretório da aplicação.
Devemos agora criar os Data Views dentro do relatório importando os campos dos ClientDataSets configurados na nossa aplicação através dos RvDataSetConnections, para isso, selecione o menu File | New Data Object e selecione a opção Direct Data View, e selecione primeiro o RvDataSetClientes. Repita o processo para a criação do Data View e selecione depois o RvDataSetVendas.

Foram criados dois DataViews no Project Tree, vamos renomeá-los para dvClientes e dvVendas, respectivamente, como na figura abaixo.


A parte inicial do relatório, nós faremos com o Wizard, pois não é tema do artigo, como gerar um relatório desde o início. Para isso acesse o menu Tools | Report Wizards | Master/Detail Report.

O assistente irá nos guiar para a criação básica do relatório. Na primeira tela, ele pergunta qual o DataView Mestre, selecione dvClientes. Na segunta tela, pergunta qual o DataView Detalhe, seleciona dvVendas.
Na seqüência, quais os campos do dvClientes que queremos no relatório, selecione CUSTOMER e CITY. Na tela seguinte, ele especifica a ordem de impressão das colunas, deixe o padrão. Ele também pergunta, quais os campos do dvVendas que queremos no relatório, selecione PO_NUMBER, PAID e TOTAL_VALUE. E também deixe os campos na ordem padrão. Após isso, ele pede qual o relacionamento entre os dois DataViews, selecione CUST_NO nos dois DataViews e pressione Next. Na penúltima tela, informe o título do relatório como: “Relatório de Vendas por Cliente”, e finalmente na última tela, somente diminua um pouco os fontes para que o relatório não fique encavalado. Repare na figura abaixo, que mesmo diminuindo a fonte, o relatório fica um pouco encavalado nos campos PAID e TOTAL_VALUE. Dê uma ajustada para que o relatório fique mais apresentável.


Se pressionarmos F9, ou no menu File | Execute Report, poderemos testar a pré-visualização do nosso relatório.

Vamos colocar uma formatação no campo TOTAL_VALUE, para isso, vá no Project Tree, expanda Data View Dictionary e expanda dvVendas. Agora em dvVendasTOTAL_VALUE, configure a propriedade DisplayFormat como “R$ #,##0.00”.

Bem, agora vamos para a parte principal do nosso artigo, montar o rodapé de cada cliente, mostrando o total de vendas pagas e de vendas não pagas. Para isso, vamos incluir uma Band no nosso relatório dentro da Region.
Vamos configurar a propriedade ControllerBand para dvVendasDataBand e em BandStyles vamos deixar ela como rodapé, marcando a opção “Body Footer”. Vamos aumentar um pouco a Band deixando a propriedade Height com “0,700”.

Dentro dessa Band, vamos inserir um componente CalcText, para fazer o somatório de todas as vendas, não importando se as vendas estão pagas ou não, configurando-o da seguinte forma: DataView=dvVendas, DataField=TOTAL_VALUE, Controller=dvVendasDataBand, DisplayFormat=R$ #,##0.00

Colocaremos também um Text antes do CalcText, para indicar a totalização com a propriedade Text sendo “TOTAL DE VENDAS:”. O relatório deve se parecer com o da figura abaixo.


Como não temos uma maneira simples de fazer um somatório condicional através de um componente, como fizemos com o CalcText, vamos fazê-lo utilizando o recurso de parâmetros e Rave Language, que é a linguagem de programação do Rave.

Vamos mudar o nome do nosso relatório no Project Tree, expandindo a opção Report Tree e mudando no Report2 a propriedade Name para “rptVendasPorCliente” e FullName para “Relatório de Vendas por Cliente”.

Com o relatório selecionado no Project Tree, vamos criar dois novos parâmetros para esse relatório, na propriedade Parameters, configure-a como na figura abaixo.


A cada impressão de um novo cliente devemos zerar VENDAS_PAGAS e VENDAS_NAO_PAGAS. Para isso usaremos Rave Language, selecionando a dvClientesDataBand e clicando na aba Event Editor, ao lado da aba Page Designer, como mostrado no círculo vermelho na figura abaixo.


Após termos entrado no editor de eventos, vamos selecionar no combobox “Available Events” o evento “OnAfterPrint”. Criando logo abaixo um cabeçalho para que possamos digitar o nosso código para o evento.

Após o begin, vamos digitar o seguinte código:


Esse código faz com que passamos o valor “0” (zero) para cada parâmetro.

Após isso, devemos clicar no botão Compile para compilarmos o evento. Sempre após a criação de um evento, compile-o para correta utilização. Se a compilação estiver correta ele irá mostrar uma mensagem “Compile finished”, na mesma barra do botão Compile, no canto direito, senão, no mesmo lugar, mostrará uma mensagem em vermelho, indicando o erro.

Agora, voltamos ao Page Designer, clicando na aba de mesmo nome, ao lado da aba Event Editor.

Selecionaremos o componente dvVendasDataBand, e voltaremos ao Event Editor, selecionando o evento “OnAfterPrint” e inserindo o seguinte código:


Repare que a codificação por mais que seja parecida com Pascal, tem algumas diferenças, por exemplo, antes do elseif, temos “;” (ponto-e-vírgula). Também o “end” para fechar o “if” não é um simples “end” e sim é um “end if”. Tome cuidado com esse tipo de sintaxe.

Após a codificação, compile o código.

Pronto, os parâmetros foram definidos, os valores corretos foram assinalados para os parâmetros, agora falta somente imprimir os parâmetros. Para isso, vamos incluir dois DataTexts na banda de rodapé, e na propriedade DataField deles, ao invés de selecionarmos um campo de um DataView, vamos imprimir o valor de um parâmetro, clicando no botão “...” ao invés de abrir o combobox para mostrar todos os campos disponíveis. Ao clicar no botão “...”, irá abrir o Data Text Editor. Selecione o parâmetro, como na figura abaixo e clique no botão “Insert Parameter”, ao fazer isso, será colocado no campo “Data Text” o valor “Param.VENDAS_PAGAS”, clique em OK. Repita o processo para o parâmetro VENDAS_NAO_PAGAS.



Para finalizar coloque dois componentes Texts antes dos DataTexts para descrever os totais. O relatório se parecerá como o da figura abaixo.



Podemos perceber que faltou a formatação do valor na impressão das vendas pagas e não pagas. Porém, o nosso componente DataText não tem a propriedade DisplayFormat, faremos isso através de Rave Language, selecionamos o DataText de Vendas Pagas, e vamos adicionar código ao evento “OnGetText”, pois é a última chance de transformarmos o texto antes de ser impresso. Usaremos o parâmetro por referência “Value” que nos traz o texto a ser impresso, e se atribuirmos um novo valor a “Value” podemos modificar o texto. Então adicionaremos o seguinte código:


Não esqueça de compiler o evento. Faça a mesma coisa para o DataText de Vendas Não Pagas.

Nosso relatório está pronto, agora salve o relatório e feche o Rave Reports Designer. Para finalizar basta adicionarmos código ao botão Imprimir do nosso projeto, e adicionarmos referência ao nosso projeto de relatórios .rav.

No evento OnCreate do nosso formulário vamos adicionar o código:


No evento OnClick do botão IMPRIMIR vamos adicionar:


Pronto, está terminado nosso relatório com soma condicional por grupos.

Se quisermos adicionar um somatório total do relatório, basta seguir basicamente os mesmos passos, criando mais dois parâmetros, porém, não o zeramos a cada cliente.

Espero que vocês tenham gostado desse artigo. Para fazer o download do exemplo, basta clicar aqui.

Abraços

Giordano Kostcoski - Borland Instructor Certified
(giordano@tdstecnologia.com.br / giordanocwb@yahoo.com.br)
Instrutor TDS Tecnologia - Curitiba/PR

quarta-feira, 28 de novembro de 2007

Inédito e Gratuito - Delphi Day em Português

No dia 7 de dezembro, sexta-feira, será lançado pela primeira vez o Delphi Day da CodeGear em português. Será 1 dia inteiro com 8 apresentações, todas on-line, enfatizando o RAD Studio 2007 e seus novos recursos.

Atenção para a oportunidade, o evento será totalmente GRATUITO! Para se inscrever basta acessar o link http://dn.codegear.com/br/article/37399

A abertura das palestras terá início às 9:30h, com a presença de David Intersimone e Andreano Lanusse da CodeGear.

Na seqüência (10:00h) teremos as palestras com os seguintes temas:

- As principais razões para migrar de Delphi 7 para RAD Studio 2007
- Generics em RAD Studio 2007
- Utilizando dbExpress 4 Framework
- Blackfish SQL sem limites para stored procedures e triggers em Delphi
- Desenvolvendo Aplicações WEB com ASP.NET, AJAX e RAD Studio 2007
- Melhorando a qualidade de suas aplicações em Delphi
- ECO IV e RAD Studio 2007

Pessoal, aproveitem essa oportunidade.

Abraços

Giordano Kostcoski - Borland Instructor Certified
(giordano@tdstecnologia.com.br / giordanocwb@yahoo.com.br)
Instrutor TDS Tecnologia - Curitiba/PR