Olá Amigos do The Club, sumário



Documentos relacionados
Procedimentos para Reinstalação do Sisloc

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES I PROFESSOR RAFAEL BARRETO

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Noções de. Microsoft SQL Server. Microsoft SQL Server

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS

Inserindo Dados no Banco de Dados Paradox.

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

ÍNDICE... 2 INTRODUÇÃO... 4

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

Procedimentos para Instalação do Sisloc

Data Transformation Services (DTS) por Anderson Ferreira Souza

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Sistema básico de cadastro em Delphi com banco de dados InterBase.

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Manual de Instalação e Configuração do SQL Express

Como Gerar documento em PDF com várias Imagens

Manual de Utilização COPAMAIL. Zimbra Versão 8.0.2

Lição 1 - Criação de campos calculados em consultas

CRIAÇÃO DE RELATÓRIOS EM DELPHI

Apostila Site Personalizado

Manual Captura S_Line

Acessando um Banco de Dados

Modo Estrutura é o ambiente de definição e estruturação dos campos, tipos de dados, descrição e propriedades do campo.

CRIANDO TEMPLATES E LEGENDAS

CRIANDO UM BANCO DE DADOS

Tutorial do ADD Analisador de Dados Dinâmico.

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Revisão: - 1 Desinstalando Versões Anteriores

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS

Dicas para usar melhor o Word 2007

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

MANUAL DE INSTALAÇÃO DO ODONTO TECHNOLOGY

Veja abaixo um exemplo de como os dados são mostrados quando usamos o

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

NewAgent enterprise-brain

MANUAL DE NAVEGAÇÃO DO MILLENNIUM BUSINESS

TUTORIAL: MANTENDO O BANCO DE DADOS DE SEU SITE DENTRO DO DOMÍNIO DA USP USANDO O SSH!

Backup dos Trabalhos e Configurações

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

MANUAL DO ANIMAIL Terti Software

Upload e Download de Arquivos. Ao programador Morfik, cabe implementar em sua aplicação os mecanismos gerenciem todo o processo acima.

Manual do Painel Administrativo

LIBERAÇÃO DA PASTA ARQUIVOS DE PROGRAMA

STK (Start Kit DARUMA) Driver Genérico Somente Texto para a impressora DR700 ETHERNET

Manual de usuário. do sistema multicálculo CotakWeb

Podemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto :

CONFIGURAÇÃO MINIMA EXIGIDA:

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Conteúdo O que é?... 4 Histórico... 4 Onde Baixar?... 4 Diferença entre Firebird e o Interbase... 4 Como instalar?... 4 Instalando o Ibexpert...

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

Microsoft Access: Criar relatórios para um novo banco de dados. Vitor Valerio de Souza Campos

Manual de Atualização Versão

Portaria Express 3.0

Manual do Google agenda. criação e compartilhamento de agendas

Procedimentos para Instalação do SISLOC

Introdução. Servidor de Tempo (SNTP) com opção de horário de verão automático; 1 Cadastro do novo modelo de equipamento Urano Topmax SS

Microsoft Office Outlook Web Access ABYARAIMOVEIS.COM.BR

NetEye Guia de Instalação

Manual Equipamento ST10 Flasher Rev. 1

Como funciona? SUMÁRIO

Manual do Instar Mail v2.0

Configurando DDNS no Stand Alone

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Apresentação Prática

TUTORIAL DO ALUNO. Olá, bem vindo à plataforma de cursos a distância da Uniapae!!!

Guia de Início Rápido

Instalando software MÉDICO Online no servidor

COMPARTILHAMENTO DO DISCO E PERMISSÕES DE REDE PÚBLICAS E DE GRUPOS DE TRABALHO.

Operador de Computador. Informática Básica

INSTALAÇÃO DO MICROSOFT WINDOWS SHAREPOINT SERVICES 2.0

Google Drive. Passos. Configurando o Google Drive

Manual do Visualizador NF e KEY BEST

Atualizaça o do Maker

Lazarus pelo SVN Linux/Windows

Manual de Administração DPS Printer 2.1 NDDigital S/A - Software

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

Sumário. Capítulo 2 Iniciando o TR Como efetuar o login... 8

NetBeans. Conhecendo um pouco da IDE

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

Instalando o Internet Information Services no Windows XP

Banco de Dados BrOffice Base

INTRODUÇÃO À TECNOLOGIA SERVLETS

Resumo da Matéria de Linguagem de Programação. Linguagem C

Scriptlets e Formulários

Delphi 7 Aula 01 Área do Triângulo

Manual de Gerenciamento de Conteúdo

Google Drive: Acesse e organize seus arquivos

MANUAL DE CONFIGURAÇÃO DO BACKUP

