Existem relatórios que precisam buscar as informações consolidadas de um determinado mês.

Por exemplo:

O relatório de vendas do mês de abril retorna as vendas, separadas por dias do mês da março. E assim ocorre para todos os meses do ano.

 

Uma query que retorna os dados do mês anterior poderia ser:

 

SELECT CONVERT(VARCHAR(7), DATA, 120) ano_mes, DATA, V.*

FROM VENDAS V WITH(NOLOCK)

WHERE CONVERT(VARCHAR(7), DATA, 120) = CONVERT(VARCHAR(7), dateadd(m, -1,getdate()),120)

 

O campo de retorno “ano_mes” retorna algo como “2010-03”, ou seja, a data sem o dia. Não sei se este tipo de busca é performático, mas se o relatório é gerado a noite e armazenado em um banco de dados não vejo problemas nesta abordagem.

Tags Categories: .Net
Posted By: Tiago
Last Edit: 04 Feb 2010 @ 07 07 PM

PermalinkComments (0)

 24 Dec 2009 @ 3:52 PM 

1. Mude para verdadeiro as propriedades AllowDrop e CanUserDeleteRows;

2. Adicione a função responsável pela exclusão dos registros ao evento PreviewKeyDown. O resultado deve ficar como abaixo:

<Grid>

<my:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Name="MeuGrid" HorizontalContentAlignment="Center" AllowDrop="True" CanUserDeleteRows="True" PreviewKeyDown="grid_PreviewKeyDown">

</Grid>

3. Altere a função responsável pela exclusão conforme abaixo:

private void grid_PreviewKeyDown(object sender, KeyEventArgs e)

{

   if (Key.Delete == e.Key)

   {

      using (linq.Container ctx = new linq.Container ())

     {

         foreach (var row in grid.SelectedItems)

        {

           linq.Entidade entidade = row as linq.Entidade;

           linq.Entidade originalEntidade =

                 ctx.Entidade.First(c => c.EntidadeId == entidade.EntidadeId);

           ctx.DeleteObject(originalEntidade);

        }

       ctx.SaveChanges();

      ReloadGrid(ctx);

      }

   }

}

Tags Categories: .Net
Posted By: Tiago
Last Edit: 24 Dec 2009 @ 03 52 PM

PermalinkComments (0)

 20 Dec 2009 @ 8:29 PM 

Estou trabalhando com uma estação de trabalho rodando o Windows 7. Quando migrei um de meus projetos para o novo computador e tentei executá-lo me deparei com um novo erro:

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient Provider, not valid.

No meu caso o erro ainda aparece em português, o que piora um pouco mais a procura por soluções na web:

A conexão nomeada especificada não foi encontrada na configuração, não se destina à utilização com o provedor EntityClient ou não é válida

Todos os sites em que procurei diziam que o caminho para o arquivo .sdf estava errado. Mas isto era impossível porque o projeto estava rodando perfeitamente no Windows Vista. Então resolvi mudar a abordagem do problema, se a configuração estava correta então a versão de algum dos softwares instalados teria de estar errada. Dito e feito. Faltava um Service Pack na minha estação, mais precisamente o Microsoft SQL Server Compact 3.5 Service Pack 1. Foi só instalá-lo e o erro parou de ocorrer.

 

Referências:

Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services for ADO.NET version 1.0 Service Pack 1 for Windows Desktop

Tags Categories: .Net
Posted By: Tiago
Last Edit: 20 Dec 2009 @ 08 29 PM

PermalinkComments (0)

 15 Sep 2009 @ 11:43 PM 

Aquilo que funciona no IE8, Firefox(FF) para variar não funciona no IE7 ou anterior. Como para criar sites para ampla audiência precisamos alcançar públicos bem diversos somo obrigados a manter nossos sites o mais compatíveis possível.

O método setAttribute funciona muito bem na maior parte do tempo, mas no IE7 ou anterior este atributo não funciona para alterar a classe de um elemento. Para tanto é necessário alterar o atributo className, isto pode ser feito de duas formas como descrito abaixo:

function CreateLink() {

    var divMenu = document.getElementById("divLateral");

    var menu = document.createElement("a");

    if (navigator.appName == "Microsoft Internet Explorer") {

      menu.className = "menu"; //opção 1

       menu.setAttribute("className", "menu"); //opção 2

   } else {

      menu.setAttribute("class", "menu");

   }

   menu.setAttribute("href", "NovaPagina.aspx);

   menu.innerHTML = "texto do link";

   divMenu.appendChild(menu);

}

Tags Categories: .Net
Posted By: Tiago
Last Edit: 15 Sep 2009 @ 11 43 PM

PermalinkComments (0)

 01 Sep 2009 @ 11:38 PM 

Sabiam que é possivel utilizar bitwise no SQL Server?

Veja o exemplo abaixo:

DECLARE @T AS INT

SELECT @T = 38

1 - SELECT CASE WHEN (@T & 2) = 2 THEN ‘2 - TRUE’ ELSE ‘2 - FALSE’ END

2 - SELECT CASE WHEN (@T & 4) = 4 THEN ‘4 - TRUE’ ELSE ‘4 - FALSE’ END

3 - SELECT CASE WHEN (@T & 32) = 32 THEN ‘32 - TRUE’ ELSE ‘32 - FALSE’END

Sabe o que é bitwise? Bitwise é uma forma bem econômica de, por exemplo, utilizar um único campo no banco de dados para salvar múltiplos valores. As operações são baseadas nos valores binários dos números acima veja a relação abaixo:

00000001 = 1

00000010 = 2

00000100 = 4

00001000 = 8

00010000 = 16

Logo a operação SQL com @T = 38 irá retornar true para todas as pesquisas porque 38 = 32 + 4 + 2, se ao invés de 38 @T fosse igual a 34, ele retornaria verdadeiro apenas para a primeira e terceira pesquisa.

Para usar bitwise no C# basta, por exemplo, decorar um enum com o atributo [Flags]:

[Flags]

Private enum OpcoesEnvio

{

        Nenhuma = 0, //(0000)

        Mail=1, //(0001)

        Tel = 2, //(0010)

        Fax = 4, (0100)

}

Quer saber mais? Tem bastantes informações nos links abaixo:

http://en.wikipedia.org/wiki/Bitwise_operation

http://www.mssqltips.com/tip.asp?tip=1218

http://snipplr.com/view/2402/using-a-flag-enumeration-with-bitwise-operations/

Tags Categories: .Net
Posted By: Tiago
Last Edit: 01 Sep 2009 @ 11 38 PM

PermalinkComments (0)