Configurações de Templates no SolidWorks 2011

Manual de operação. BS Ponto Versão 5.1

Tutorial WEB CONTENT MANAGEMENT [WCM] Obtenha benefícios a partir das aplicações customizadas da ADMT.

Transcrição:

editorial Editorial THE CLUB Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP 18.707-150 Informações: (14) 3732-3689 Suporte: (14) 3733-1588 - Fax: (14) 3732-0987 Internet http://www.theclub.com.br Cadastro: cadastro@theclub.com.br Suporte: suporte@theclub.com.br Informações: info@theclub.com.br Dúvidas Correspondência ou fax com dúvidas devem ser enviados ao - THE CLUB, indicando Suporte. Opinião Se 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ção A 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-000 Rua Francisca A. Pereira Borges, 436 Barra Bonita - Vila São Caetano Tiragem: 5.000 exemplares Olá Amigos do The Club, É com muita satisfação que fechamos mais um ano de nosso suporte técnico. Neste mês de Dezembro o nosso consultor técnico Thiago C. Montebugnoli está trazendo uma matéria interessante chamada manipulando Expressões no SQL Server 2005, sendo uma das dúvidas mais freqüentes em nosso suporte técnico. Nosso colaborador Mauro Santana vem com a segunda parte da matéria Novidades na Linguagem com a linguagem C# e Márcio Agnelo traz a última parte da matéria denominada Criando um leitor de RSS utilizando o Blend. Além destas matérias, nossa revista está recheada de dicas na seção Dicas & Truques e as dúvidas mais freqüentes em Perguntas & Respostas. A equipe do The Club deseja a todos um ótimo final de ano, um Feliz Natal e muito sucesso! sumário - Editorial... 03 - Manipulando Expressões no SQL Server 2005... 04 Copyright The Club Megazine 2007 Diretor Técnico Mauro Sant Anna Colaboradores Mauto Sant Anna - Novidades na linguagem Parte 2... 08 - Criando um leitor de RSS utilizando o Blend 2 - Parte II... 11 - Construindo relatórios em Reporting Services... 15 com Visual Studio 2003 - Dicas & Truques... 20 - Perguntas & Respostas... 25 Delphi é marca registrada da Borland International, as demais marcas citadas são registradas pelos seus respectivos proprietários. 03

SQL Server Manipulando Expressoes no SQL Server 2005 ~ Nesta matéria começarei a abordar algumas das importantes características deste Banco de Dados. É interessante ressaltar que cada Banco de Dados possui suas características particulares, procurarei ser o mais claro e prático possível dando destaque para as principais expressões no SQL Server. Utilizando Campos Calculados Esta é uma característica muito utilizada, ou seja, um comando SELECT poderá retornar nas colunas um valor calculado. Por exemplo, suponha que exista uma tabela de produtos e que precisemos retornar seu valor + 25%, ficaria fácil. Veja abaixo a instrução SQL: SELECT PRODUTO, VALOR, (VALOR*1.25) AS VALORCALCULADO FROM TBPRODUTOS Funções Matemáticas Abs Esta função retorna o valor absoluto de um número. Exemplo: SELECT ABS(REPORTSTO) FROM EMPLOYEES Power Recebe dois parâmetros, o primeiro seria o valor a ser elevado e o segundo a quantidade de vezes que iremos multiplicar este valor. (Figura 01) Exemplo: Poderia ser utilizada com as expressões de adição, subtração, divisão e multiplicação. Veja logo abaixo um exemplo bem simples: SELECT POWER(REPORTSTO,2) FROM EMPLOYEES SELECT (VALOR * QUANTIDADE) AS VALORCAL- CULADO FROM TBPRODUTOS Multiplicamos o campo valor com o campo quantidade. Este mesmo mecanismo serve para todos os operadores matemáticos. Utilizando Funções Estudaremos algumas das principais funções, tais como: funções matemáticas, de caracteres e de Data/Hora. Utilizaremos a Base de Dados chamada Northwind para eventuais testes. Este Banco de Dados já vem por padrão com o SQL Server. Figura 01. Exemplo de utilização da função Power. 04

Sqrt SQL Server Teremos um resultado semelhante ao da Figura 02. Retorna a raiz quadrada de um determinado valor. Exemplo: select SQRT(UNITSINSTOCK) FROM PRODUCTS PI Retornar o valor do PI. Exemplo: Figura 02. Concatenando Campos. SELECT PI() FROM TABELA Round Função para arredondar valores, recebe dois parâmetros, o valor a ser arredondado e a quantidade de casas decimais. Exemplo: Lower Recebe como parâmetro uma string e a retorna com caracteres minúsculos. Exemplo: SELECT LOWER(FIRSTNAME) AS MINÚSCULAS FROM EMPLOYEES SELECT ROUND(FREIGHT,1) AS VALOR FROM ORDERS Funções de Caracteres A concatenação de campos é uma tarefa muito utilizada e simples de ser feita. Utiliza-se o sinal de + para fazer isto, veja abaixo um exemplo: Exemplo: Obs: A função UPPER converte para maiúsculas. Ltrim Recebe como parâmetro uma string. Esta função tem como objetivo remover os espaços em brancos à esquerda de uma string. Exemplo: SELECT LTRIM( THECLUB ) FROM TABELA SELECT (FIRSTNAME + + LASTNAME) AS NOME COMPLETO FROM EMPLOYEES ]A Função RTRIM tem a mesma funcionalidade, o único diferencial é que os espaços em brancos removidos são da direita. 05

sql server Replicate Recebe como parâmetro uma string e a quantidade de vezes a ser repetida a mesma. Exemplo: SELECT GETDATE() Exemplo: SELECT REPLICATE(FIRSTNAME,2) FROM EM- PLOYEES Substring Esta é uma função de grande utilidade, retorna pedaços de uma string. Recebe três parâmetros, sendo: a string, a posição inicial e a quantidade de caracteres a serem mostrados. DateAdd Esta função DATEADD adiciona dias, meses ou anos em uma data. Recebe como primeiro parâmetro a unidade a ser adicionada, o segundo a quantidade e o terceiro o campo do tipo Data. Veja Figura 03. Exemplo: SELECT DATEADD(YEAR,2, HIREDATE) DATA FROM EMPLOYEES Exemplo: SELECT SUBSTRING(FIRSTNAME,1,5) FROM EM- PLOYEES DataLength Esta função tem como parâmetro de entrada uma string e de retorno a quantidade de caracteres da mesma. Exemplo: SELECT DATALENGTH(FIRSTNAME) FROM EMPLOY- EES Figura 03. Função Dateadd. Também poderia ser utilizada dateadd(month,2, hiredate) para adicionar meses a uma data ou dateadd(day,2,hiredate) para adicionar dias. Funções de Data/Hora Um detalhe importante é que as funções de data trabalham referenciando unidades de data. As mais comuns são: - year (ano) - month (mês) - Day (dia) Getdate A função GETDATE retorna a data e a hora atuais do sistema. Podemos digitar o seguinte comando para obter a data e hora atual: Datepart A função DATEPART retorna a parte especificada de uma data como um inteiro. Recebe como parâmetro a unidade e o campo do tipo data. Exemplos: SELECT DATEPART(YEAR, HIREDATE) FROM EM- PLOYEES O resultado será o ano do campo hiredate. 06

sql server SELECT DATEPART(MONTH, HIREDATE) FROM EMPLOYEES O resultado será o mês do campo hiredate. SELECT DATEPART(DAY, HIREDATE) FROM EM- PLOYEES O resultado será o dia do campo hiredate. Datediff A função DATEDIFF calcula a diferença entre duas datas retornando o resultado como um inteiro. Poderá retornar a diferença entre dias, meses ou anos. Exemplos: SELECT DATEDIFF(YEAR,BIRTHDATE,HIREDATE) FROM EMPLOYEES O resultado será a diferença em dias destas duas datas. Convertendo dados A função CONVERT permite converter um tipo de dado para outro. Recebe como primeiro parâmetro o tipo de dado e o segundo o campo a ser convertido. Exemplo: SELECT CONVERT(CHAR,EMPLOYEEID) FROM EM- PLOYEES Neste exemplo irá converter campos do tipo numérico para char. Conclusão Procurei demonstrar nesta matéria um pouco das expressões mais utilizadas no SQL Server. O Help do mesmo é muito rico e abrangente, uma dica que deixo aqui seria a de procurar respostas no próprio Help, como sintaxes de funções, exemplos de utilizações entre outras coisas. O resultado será a diferença em anos destas duas datas. SELECT DATEDIFF(MONTH,BIRTHDATE,HIREDATE) FROM EMPLOYEES Sucesso e até a próxima pessoal! O resultado será a diferença em meses destas duas datas. SELECT DATEDIFF(DAY,BIRTHDATE,HIREDATE) FROM EMPLOYEES Sobre o autor Thiago Cavalheiro Montebugnoli é tecnólogo, formado pela Faculdade de Tecnologia de Botucatu SP (FATEC) e consultor técnico do The Club. 07

novidades na linguagem Novidades na Linguagem Parte 2 Esta e a segunda parte sobre as novidades na linguagem C# no.net Framework 3.5. Anonymous Types Até a versão 2.0 do Framework, todos os tipos precisavam ser explicitamente declarados antes de utilizados. Agora, o compilador pode declara automaticamente alguns tipos para nós. Considere a classe a seguir class Pessoa public Pessoa(string Nome, string Sobrenome) this.fnome = Nome; this.fsobrenome = Sobrenome; string FNome; public string Nome get return FNome; string FSobrenome; public string Sobrenome get return FSobrenome; public override int GetHashCode() return Nome.GetHashCode() ^ Sobrenome.GetHashCode(); public override bool Equals(object obj) Pessoa P = (Pessoa)obj; return ((P.Nome == Nome) && (P.Sobrenome == Sobrenome)); public override string ToString() return string.format( Nome: 0 Sobrenome: 1, Nome, Sobrenome); Esta classe armazena dados de uma pessoa, mas especificamente nome e sobrenome. Ela contém campos para armazenar os dados, um construtor para inicializar e propriedades de leitura. Além disso, sobrecarrega três métodos: ToString(), Equals() e GetHashCode(). Estes três últimos não são particularmente importantes, eles estão aí mais para deixar a classe completa. Podemos utilizar a classe da seguinte forma: var P1 = new Pessoa( Mauro, Sant Anna ); Console.WriteLine(string.Format( 0 1 2, P1.GetType().ToString(), P1.Nome, P1.Sobrenome)); Pode ser que desejemos deixar os tipos de Nome e Sobrenome como sendo genéricos, assim podemos definir seus tipos exatos em tempo de execução. Neste caso, a classe ficaria assim: class GenericPessoa<T1, T2> public GenericPessoa(T1 Nome, T2 Sobrenome) this.fnome = Nome; this.fsobrenome = Sobrenome; T1 FNome; public T1 Nome 08

novidades na linguagem get return FNome; T2 FSobrenome; public T2 Sobrenome get return FSobrenome; public override int GetHashCode() return Nome.GetHashCode() ^ Sobrenome.GetHashCode(); public override bool Equals(object obj) GenericPessoa<T1, T2> P = (GenericPessoa<T1, T2>)obj; return ((P.Nome.Equals(Nome)) && (P.Sobrenome.Equals(Sobrenome))); public override string ToString() return string.format( Nome: 0 Sobrenome: 1, Nome, Sobrenome); GenericPessoa criada anteriormente, mas não precisamos ter tido nenhum trabalho para isso! Efetivamente, o decompilador ILDASM, fornecido com o Visual Studio permite examinar as classes e ver como elas são semelhantes. Estas são as classes explícitas: Poderíamos usar desta forma: var P2 = new GenericPessoa<string, string>( Mauro, Sant Anna ); Console.WriteLine(string.Format( 0 1 2, P2.GetType().ToString(), P2.Nome, P2.Sobrenome)); Esta é a classe anônima. Note a semelhança com a classe acima definida com Generics, a não ser por alguns atributos diferentes: Não existe nada de errado com o código acima. A questão é que este tipo de classes para conter valores é bastante comum e escrevê-las demanda certo trabalho braçal. O compilador C# 3.0 pode agora declarar classes como a acima automaticamente apenas ao se declarar e inicializar uma variável da seguinte forma: var P3 = new Nome = Mauro, Sobrenome = Sant Anna ; O compilador irá criar uma classe real, visível com ferramentas como debugger e decompiladores. Esta classe é virtualmente idêntica à classe Extension Methods Um método de instância nada mais é que um método static que aceita um parâmetro escondido, o this. Podemos criar em uma classe um método static que aceita uma instância da própria classe, mas isso não faz muito sentido; é melhor criar um método de instância logo de uma vez. Caso desejemos em uma classe B manipular uma instância de uma classe A, podemos passar uma instância de A como parâmetro de algum método de B. Se este método de B não precisar acessar nada de B, ele pode muito bem ser estático. 09

novidades na linguagem Numero N = new Numero(10); N.Dobro(); Considere o exemplo abaixo: class Numero public Numero(int N) FX = N; int FX; public int X get return FX; set FX = value; public override string ToString() return FX.ToString(); static class Extensora public static void Dobro(Numero N) N.X = 2 * N.X; O método Dobro da classe Extensora manipula a classe Numero. Podemos usar o seguinte código: Numero N = new Numero(10); Extensora.Dobro(N); O método Dobro pertence à classe Extensora, mas ele na verdade manipula instâncias da classe Numero. Seria interessante poder usar a sintaxe abaixo: É exatamente isso que um extension method permite. Ele é um método declarado em outra classe, mas que funciona como um método da própria classe. Ele é declarado em uma classe estática e a única diferença é o uso da palavra reservada this como mostrado abaixo: static class Extensora public static void Dobro(this Numero N) N.X = 2 * N.X; O Visual Studio reconhece os extension methods e apesar de listá-los na classe estendida, eles aparecem com uma seta azul indicando este fato: Por enquanto é só. No próximo artigo continuarei a mostrar as novidades na linguagem do C# 3.0. Sobre o autor 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. Informá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. 10

blend 2 Criando um Leitor de RSS utilizando o Blend 2 Parte II Como vimos na parte anterior montamos uma imagem no blend que carrega a imagem de um RSS. 1. Botão para inserção de grid no Canvas Clique na opção GRID (se caso esta não estiver como padrão) e faça a área dentro no Canvas com um tamanho na qual você preferir. A figura abaixo demonstra o tamanho que defini, notando-se que também alterei nas opções de tamanho da imagem do RSS. Figura 01. Imagem inserida no Canvas. Agora trabalharemos com um grid de informações que através de um link direto de uma amostra de títulos carregará a descrição de seu item em um TextBlock. Primeiramente vamos incluir o grid no Canvas. Ele se encontra na parte de Tools do nosso blend como demonstra a figura abaixo: Figura 03. Grid inserido na aplicação. Como todo e qualquer objeto inserido no Blend, o GRID também possui propriedades específicas para tal. E agora, vamos mexer nessas propriedades para manter o sistema coligado ao RSS que estamos aplicando. Vamos clicar no quadradinho pequeno que se encontra no canto direito na parte Common Properties > DataContext. Figura 02. Inserção do GRID no Canvas. Figura 04. Área de Propriedades comuns do grid. 11

blend 2 Uma vez clicado, teremos que criar um novo Data Bind, então aparecerá uma pequena janela aonde você escolherá Data Binding... e, dali você fará o vinculo necessário para montagem completa do grid relacionado ao RSS. colocar um listbox e um TextBlock para mostrar o funcionamento do modelo. Antes disso vamos antecipar um pouquinho e vamos analisar a evolução do código xaml até o momento: <Window xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/ winfx/2006/xaml xmlns:d= http://schemas.microsoft.com/expression/blend/2006 xmlns:mc= http://schemas.openxmlformats.org/markup-compatibility/2006 c:ignorable= d x:class= Window1 x:name= Window Title= Window1 Width= 640 Height= 419 > <Window.Resources> Figura 05. Aplicação de Data Binding... no GRID. <XmlDataProvider x:key= rssds d:isdatasource= True Source= http://rss. terra.com.br/0,,ei6501,00.xml /> Quando clicado no Data Binding... Uma janela se abrirá para a criação do Bind. Como nesse tutorial queremos ver principalmente os itens de RSS vamos selecionar. No Box da direita chamada de fields, clique na abertura até encontrar a tag Item(Array), selecione-o e depois clique no botão Finish. </Window.Resources> <Grid x:name= LayoutRoot > <Image HorizontalAlignment= Left VerticalAlignment= Top Width= 102 Height= 42 Source= Binding Mode=Default, Source=StaticResource rssds, XPath=/rss/channel/image/url RenderTransformOrigin= 0.412,-1.333 Margin= 8,8,0,0 /> <Grid Margin= 8,54,8,8 DataContext= Binding Mode=Default, Source=StaticResource rssds, XPath=/ rss/channel/item /> </Grid> </Window> Figura 06. Selecionando o Item(Array) para criação do Bind no GRID. Bom, já estamos quase lá, uma vez formado o bind no grid agora vamos Como demonstra a figura, selecionamos o listbox para colocarmos no Canvas (1). Note que é extremamente importante que esse listbox fique dentro do grid (2). Se caso quando criar o objeto ele não constar dentro do grid, você pode 12

blend 2 arrastá-lo através dos layers demonstrados no Objects and Timeline ou, clicando duas vezes no grid para ele ficar selecionado e daí você inserir o objeto dentro (3). Uma vez montado isso montaremos dentro do grid um TextBlock, vinculando-o ao click da lista diretamente no carregamento de seu conteúdo. Figura 07. Criando um ListBox. Uma vez criado o listbox devemos seguir quase que os mesmos procedimentos para montar o seu bind. Vamos na parte Common Properties > ItemsSource, Vamos criar um novo Data Binding.... Nessa nova janela que se abrirá escolheremos a aba Explicit Data Content, lá escolheremos a tag Item(Array), e a partir dali clicamos no botão Define Data Template. Figura 09. Criando um Data Template no listbox. Quando clicado em ok, automaticamente os títulos do RSS já estarão carregados, como demonstra abaixo: Figura 10. Títulos carregados no listbox. Figura 08. Criando um Data Binding no listbox. Dali uma nova janela se abrirá, e você selecionará somente o Box title. Isso indicará que, no listbox aparecerão somente os títulos do RSS. Para concluir vamos criar o TextBlock para exibição do conteúdo. Ele se encontra no Tools do Blend 2. Depois coloque também dentro do grid, da mesma maneira que você fez com o listbox. Uma vez criado o TextBlock (Figura 11) devemos seguir quase que os mesmos procedimentos para montar o seu bind. Vamos na parte Common Properties > Text, Vamos criar um novo Data Binding.... Nessa nova janela que se abrirá escolheremos a aba Explicit Data Content, lá escolheremos a tag Description, e a partir dali clicamos no botão Define Data Template (Figura 12). 13

blend 2 E agora a melhor parte, dê F5, e veja o aplicativo que você acabou de criar rodando. Até mais e boa sorte a todos. Obs.: Todas as imagens utilizadas, tb como a edição HTML desse post foi feito com Microsoft Expression Design e Microsoft Expression Web respectivamente. Figura 11. Criação do TextBlock. Figura 12. Definindo seu Explicit Data Context. Márcio Agnelo marcioagnelo@gmail.com Web Development Coordinator Sobre o autor Eu sou Márcio Agnelo, tenho 29 anos e trabalho na área de WEB desde 1998. Estudei Física na USP e Desing Industrial na FAAP (ambos não - concluídos). No início de carreira trabalhei como web designer, utilizando recursos comuns de programação (HTML, javascript) e ferramentas para Layout (Photoshop). Ao longo de 4 anos de trabalho e alguns sites premiados, estudei programação para sites dinâmicos. Aprendi a utilizar php e asp para montagem de sites dessa magnitude. Paralelamente, comecei a desenvolver sistemas complexos em actionscript (Flash), para dar maior interatividade em recursos multimídia. Trabalhei com Director (programação Lingo), e TGF (The Games Factory) para criação de jogos para computador. Daí juntei o conhecimento que tenho de design e programação para aprimorar os sites na qual trabalhei. A partir de 2003 comecei a trabalhar como consultor web, focado em design e programação dinâmica para os modelos apresentados durante esses anos. Atualmente estou estudando programação em.net e utilizando ferramentas Microsoft Expression Studio para implementação de recursos com WPF e Silverlight. Meu hobby é música e desenho. Nas horas vagas pinto alguns quadros ou saio tocando violão por aí. HUMOR 14

visual studio Construindo relatórios em Reporting Services com Visual Studio 2003 Visão Geral Arquiquetura Reporting Services é uma plataforma completa envolvendo todo o ciclo de vida de um relatório. Se você esta procurando uma alternativa ao Crystal Repors, creio que encontrou, desde que é claro, tenha o Sql Server, já que o Reporting Services, ou simplesmente RS, é uma espécie de ADD ON do SQL Server 2000, isso mesmo! SQL Server 2000, se você esta utilizando o SQL 7 esqueça! Não funciona e mais, não se esqueça de instalar o Service Pack 3 do SQL Server 2000. As principais características Não Diferente dos seus principais concorrentes, o Reporting Services é 100% compatível com o Visual Studio 2003 e Visual Studio 2003. Algumas de suas principais características incluem: Acesso a dados Ambiente de desenvolvimento Tipo de ferramenta Distribuição SQL, OLE DB, ODBC 32 bits, ADO, ADO.NET Ambiente de fácil utilização, estilo Office integrado ao VS SDK SQL HTML, PDF, exportações, Activex e Office Através do Reporting Services, você pode preparar relarórios para aplicações Web, Windows Forms ou proporcionar integração com o Microsoft Office. A conexão de dados pode ser feita nativamente em SQL, OLEDB, XML, ODBC e Oracle. Os formatos de saída desses relatórios podem ser em HTML, Excel, Word ou PDF ou saindo para E-mails, Sharepoint e outras customizadas por você. Criação e edição O Reporting Services possui integração total ao Visual Studio e proporciona fácil manipulação com diversos controles. Contém novo conceito na criação de relatórios com a utilização de tables (estilo Excel) e é uma ferramenta do tipo RAD trazendo uma produtividade maior. 15

visual studio Gerência Definições de relatórios, diretórios e recursos são publicados e gerenciados através de um web service. (http://localhost/reports). Os relatórios podem ser executados de duas formas: por demanda ou agendamento. (são cacheados para consistência e performance). É possível montar um ambiente de segurança exclusivo por servidor de relatório, por aplicação ou por relatório. Criação de esquemas de agendamento, possibilitando o envio de relatórios utilizando inclusive a configuração de parâmetros. Controle de histórico, é possível verificar as versões dos relatórios. A fonte de dados pode ser alterada diretamente no gerenciador, sem a necessidade de reprogramação Nosso exemplo Abra o Visual Studio 2003, vá para File/New Project e escolha Business Intelligence Project e por último Report Project Wizzard. Na sequencia aparecerá uma primeira tela onde são passadas informações sobre o que acontecerá nas próximas telas, Next! Entrega Os tipos de relatórios gerados podem ser entregas no estilo Tradicional (papel), interativo (web), On-demand ( pull ) e agendado ( push ). Existem a possibilidade de vários formatos de entrega (HTML, Excel, PDF, XML) e podem ser entregues em vários locais (e-mail, file share, etc.) Criando um relatório Em nosso exemplo utilizaremos o Visual Studio 2003 e criaremos um relatório através de uma aplicação ASP.NET utilizando o banco de dados AdventureWorks 2000. 16

visual studio Neste momento, será solicitada as informações referente a sua conexão com o Banco de Dados escolhido... Clique em NEXT novamente e agora selecione o tipo de seu Relatório... Clique em Edit, selecione o nome do Servidor, o tipo de autenticação e o bando de dados... Clique em next e será necessário agora definir a query string de seu relatório. Nessa etapa seria interessante você já saber o que precisa. Você pode agora, definir os agrupamentos e campos que serão incluídos em seu relatório... 17

visual studio E finalmente, o estilo de relatório... Concluindo Reporting Services, mais uma ótima alternativa para criação, gerenciamento e edição de relatórios. Um dos pontos fortes diz respeito ao licenciamento, já que tendo SQL Server 2000, podemos te-lo sem custo adicional. Utilizando um Wizzard ficou fácil criar um relatório de exemplo, portanto, fácil de aprender também. Maiores informações visite: http://www.microsoft.com/sql/reporting/default.mspx Finalizando a criação do relatório, é informado o local de publicação e o nome da pasta física... 18

delphi 19

dicas & truques Listando os serviços do Windows em um Listbox Nesta dica iremos listar todos os serviços ativos no Windows, para isto coloque um Botão e um ListBox no Formulário. Figura 01. Gerando o arquivo txt WinExec( cmd.exe /c net start > C:\Diretorio\Windows_Serviços\servicos.txt, SW_SHOWNORMAL); Testando se o diretório Existe if FileExists( C:\Diretorio\Windows_ Serviços\servicos.txt )then Ponteiro para o arquivo TXT assignfile(texto, C:\Diretorio\Windows_Serviços\servicos.txt ); reset(texto); Figura 01. Listando os Serviços do Windows. Utilizamos o comando Winexec para poder gerar um arquivo.txt e em seguida ler linha a linha deste arquivo inserindo no ListBox. Veja abaixo o código implementado no Botão. procedure TForm1.Button3Click(Sender: TObject); var texto : textfile; linha,linhageral : string; i: integer; ListBox1.Clear; i:=1; Laço para ler o arquivo.txt e ir adicionando no ListBox while not eof(texto) do if (i>=3)then readln(texto,linha); linhageral := copy(linha,4,length(linha)); ListBox1. AddItem(linhageral,listbox1); readln(texto,linha); i:= i+1; CloseFile(texto); Uma dica Importante, Obtendo informações do sistema É possível também obter informações do sistema através de um arquivo 20

dicas & truques txt. Para isso, entre no Prompt de comando. Na tela que aparecer digite o comando systeminfo > c:\pasta\info.txt. Agora vá na pasta onde o arquivo foi salvo e verifique que contém várias informações sobre o sistema e sobre o computador. Retornando um Array em uma Função Para podermos retornar um array em uma função, primeiramente declare um tipo, no caso abaixo estamos utilizando um Array de strings. Definindo o tamanho do Array Setlength(lCaracteres, 10); lcaracteres := RetornarArray(10); Neste caso será retornado 10 valores, para poder acessá-los uma sugestão seria montar um laço e ir adicionando no Memo for i:=0 to High(lCaracteres) do memo1.lines.add(lcaracteres[i]);. type TResultadoArray = array of string;... Gerando combinações numéricas Iremos gerar todas as combinações possíveis utilizando os números de 0 a 9 com 3 casas decimais, inserindo o resultado em um Memo, veja abaixo o código! Logo em seguida criamos uma função que tem como resultado este tipo criado, veja abaixo: function TForm1.RetornarArray(Parametro: integer): TResultadoArray; var i: integer; if Parametro > 0 then SetLength(Result, Parametro); for i := 0 to Parametro - 1 do Result[i] := Pos +IntToStr(i); procedure TForm1.BitBtn1Click(Sender: TObject); var i,j,k:integer; s:string; Memo1.Lines.Clear; for i := 0 to 9 do for j := 0 to 9 do for K := 0 to 9 do s := IntToStr(i)+IntToStr(j) +IntToStr(k); if (Memo1.Lines.IndexOf(s) < 0) then Memo1.Lines.Add(s); Caption := Total de combinações: +IntToStr(Memo1.Lines.Count); Para montar nosso exemplo coloque no formulário um Memo e um Botão para executar a função criada acima. procedure TForm1.Button1Click(Sender: TObject); var lcaracteres: TResultadoArray; Listando os parâmetros de configuração do SqlConnection Coloque no formulário um componente SqlConnection, um Listbox e um Label. Implemente o código no evento OnActivate do formulário e no Onclick do Listbox. Figura 02. 21

dicas & truques procedure TForm1.FormActivate(Sender: TObject); Para retirar informações do banco use o componente IBDatabaseInfo, localizado na mesma aba (INTERBASE). Direcione a propriedade Database para o IBDATABASE. Adicione um Memo e um Botão, no evento onclick digite os códigos: Armazenar a Lista de Strings no Listbox ListBox1.Items := SQLConnection1. Params; IBDatabase1.Open; memo1.lines.clear; memo1.lines.add( Nome do Servidor: +IBDatabaseInfo1.DBSiteName); memo1.lines.add( Versão do Banco: +IBDatabaseInfo1.Version); procedure TForm1.ListBox1Click(Sender: TObject); var i: integer; Begin Veja o resultado no nosso exemplo. Conectamos com o Firebird 1.5 e consultamos o nome da máquina que está o BD e a versão do Firebird. Veja o resultado na Figura 03. Faremos um laço para ir jogando no Label for i:=0 to ListBox1.Count-1 do if ListBox1.Selected[i] then Label1.Caption := ListBox1.Items. Strings[i]; Figura 03. Informações sobre o Banco de Dados. Trabalhando Com Triggers, Stored Procedures e Generators no Firebird Simularemos uma auditoria simples em uma tabela, criaremos uma tabela de clientes e uma chamada Auditoria, veja abaixo: Figura 02. Parâmetros de Configuração do SqlConnection. Descobrir em qual Máquina está localizado o Banco de Dados utilizando o componente TibDatabase Faça a conexão com o banco de dados com o componente TIBDatabase. CREATE TABLE TBCLIENTE ( COD_CLIENTE INTEGER NOT NULL, NOME_CLIENTE VARCHAR(40) ); CREATE TABLE AUDITORIA ( COD_AUDITORIA INTEGER NOT NULL, HORA TIME, DATA DATE, TIPO VARCHAR(15), 22

dicas & truques ); TABELA USUARIO CHAR(15), VARCHAR(15) Em seguida criaremos um Generator para incrementar o código da tabela auditoria. User: Nome do usuário. CREATE TRIGGER TRIGGER_INSERT FOR TBCLI- ENTE ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0 AS CREATE GENERATOR GEN_AUDITORIA_ID; SET GENERATOR GEN_AUDITORIA_ID TO 0; E uma Stored Procedure que será disparada por uma trigger para inserir os registros na tabela Auditoria. CREATE PROCEDURE EXECUTAR ( tip varchar(15), tab varchar(15)) as INSERT INTO AUDITORIA(COD_AUDITORIA, HORA, DATA, TIPO, TABELA, USUARIO) VALUES(gen_id(gen_auditoria_id, 1), current_time, current_date, :TIP, :TAB, USER); End Esta Stored Procedure tem como Parâmetros de entrada os seguintes valores tip e tab que seriam tipo de operação e o nome da tabela. Logo a seguuir faremos um insert na tabela denominada Auditoria com os seguintes valores: gen_id(gen_auditoria_id, 1): Seria o código da tabela Auditoria incrementado mais um. Current_time: A hora atual. Current_date: A data atual. Tip: o valor do parâmetro. Tab: o valor do parâmetro. if (INSERTING) then BEGIN EXECUTE PROCEDURE executar( INSERÇÃO, TBCLIENTE ); END if (UPDATING) then BEGIN EXECUTE PROCEDURE executar( ATUALIZA ÇÃO, TBCLIENTE ); END if (DELETING) then BEGIN EXECUTE PROCEDURE executar( DELEÇÃO, TBCLIENTE ); END End A Trigger irá disparar a Stored Procedure conforme o tipo de operação realizada. INSERTING: Irá verificar se foi realizado o Insert UPDATING: Irá verificar se foi realizado o Update DELETING: Irá verificar se foi realizado o Delete Pegando a Url Ativa no Browser Nesta dica estaremos utilizando o navegador Internet Explorer, primeiramente declare a seguinte unit. Uses ddeman; function GetURL(Service: string): String; var 23