[MEU 50º LIVRO]: BANCOS DE DADOS E ACESS - CURSO COMPLETO - DO BÁSICO AO VBA - 1602 páginas

Páginas: 1602 | Autor: Júlio Battisti | 40% de Desconto e 70h de Vídeo Aulas de Bônus

Você está em: PrincipalArtigosAccess 2007 Avançado › Capítulo 1 : 06
Quer receber novidades e e-books gratuitos?
›››
« Anterior Δ Página principal ¤ Índice Próxima »

Curso Grátis - Access 2007 Avançado, Macros e Programação VBA
Autor: Júlio Battisti
Lição 06 - Capítulo 01 - Técnicas Avançadas em Consultas - Parte 3

5.7 - Noções da linguagem SQL para consultas

SQL - Structured Query Language

O SQL foi desenvolvido para ser uma linguagem padrão para operações com Banco de Dados. SQL foi elaborado para ser independente de hardware ou software. Ao usar o SQL, você não precisa saber a respeito do software de banco de dados ou do hardware envolvido em uma operação. Tudo o que você precisa conhecer é o método ( instrução) SQL padrão para solicitar informações, que obrigatoriamente é o mesmo em todos os sistemas que utilizam o SQL.

Nota: Na prática existem pequenas diferenças entre o SQL dos diferentes bancos de dados, como o Microsoft Access, Microsoft SQL Server 2000, ORACLE, etc.

Você usa operações SQL quando trabalha com o Microsoft Access 2007, mas o programa, na verdade, oculta a linguagem SQL do usuário. Por exemplo, todas as operações de consulta são realizadas usando-se SQL, mas você vê apenas a parte gráfica ( Modo Design) onde a consulta é definida.

Você pode ser muito produtivo no Microsoft Office Access 2007 sem saber nada de SQL. Um conhecimento básico de SQL, no entanto, melhora significativamente o seu uso do Microsoft Access 2007.
Quando você constrói uma consulta no Modo Design, na verdade o Microsoft Office Access 2007 está definindo uma instrução SQL, a partir dos campos, critérios e opções que você definiu na consulta. A título de exemplo, vamos acessar a instrução SQL da consulta "Totais por Pedido" que construímos em um dos ítens anteriores.

  • Vá para a Guia Consultas;
  • Dê um clique na consulta Totais por Pedido;
  • Dê um clique no botão Modo de Exibição;
  • Na barra de ferramentas, no botão bem da esquerda existe um setinha para baixo. Dê um clique nesta setinha que irá aparecer três opções: "Modo Design", "Modo folha de dados" e "Modo SQL". Dê um clique em Modo SQL, você verá uma janela conforme indicado na figura abaixo:

Access 2007 Avançado - Curso Completo - Júlio Battisti
Figura 70 - Instrução SQL da consulta Totais por Pedido.

          Na prática é esta Instrução SQL que o Microsoft Office Access 2007 grava ao salvar uma consulta; e também é esta Instrução SQL que é utilizada para selecionar os registros, aplicando os critérios especificados.
          Embora possa parecer um pouco complexa, veremos que a linguagem SQL é extremamente simples e intuitiva. Neste tópico veremos alguns aspectos básicos sobre o SQL, bem como os locais na Ajuda do Microsoft Office Access 2007 onde podem ser encontradas informações mais detalhadas sobre o SQL.
          Uma Instrução SQL descreve o conjunto de dados que você deseja recuperar ( Campos, De quais tabelas, Critérios, Classificação, Expressões Calculadas, etc).
          Todas as instruções SQL são conduzidas com um único comando que contém uma descrição completa da informação exigida. Ao escrever uma instrução SQL, você não deve se preocupar em como os dados são recuperados, mas somente com o conteúdo do conjunto de dados. Esse é o principal benefício do método SQL. Em muitas operações do Microsoft Access 2007, você pode usar instruções SQL, no lugar de expressões normais para inserir um conjunto de dados em um objeto. Por exemplo, todos os formulários e relatórios possuem uma propriedade RecordSource. Essa propriedade normalmente é o nome de uma tabela ou consulta, mas também pode ser uma instrução SQL.
          Lembre-se que o SQL é um padrão genérico para expressões de consulta em banco de dados. Embora a maior parte das versões do SQL compartilhe elementos básicos, elas não são idênticas. O Access SQL usa algumas palavras-chave que você não encontra em outras versões do SQL.
          Veremos através de exemplos a utilização das principais palavras chaves do SQL para a construção de expressões SQL para pesquisa em banco de dados.

SELECT:

          Esta com certeza é a instrução SQL mais importante, não existe pesquisa que não utilize esta instrução, vamos conhecê-la em detalhes.
          A Instrução Select é utilizada para especificar quais os campos de quais tabelas farão parte da consulta, quais os critérios de pesquisa que serão utilizados, qual a ordem de classificação, etc.
          A sintaxe da instrução é conforme indicado abaixo:

SELECT [predicado] { * | tabela.* | [tabela.]campo1 [AS alias1] [, [tabela.]campo2 [AS alias2] [, ...]]}
FROM tabelaexpression [, ...] [IN externaldatabase]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

Onde nos temos os seguintes elementos:

Elemento

Descrição

predicado

Um dos seguintes: ALL, DISTINCT, DISTINCTROW ou TOP. Você usa um predicado para restringir o número de Registros que é retornado pela consulta. Se nenhum for especificado o padrão é ALL.

*

Especifica que todos os campos de uma determinada tabela devem ser selecionados. Por exemplo Select * from Pedidos -  Seleciona todos os campos da tabela Pedidos.

Tabela

O nome da tabela de onde são selecionados os campos. Por exemplo, Select Pedidos.NúmeroDoPedido, Pedidos.DataPedido from Pedidos - Seleciona os Campos NúmeroDoPedido e DataPedido, da tabela Pedidos.

Campo1, Campo2

O Nome dos campos a serem selecionados.

Alias 1, Alias2

Um "apelido" para o campo. Na Folha de Dados o apelido aparece como o título da coluna. Por exemplo, Select Pedidos.NúmeroDoPedido As Número from Pedidos.

tabelaexpression

O nome da tabela de onde os campos serão selecionados

 

 

externaldatabase

O nome do Banco de Dados que contém a tabela, caso não seja o banco de dados atual.

where

Utilizado para especificar critérios na consulta. Por exemplo,  Where Pedidos.CidadeDestino="Uberlândia-MG"

group by

O mesmo que Agrupar Por no Modo Design da consulta, na linha Total

having

Especifica critérios quando utilizamos Agrupar Por.

order by

Utilizado para classificação dos registros em ordem crescente ou descendente de um determinado campo.

 

WITH OWNERACESS OPTION

Em um ambiente multiusuários com um grupo de trabalho seguro, use esta declaração com uma consulta para conceder ao usuário que executa a consulta as mesmas permissões que as do proprietário da consulta.

Sintaxe

instrução sql
WITH OWNERACCESS OPTION
A declaração WITH OWNERACCESS OPTION é opcional.

O exemplo a seguir permite que o usuário visualize informações sobre salários (mesmo que, de outra forma, o usuário não tenha permissão para visualizar a tabela FolhaDePagamento), desde que o proprietário da consulta tenha essa permissão:

SELECT Sobrenome,
Nome, Salário
FROM Funcionários
ORDER BY Sobrenome
WITH OWNERACCESS OPTION;

Se de alguma outra forma o usuário for impedido de criar ou adicionar a uma tabela, você pode usar WITH OWNERACCESS OPTION para permitir que ele execute uma consulta criar tabela ou consulta acréscimo.
Se você deseja impor configurações de segurança de grupo de trabalho e permissões de usuários, não inclua a declaração WITH OWNERACCESS OPTION.
Essa opção requer que você tenha acesso ao arquivo System.mdw associado ao banco de dados. É realmente útil somente nas implementações de multiusuários com segurança.

Vejamos alguns exemplos para exemplificar o uso da instrução Select:

  • Criar uma instrução SQL que retorne o campo NúmeroDoPedido, o campo DataPedido, o campo Frete e o campo CidadeDestino da tabela Pedidos.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino,    Pedidos.Frete  FROM Pedidos;

          Toda Instrução SQL deve ser terminada com um ponte e vírgula ( ; ), conforme indicado acima. Esta instrução SQL pode ser gerada a partir do Modo Design da consulta. Basta você criar uma nova consulta baseada na tabela pedidos, adicionar os campos indicado e depois dar uma olhada no modo SQL. Um detalhe interessante é que se você fizer qualquer alteração no modo SQL, as alterações se refletem no Modo Design e vice-versa. Isso acontece porque o Modo Design da consulta, é simplesmente uma representação gráfica para facilitar a construção de expressões SQL.

  • Alterar a instrução SQL anterior para que os registros sejam classificados em ordem crescente pelo valor do Frete.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete
FROM Pedidos
ORDER BY Pedidos.Frete;

          Observe a utilização da cláusula ORDER BY Pedidos.Frete para classificar os registros em ordem Crescente. A classificação em ordem crescente á o padrão no Microsoft Access 2007. Quando formos classificar em ordem decrescente, precisamos especificar a palavra DESC, conforme indicado abaixo:

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete
FROM Pedidos
ORDER BY Pedidos.Frete DESC;

  • Alterar a instrução SQL anterior para que sejam exibidos somente os pedidos cujo CidadeDestino seja Castanhal-PA.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete
FROM Pedidos WHERE (((Pedidos.CidadeDestino)="Castanhal-PA"))
ORDER BY Pedidos.Frete;

          Observe a utilização da Cláusula WHERE para filtrar somente os pedidos cujo CidadeDestino seja Castanhal-PA. Como o campo CidadeDestino é um campo do tipo texto, o valor do critério (Castanhal-PA) tem que vir entre aspas. Se fosse um campo do tipo Data, o valor do critério teria que vir delimitado pelo sinal #. Por exemplo #01/01/1995#. Vamos trabalhar um pouco mais com a cláusula WHERE.

  • Altere a instrução SQL anterior para que sejam exibidos somente os pedidos para Castanhal-PA ou Uberlândia-MG como CidadeDestino.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete FROM Pedidos
WHERE(((Pedidos.CidadeDestino)="Castanhal-PA" Or (Pedidos.CidadeDestino) ="Uberlândia-MG"))
ORDER BY Pedidos.Frete;

            Observe a utilização da Cláusula OR ligando os dois Critérios. Lembre que a cláusula OR retorna um registro se a CidadeDestino atender um dos dois critérios, isto é, se for Castanhal-PA ou se for Uberlândia-MG, o Registro será selecionado, que é exatamente o que desejamos, ou seja, todos os Pedidos para o Castanhal-PA ou para Uberlândia-MG.

  • Altere a instrução SQL anterior, retirando o critério para CidadeDestino. Adicione um critério para NúmeroDoPedido maior do que 10500, retire a classificação do campo Frete a classifique pelo campo NúmeroPedido.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete
FROM Pedidos
WHERE (((Pedidos.NúmeroDoPedido)>10500))
ORDER BY Pedidos.NúmeroDoPedido;

          Observe a cláusula WHERE utilizando o operador de comparação maior do que ( > ) e a classificação através da cláusula ORDER BY no campo NúmeroDoPedido. Observe também, que no Microsoft Access 2007, nas instruções SQL sempre aparece a identificação completa do campo no seguinte formato:  NomeTabela.NomeCampo. Por exemplo Pedidos.NúmeroDoPedido para indicar o campo NúmeroDoPedido da tabela Pedidos.
          Podemos ver, através dos exemplos, que a linguagem SQL não é tão difícil como pode parecer  a primeira vista. Observe que a sintaxe da linguagem é bastante intuitiva e orientada a extração de dados através das consultas.
            Vamos continuar vendo exemplos de aplicação da linguagem SQL com a utilização de recursos mais avançados.

  • Alterar a instrução SQL anterior, e adicionar um critério de tal maneira que somente sejam exibidos os pedidos para o Ano de 2010. Tirar o critério do campo Número do Pedido.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete
FROM Pedidos
WHERE ((Year([DataPedido])=2010))
ORDER BY Pedidos.NúmeroDoPedido;

          Observe a utilização da função Ano (Year) para extrairmos apenas o Ano do campo DataPedido a fim de especificarmos como critério o Ano=2010. Também a cláusula Order By foi mantida, classificando a listagem em ordem crescente pelo número do pedido. A utilização de funções junto com os comando SQL nos fornece inúmeras possibilidades de refinamento em nossas consultas.

  • Alterar a instrução SQL anterior, para que sejam exibidos somente os pedidos no Período de 01/01/2010 até 31/02/2010 e que tenham como CidadeDestino Castanhal-PA, Uberlândia-MG, Araxa-MG ou Campinas-SP.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete
FROM Pedidos
WHERE (((Pedidos.DataPedido) Between #1/1/10# And #2/31/10#)
AND
(Pedidos.CidadeDestino) In ("Castanhal-PA","Uberlândia-MG","Araxa-MG","Campinas-SP")))
ORDER BY Pedidos.NúmeroDoPedido;

          Observe a utilização de vários critérios em diferentes campos. Colocamos critérios nos campos DataPedido e CidadeDestino. Conforme descrito anteriormente os critérios de dois ou mais campos são ligados através do operador AND, indicando que um registro deve atender ambos os critérios para ser selecionado. Também temos a utilização dos operadores Between ( Entre) para selecionar as datas dentre de um determinado intervalo e do operador In (Em) para selecionar o campo CidadeDestino que seja igual a um dos valores apresentados na lista. Observe também , que os valores de data vem delimitados pelos marcadores #, conforme descrito anteriormente.

  • Criar uma instrução SQL que retorne o campo NúmeroDoPedido, o campo DataPedido, o campo DataEntrega,  o campo Frete e o campo CidadeDestino da tabela Pedidos. Criar uma coluna adicional que calcula o número de dias entre a DataEntrega e a DataPedido. Chamar esta coluna de Dias_Ped_Entr.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.DataEntrega, Pedidos.CidadeDestino, Pedidos.Frete, [DataEntrega]-[DataPedido] AS Dias_Ped_Entr
FROM Pedidos
WHERE (((Pedidos.DataPedido) Between #1/1/10# And #2/31/10#)
AND
((Pedidos.CidadeDestino) In (("Castanhal-PA","Uberlândia-MG","Araxa-MG","Campinas-SP")))
ORDER BY Pedidos.NúmeroDoPedido;

          Veja que a coluna calculada está junto com a listagem dos campos no início da instrução Select. Além disso foi utilizada a palavra AS para atribuir um nome ( apelido) para esta coluna calculada. Este nome é o que irá aparecer como título da coluna no modo Folha de Dados. Quando você constrói uma expressão, este é o nome que vem antes dos dois pontos, por exemplo:   Dias_Ped_Entr: [DataEntrega]-[DataPedido].
          Você também pode classificar a listagem em ordem crescente ou decrescente de um campo calculado. Por exemplo, se você quisesse classificar a listagem do ítem anterior, em ordem crescente, do número de dias entre a DataEntrega e a DataPedido, bastaria utilizar a seguinte instrução SQL:

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.DataEntrega, Pedidos.CidadeDestino, Pedidos.Frete, [DataEntrega]-[DataPedido] AS Dias_Ped_Entr
FROM Pedidos
WHERE (((Pedidos.DataPedido) Between #1/1/10# And #2/31/10#)
AND
((Pedidos.CidadeDestino) In ("Castanhal-PA","Uberlândia-MG","Araxa-MG","Campinas-SP")))
ORDER BY [DataEntrega]-[DataPedido];

  • Alterar a instrução SQL anterior, eliminando os critérios para a DataPedido e para o CidadeDestino. Colocar um novo critério para CidadeDestino, onde sejam exibidos apenas os pedidos cujo CidadeDestino tem a Primeira Letra na faixa de A até M. Utilize o operador Like.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.DataEntrega, Pedidos.CidadeDestino, Pedidos.Frete, [DataEntrega]-[DataPedido] AS Dias_Ped_Entr
FROM Pedidos
WHERE (((Pedidos.CidadeDestino) Like "[A-M]*"))
ORDER BY Pedidos.CidadeDestino;

          Observe a utilização do Operador Like ( Como ) como critério de Pesquisa para esta consulta. Nunca é demais salientar que a utilização das Instruções SQL juntamente com as funções e operadores do Microsoft Access 2007, nos fornece um amplo conjunto de possibilidades.
          Até agora estivemos trabalhando com Instruções que selecionam registros de uma única tabela. Porém é bastante comum criarmos Consultas baseadas em duas ou mais tabelas. Quando criamos instruções SQL que buscam dados em duas ou mais tabelas, dizemos que está sendo feito um Join entre as duas tabelas. Normalmente este "Join" ( ou ligação) é feito através de um campo comum as duas tabelas. Por exemplo, NúmeroDoPedido na tabela Pedidos e NúmeroDoPedido na tabela Detalhes do Pedido. Outro exemplo, CódigoDoCliente na tabela Pedidos e CódigoDoCliente na tabela Clientes. Pode acontecer de termos consultas que trabalham com três ou mais Tabelas, neste caso teremos diversos Joins.
          Agora passaremos e explorar na Prática, através de exemplos a construção de Instruções SQL que trabalham com duas ou mais tabelas. Sempre lembrando que estas consultas podem ser construídas diretamente no Modo Design das consultas e depois simplesmente vamos para o modo SQL e observamos o código gerado. Porém o conhecimento da linguagem SQL é útil em diversas situações, conforme veremos ao estudarmos Técnicas Avançadas em Formulários e Técnicas Avançadas em Relatórios.     

  • Criar uma instrução SQL  que selecione os seguintes campos:

NúmeroDoPedido da tabela Pedidos
DataPedido da tabela Pedidos
CidadeDestino da tabela Pedidos
Frete da tabela Pedidos
CódigoDoProduto, PreçoUnitário e Quantidade da tabela Detalhes do Pedido

As tabelas Pedidos e Detalhes do Pedido estão relacionadas através do campo número do Pedido. Classificar a listagem em ordem crescente do Número do Pedido.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete, [Detalhes do Pedido].CódigoDoProduto, [Detalhes do Pedido].PreçoUnitário, [Detalhes do Pedido].Quantidade
FROM Pedidos INNER JOIN [Detalhes do Pedido]
ON Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido
ORDER BY Pedidos.NúmeroDoPedido;

          Observe a instrução que está em vermelho. Nela temos a utilização da cláusula INNER JOIN, ligando as tabelas Pedidos e Detalhes do Pedido, através do campo NúmeroDoPedido, conforme especificado após o ON. Um Join deste tipo é bastante comum.
          Observe que está listagem irá trazer vários registros para cada Pedido, tantos quantos forem os ítens de cada pedido. Por exemplo, o Pedido Número 10248 apresenta três registros, um para cada um dos seus ítens. Um para o Produto 42, outro para o produto 72 e um para o produto cujo código é 11.
          Mas se ao invés do CódigoDoProduto, nos quiséssemos que fosse exibida a Descrição do Produto. Em primeiro lugar esta informação encontra-se na tabela Produtos, logo teremos que adicionar a Tabela Produtos na nossa consulta, a qual ira se ligar a tabela Detalhes Do Pedido através do campo CódigoDoProduto, logo teremos mais um Join.
          Após adicionar a tabela Produtos e substituir o campo CódigoDoProduto pelo campo NomeDoProduto, a nossa instrução SQL deve ficar conforme indicado abaixo:

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete, Produtos.NomeDoProduto, [Detalhes do Pedido].PreçoUnitário, [Detalhes do Pedido].Quantidade
FROM Produtos INNER JOIN (Pedidos INNER JOIN [Detalhes do Pedido] ON Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido) ON Produtos.CódigoDoProduto = [Detalhes do Pedido].CódigoDoProduto
ORDER BY Pedidos.NúmeroDoPedido;

          Observe que neste caso temos um INNER JOIN dentro do outro. Dentro do parênteses é feita a ligação entre as tabelas Pedidos e Detalhes Do Pedido, através do campo NúmeroDoPedido, e externamente é feita a ligação entre as tabelas Produtos e Detalhes do Pedido, através do campo NúmeroDoPedido.
          Posso utilizar diversos níveis de INNER JOIN, embora esta não seja uma prática recomendada, pois se aumentarmos muito os níveis de INNER JOIN, posso ter como  resultado pesquisas mais lentas em conseqüência do aumento da complexidade das mesmas. Até 3 ou 4 níveis é considerado normal, acima disso preciso repensar a maneira de construir a consulta.

  • Alterar a instrução SQL do ítem anterior para que somente sejam exibidos os pedidos para os produtos cujo NomeDoProduto inicie com uma letra na faixa de A até J. Tirar a classificação do campo NúmeroDoPedido e classificar em ordem crescente do campo NomeDoProduto.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete, Produtos.NomeDoProduto, [Detalhes do Pedido].PreçoUnitário, [Detalhes do Pedido].Quantidade
FROM Pedidos INNER JOIN (Produtos INNER JOIN [Detalhes do Pedido] ON Produtos.CódigoDoProduto = [Detalhes do Pedido].CódigoDoProduto) ON Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido
WHERE (((Produtos.NomeDoProduto) Like "[A-J]*"))
ORDER BY Produtos.NomeDoProduto;

          Observe, além dos dois INNER JOIN, a utilização da cláusula WHERE em conjunto com Operador LIKE para especificar o critério desejado.
          Até este momento estivemos construindo Instruções SQL que correspondem as consultas de Seleção. Especificamos quais campos serão exibidos, critérios de filtragem para estes campos e uma ordem de classificação. A partir de agora aprenderemos a utilizar Instruções SQL para a construção de outros tipos de Consulta : Criar Tabela, Consulta anexação, Consulta de tabela de referência cruzada, Consulta exclusão e Consulta atualização.
          Vamos começar criando uma consulta do tipo Criação de Tabela e observar as diferenças na instrução SQL.

  • Construir uma instrução SQL que selecione o NúmeroDoPedido, DataPedido, CidadeDestino e Frete. Colocar um critério para selecionar apenas os registros cuja DataPedido tenha caído no mês de Junho ou Julho de qualquer ano. A consulta deverá ser do tipo Criar tabela e o nome da tabela será Pedidos de Junho e Julho.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.CidadeDestino, Pedidos.Frete
INTO [Pedidos de Junho e Julho]
FROM Pedidos
WHERE ((Month([DataPedido]) In (6,7)));

          Observe a utilização da instrução INTO [Pedidos de Junho e Julho]. Ao invés de utilizarmos um SELECT FROM, utilizamos um SELECT INTO, que é a instrução SQL utilizada para criar uma nova tabela com os registros retornados pela consulta. O Nome da nova tabela vem depois da instrução INTO. Como o nome da tabela possui espaços em branco, o nome deve ser colocado entre colchetes. Também utilizamos, na cláusula WHERE, o operador In , juntamente com a função Month, para especificar que o mês da DataPedido deve ser um dos valores definidos na cláusula In ( 6=Junho, 7=Julho).
          A Instrução SELECT INTO, informa ao Microsoft Office Access 2007que para pegar os registros rertornados pela consulta e inseri-los em uma nova tabela. Caso a tabela já exista o Microsoft Office Access 2007avisa que a tabela será excluída e uma nova tabela será criada.

  • Criar uma instrução SQL que aumento o PreçoUnitário em 20% na tabela Detalhes do Pedido, devido a um ajuste na moeda e uma desvalorização em relação ao Dólar.

UPDATE [Detalhes do Pedido]
 SET [Detalhes do Pedido].PreçoUnitário = [PreçoUnitário]*1.2;

          Observe a simplicidade da instrução SQL. Utilizamos uma instrução UPTADE, seguida do nome da tabela onde será feita a atualização. Em seguida uma instrução SET com a expressão de atualização para aumentar em 20% o PreçoUnitário.

Importante: Se você executar mais do que uma vez, uma consulta de atualiazação, os dados serão repetidamente atualizados. Por exemplo: da primeira vez que a consulta for executada os dados do campo PreçoUnitário serão aumentados em 20% (por exemplo, um produto com preço Unitário de R$ 100,00 passará para R$120). Se você executar a consulta novamente será aplicado um novo acréscimo de 20%, sobre os novos valores - o produto de R$120,00 passará para R$144,00 e assim sucessivamente.

          Vamos alterar essa instrução para incluir um critério na consulta de atualização.

  • Alterar a instrução SQL do ítem anterior para que somente sejam aumentados os registros cujo PrecoUnitario for maior ou igual a R$20,00.

UPDATE [Detalhes do Pedido] SET [Detalhes do Pedido].PreçoUnitário = [PreçoUnitário]*1.2
WHERE ((([Detalhes do Pedido].PreçoUnitário) >= 20));

          Apenas foi adicionada uma cláusula WHERE, para atualizar apenas os registros cujo PreçoUnitário seja maior do que R$ 20,00.
          Aqui podemos fazer alguns comentários sobre a utilização prática de Instruções SQL. Como exemplo poderíamos citar um formulário para atualização de Preços. Poderíamos colocar um campo onde o usuário digita o valor do aumento ( 10%, 15%, etc) e um botão atualizar. Esse botão atualizar tem associado ao evento Ao Clicar, uma Instrução SQL que atualiza os registros desejados. Isso aumenta em muito a nossa flexibilidade, evitando que o usuário tenha que se deslocar para a Guia Consultas e executar uma consulta de Atualização.

          Juntamente com a instrução UPDATE, poderíamos utilizar Operadores e Funções do Microsoft Access 2007. Também podemos utilizar critérios em outros campos além do campo que está sendo atualizado. A título de exemplo, vamos alterar a instrução SQL anterior.

  • Alterar a instrução SQL do ítem anterior para que somente sejam aumentados os registros cujo PreçoUnitário for maior ou igual a R$ 20,00 E cujo NúmeroDoPedido seja menor do que 10500.

UPDATE [Detalhes do Pedido] SET [Detalhes do Pedido].PreçoUnitário = [PreçoUnitário]*1.2
WHERE ((([Detalhes do Pedido].PreçoUnitário) >= 20)
 AND
(([Detalhes do Pedido].NúmeroDoPedido) < 10500));

          Observe que utilizamos critérios em dois campos ( PreçoUnitário e NúmeroDoPedido) e que estes critérios estão ligados por um operador E, o que significa que um registro, somente será atualizado se ele atender aos dois critérios ao mesmo tempo ( PreçoUnitário maior ou igual a 20 e NúmeroDoPedido menor do que 10500). Se o registro atender a apenas uma das condições, o mesmo não terá o seu PreçoUnitário atualizado.
Vamos refinar um pouco mais a nossa consulta de atualização. Vamos fazer com que somente sejam atualizados os Pedidos para o ano da DataPedido igual a 2010, e ainda iremos manter os critérios adicionados até agora.

  • Alterar a instrução SQL anterior para incluir um critério para que o Ano da DataPedido seja 2010. Você terá que incluir a tabela Pedidos, uma vez que o campo DataPedido, encontra-se nesta tabela.

UPDATE Pedidos INNER JOIN [Detalhes do Pedido]
ON Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido
SET [Detalhes do Pedido].PreçoUnitário = [PreçoUnitário]*1.2
WHERE ((([Detalhes do Pedido].PreçoUnitário) >= 20) AND (([Detalhes do Pedido].NúmeroDoPedido) < 10500) AND (Year([DataPedido]) = 2010));

          Temos diversos detalhes interessantes a observar nesta instrução SQL. Primeiro um INNER JOIN relacionando as tabelas Pedidos e Detalhes Do Pedido, através do campo NúmeroDoPedido. Isso mostra que é perfeitamente possível, utilizar um INNER JOIN dentro de uma consulta de atualização. Segundo, temos a utilização da função Year para extrair apenas o ano do campo DataPedido e compará-lo com o critério 2010.
            Novamente a utilização de Operadores e Funções, nos fornece uma grande flexibilidade em termos de construção de nossas consultas.
Agora vamos passar a analisar as Instruções SQL para consultas do tipo Tabela de referência cruzada. Veremos alguns exemplos, e os detalhes a respeito de cada instrução.

  • Criar uma instrução SQL que liste o total de compras pelo NomeDaEmpresa e por ano da DataPedido. Classificar a listagem em ordem crescente do NomeDaEmpresa.

TRANSFORM Sum(([PreçoUnitário]*[Quantidade])*(1-[Desconto])) AS Expr2
SELECT Clientes.NomeDaEmpresa
FROM (Clientes INNER JOIN Pedidos
ON Clientes.CódigoDoCliente = Pedidos.CódigoDoCliente)
INNER JOIN [Detalhes do Pedido]
ON Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido
GROUP BY Clientes.NomeDaEmpresa
ORDER BY Clientes.NomeDaEmpresa
PIVOT Year([DataPedido]);

          Temos diversos detalhes a observar nesta instrução SQL. Primeiro a instrução TRANSFORM, que calcula o valor de cada ítem ( usando a fórmula ([PreçoUnitário]*[Quantidade])*(1-[Desconto]) ) e a função Sum para somar todos os ítens de um determinado cliente. Este valor calculado é que irá formar os valores da nossa referência cruzada. Temos também, a utilização de dois INNER JOIN, um ligando Pedidos com Detalhes do Pedido, através do campo NúmeroDoPedido, e outro ligando Pedidos com Clientes, através do campo CódigoDoCliente, uma vez que precisamos de informações destas três tabelas.
          A Cláusula GROUP BY agrupa a soma de todos os Pedidos de um determinado cliente, definido pelo campo NomeDaEmpresa. Os diferentes clientes, formarão as diferentes linhas da nossa referência cruzada.
          E por último, a utilização da palavra PIVOT, juntamente com a função Year, indicando que os diferentes Anos da DataPedido irão compor as colunas da nossa referência cruzada.
           
          Veja o que diz a Ajuda do Microsoft Office Access 2007sobre a instrução TRANSFORM:

Cria uma consulta tabela de referência cruzada.

Sintaxe

TRANSFORM funçãoagrg
instruçãoselect
PIVOT campocentral [IN (valor1[, valor2[, ...]])]

A instrução TRANSFORM possui as partes a seguir:

Access 2007 Avançado - Curso Completo - Júlio Battisti

Comentários:
Quando resume dados utilizando uma consulta tabela de referência cruzada, você seleciona valores de campos ou expressões especificadas como títulos de colunas para poder visualizar os dados em um formato mais compacto do que com uma consulta seleção.
A instrução TRANSFORM é opcional, mas quando for incluída será a primeira instrução em uma seqüência SQL. Ela antecede uma instrução SELECT que especifica os campos usados como títulos de linhas e uma cláusula GROUP BY que especifica o agrupamento de linhas. Opcionalmente, você pode incluir outras cláusulas, como WHERE, que especifiquem critérios adicionais de seleção ou de classificação. Você pode também usar subconsultas como atributos especificamente, aqueles em uma cláusula WHERE em uma consulta tabela de referência cruzada.
Os valores retornados em campo central são usados como títulos de colunas no conjunto de resultados da consulta. Por exemplo, articular os números das vendas no mês da venda em uma consulta tabela de referência cruzada criaria 12 colunas. Você pode restringir campo central para criar títulos a partir de valores fixos (valor1, valor2) relacionados na cláusula IN opcional. Você pode também incluir valores fixos para os quais não existam dados para criar colunas adicionais.

Alguns exemplos da ajuda do Microsoft Office Access 2007:

Para testar os exemplos a seguir no Microsoft Access 2007, crie primeiro uma nova consulta no banco de dados de exemplo Northwind. Feche a caixa de diálogo Mostrar Tabela sem especificar uma tabela ou consulta. Alterne para modo SQL, cole um exemplo individual na janela SQL e execute a consulta.
O exemplo a seguir cria uma consulta de tabela de referência cruzada que mostra vendas de produtos por mês em um ano especificado pelo usuário. Os meses são retornados da esquerda para a direita (pivotados) como colunas, e os nomes dos produtos são retornados de cima para baixo como linhas.

PARAMETERS [Vendas de qual ano?] LONG; TRANSFORM Sum([DetalhesdoPedido].Quantidade * ([DetalhesdoPedido].PreçoUnitário - ([DetalhesdoPedido].Desconto / 100) * [DetalhesdoPedido].PreçoUnitário)) AS Vendas SELECT NomeDoProduto FROM Pedidos INNER JOIN (Produtos INNER JOIN [DetalhesdoPedido] ON Produtos.CódigoDoProduto = [DetalhesdoPedido].CódigoDoProduto) ON Pedidos.NúmeroDoPedido = [DetalhesdoPedido].NúmeroDoPedido WHERE DatePart("yyyy", DataPedido) = [Vendas de qual ano?] GROUP BY NomeDoProduto ORDER BY NomeDoProduto PIVOT DatePart("m", DataPedido);

O próximo exemplo cria uma consulta de tabela de referência cruzada que retorna vendas de produtos por trimestre para cada fornecedor de um ano especificado pelo usuário. Os trimestres são retornados da esquerda para a direita (pivotados) como colunas, e os nomes dos fornecedores são retornados de cima para baixo como linhas.

PARAMETERS [Vendas de qual ano?] LONG; TRANSFORM Sum([DetalhesdoPedido].Quantidade * ([DetalhesdoPedido].PreçoUnitário - ([DetalhesdoPedido].Desconto / 100) * [DetalhesdoPedido].PreçoUnitário)) AS Vendas SELECT NomeDaEmpresa FROM Pedidos INNER JOIN ((Fornecedores INNER JOIN Produtos ON Fornecedores.CódigoDoFornecedor = Produtos.CódigoDoFornecedor) INNER JOIN [DetalhesdoPedido] ON Produtos.CódigoDoProduto = [DetalhesdoPedido].CódigoDoProduto) ON Pedidos.NúmeroDoPedido = [DetalhesdoPedido].NúmeroDoPedido WHERE DatePart("yyyy", DataPedido) = [Vendas de qual ano?] GROUP BY NomeDaEmpresa ORDER BY NomeDaEmpresa PIVOT "Trim " & DatePart("q", DataPedido) In ('Trim 1', 'Trim 2', 'Trim 3', 'Trim 4');

          Na ajuda do Microsoft Office Access 2007 existe uma série de informações sobre SQL, conforme veremos no final deste ítem. Agora vamos ver mais alguns exemplos de instruções SQL que criam consultas do tipo Consulta de tabela de referência cruzada.

  • Criar uma instrução SQL que gere uma Consulta de tabela de referência cruzada. As linhas deverão ser formadas pelo CidadeDestino da tabela Clientes. As colunas serão formadas pelo número do mês da DataPedido e os valores serão formados pela contagem de pedidos. Adicionar um critério de tal forma que somente sejam exibidos os registros para Franca-SP ou Salvador-BA.

TRANSFORM Count(Pedidos.NúmeroDoPedido) AS ContarDeNúmeroDoPedido
SELECT Clientes.CidadeDestino
FROM Clientes INNER JOIN Pedidos
ON Clientes.CódigoDoCliente = Pedidos.CódigoDoCliente
WHERE (((Clientes.CidadeDestino) In ("Franca-SP "," Salvador-BA ")))
GROUP BY Clientes.CidadeDestino
PIVOT Month([DataPedido]);

          Utilizamos a função Count para contar o número de Pedidos por CidadeDestino e por Mês. Também utilizamos um INNER JOIN para relacionar as tabelas Clientes e Pedidos, através do campo CódigoDoCliente.  A utilização da cláusula WHERE, juntamente com o operador IN para limitar o CidadeDestino a Franca-SP ou Salvador-BA. O GROUP BY indicando que o campo CidadeDestino formará as linhas da referência cruzada. Finalmente a utilização de PIVOT com a função Month ( Mês) indicando que os meses da DataPedido formarão as colunas da referência cruzada.

          Agora vamos aprender a construir instruções SQL para consultas de exclusão. Veremos que a simplicidade da linguagem SQL facilita em muito o entendimento e a aprendizagem destas instruções.

  • Criar uma instrução SQl que elimine todos os Pedidos da tabela Pedidos cujo CidadeDestino seja a Franca-SP

DELETE Pedidos.CidadeDestino
FROM Pedidos
WHERE (((Pedidos.CidadeDestino) = " Franca-SP "));

          A instrução é tão simples, que praticamente dispensa comentários. A única recomendação importante é que não devemos utilizar uma instrução DELETE, sem a utilização de uma cláusula WHERE. Utilizar um DELETE sem uma cláusula WHERE significa que estaremos eliminando todos os registros da tabela.
          Vamos criar instruções SQL com parâmetros ( Consultas parametrizadas), que ao serem executadas solicitam ao usuário que seja digitado um valor para o parâmetro.

  • Criar uma instrução SQL que selecione os campos NúmeroDoPedido, DataPedido, Frete e CidadeDestino da tabela Pedidos. Fazer com que ao ser executada, a consulta solicite que seja digitado o nome da Cidade e que sejam retornados apenas os Pedidos para o CidadeDestino digitado.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.Frete, Pedidos.CidadeDestino
FROM Pedidos
WHERE (((Pedidos.CidadeDestino)=[Digite a Cidade:]));

          Na hora que esta instrução SQL é executada, o Microsoft Office Access 2007localiza na cláusula WHERE, após o sinal de igual a expressão:  [Digite a Cidade:]. Como esta expressão não é o nome de nenhum campo, o Microsoft Office Access 2007 abre uma janela pedindo que seja digitado um valor, este valor substitui a expressão. Por exemplo, ao executar esta consulta o Microsoft Office Access 2007 pede que seja digitado o nome da Cidade, se você digitar Franca-SP, a cláusula WHERE fica da seguinte maneira: 

WHERE (((Pedidos.CidadeDestino = "Franca-SPl"))
,e somente serão listados os Pedidos cuja Cidade de Destino for igual a Franca-SP. As aspas são colocadas pelo Microsoft Access 2007, porque o campo CidadeDestino é do tipo texto.

  • Alterar a instrução SQL do exemplo anterior para que além do CidadeDestino, seja solicitada uma Data Inicial, uma Data Final. Somente devem ser listados os registros para a Cidade digitada e dentro do Período especificado.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataPedido, Pedidos.Frete, Pedidos.CidadeDestino
FROM Pedidos
WHERE (((Pedidos.DataPedido) Between [Data Inicial:] And [Data Final:])
AND ((Pedidos.CidadeDestino)=[Digite a Cidade:]));

          Observe a utilização do operador Between, junto com os parâmetros [Data Inicial:] e [Data Final:]. Os parâmetros nos campos DataPedido e CidadeDestino estão ligados por um AND ( Operador E), conforme explicado anteriormente.
          Existe uma série de detalhes sobre a utilização do SQL. Existem, também, diversas situações onde podemos utilizar uma instrução SQL para retornar dados. Por exemplo, ao construir uma Caixa De Combinação em um formulário, podemos utilizar uma Instrução SQL para buscar dados em uma Tabela, dados estes que serão exibidos na Caixa de Combinação. Podemos utilizar instruções SQL, juntamente com Funções de Domínio para exibir valores em formulários, como por exemplo, a média de vendas para um determinado período, o total de vendas para um determinado cliente, e assim por diante.

            Uma pergunta que fica é: Onde posso encontrar mais informações sobre o SQL?
            Um bom ponto de partida é a Ajuda do Microsoft Access 2007. Agora indicaremos alguns locais na Ajuda do Microsoft Access 2007, onde você poderá encontrar informações sobre SQL.

Para encontrar informações sobre o SQL na Ajuda do Microsoft Office Access 2007faça o seguinte:

  • Clique no ícone do Ajuda Access 2007 Avançado - Curso Completo - Júlio Battisti, surgirá umapágina do Ajuda. Dê um clique no ícone mostrar sumário Access 2007 Avançado - Curso Completo - Júlio Battisti. É mostrado o sumário completo do Ajuda do Microsoft Access 2007.
  • Dê um clique duplo para abrir o livro "Automação e Programação". Dentro deste livro você irá encontrar “Referência SQL”. Você irá encontrar vários tópicos sobre a utilização do SQL.
  • Para maiores informações, digite a palavra SQL e clique em perquisar, será mostrado vários tópicos relacionado com a palavra. A seguir a página do Ajuda.

Access 2007 Avançado - Curso Completo - Júlio Battisti
Figura 71 - Página do Ajuda.

CONCLUSÃO:

          Nesta seção, vimos diversos aspectos sobre a utilização avançada de consultas.
Iniciamos com a utilização de colunas calculadas em consultas, através da utilização de funções do Microsoft Access 2007. A criação de colunas calculadas é de grande utilidade, uma vez que uma das regras de Design de Banco de Dados é não armazenar dados calculados, mas sim calculá-los quando for necessário, o que é possível de ser feito através das consultas.
Também aprendemos sobre a utilização de Critérios avançados e funções de Domínio. Aprendemos a utilizar diversos operadores como: Like, Between, In, etc. Utilizamos diversas funções de Domínio para a construção das consultas propostas. A combinação de Operadores, Funções do Microsoft Office Access 2007 e funções de Domínio, nos oferece uma grande flexibilidade e poder na construção de consultas.
Na seqüência foram apresentadas e explicadas as consultas com parâmetros. A utilização de parâmetros torna as consultas bem mais ágeis e versáteis. Cada vez que a consulta é executada o valor de um ou mais parâmetros é solicitado e os registros que se enquadram nos parâmetros digitados, são retornados. Com isso posso executar a consulta diversas vezes, com diferentes parâmetros, sem ter que ir para o Modo Design e alterar o valor dos parâmetros.
Também aprendemos um pouco mais sobre as consultas do tipo Tabela de referência cruzada, a qual nos oferecem uma maneira rápida e fácil de exibir dados consolidados, cruzando informações como por exemplo, o total anual de vendas por CidadeDestino.
Os demais tipos de consultas: Criar tabela, Consulta atualização, Consulta exclusão e Consulta acréscimo, foram vistas na seqüência, bem como a utilização de cada uma em situações do dia-a-dia.
Finalmente foi apresentada uma noção da linguagem SQL e da construção de consultas a partir do SQL. Vimos também algumas situações práticas onde podemos aplicar instruções SQL para retornar dados. Para finalizar, foi apresentada uma breve descrição sobre onde localizar maiores informações sobre o SQL na ajuda do Microsoft Access 2007.
Conhecer bem as consultas e a sua utilização é de fundamental importância no uso correto do Microsoft Access 2007. Por isso procuramos apresentar diversos exemplos, em detalhes, nesta seção. Nas próximas seções estaremos trabalhando com formulários, relatórios, etc. Muitas vezes teremos que construir consultas. Caso você tenha alguma dificuldade na construção das consultas solicitadas, basta voltar nesta seção e revisar os conceitos apresentados.

« Anterior Δ Página principal ¤ Índice Próxima »

ESTA LIÇÃO FAZ PARTE DO SEGUINTE LIVRO DO JÚLIO BATTISTI:

 

Se você não quiser aguardar até que todas as lições sejam publicadas aqui no site (previsão de conclusão para o final de 2017), você pode ter acesso a todas as lições comprando o livro a seguir e ainda receber, de bônus, mais de 37 horas de Vídeo Aulas de Access.

 

Aprenda com Júlio Battisti: Access 2007 Avançado,

Macros e Introdução à Programação VBA

  • Crie campos calculados, critérios avançados e Consultas Parametrizadas.

  • Aprenda os comandos SQL em detalhes.

  • Criação e Utilização de Macros.

  • Configurações de Segurança do Banco de dados.

  • Exemplos práticos explicados passo a passo.

  • Introdução à programação VBA com exemplos.

  • BôNUS: 37,5 horas de Vídeo Aulas de Excel e Acc.ess +  DVD com 3167 E-books + 2400 Planilhas Profissionais Editáveis do Excel de bônus.

Aprenda com Júlio Battisti: Access 2007 Avançado, Macros e Introdução à Programação VBA

Aprenda com Júlio Battisti: Access 2007 Avançado, Macros e Introdução à Programação VBA

Na compra deste livro você recebe, via Download, todos os Bônus a Seguir:

  • Bônus 01: Vídeo Aula: Access 2007 - Básico e Prático - 5:30 horas

  • Bônus 02: Vídeo Aula: Access 2007 - Consultas - 4:30 horas

  • Bônus 03: Vídeo Aula: Access 2007 - Intermediário - 5:00 horas

  • Bônus 04: Vídeo Aula: Access 2007 - Formulários e Macros - 6:00 horas

  • Bônus 05: Vídeo Aula: Access 2007 - Avançado e VBA - 11:30 horas

  • Bônus 06: Pacote com 3167 E-books com Cursos de Informática.


Livros e Vídeo Aulas sobre Banco de Dados:

A Bíblia de Banco de Dados SQL e o Modelo Relacional de Dados

Apre.nda com Júlio Battisti: Acc.ess 2010 Avançado, Macros e Programação VBA - Passo a Passo

Apre.nda com Júlio Battisti: Banco de Dados e Acc.ess 2010 - Através de Exemplos Práticos - Passo a Passo

[186 Vídeo Aulas em 3 DVDs - Frete Grátis]: Linguagem SQL + Banco de Dados + Análise e Modelagem de Banco de Dados - Curso Completo - 186 Vídeo Aulas - 3 DVDs

  [Vídeo Aula - Frete Grátis:] Oracle PL SQL Procedures Functions Triggers Forms Reports - Curso Completo - 182 Vídeo Aulas - 3 DVDs

Best Sellers de Access do Julio Battisti

Todos com Vídeo Aulas, E-books ou Exemplos de Brinde!

Programação VBA no Access 2010 - Passo a Passo

 Aprenda com Júlio Battisti: Access 2010 Básico em 140 Lições - Através de Exemplos Práticos

 

Autor: Júlio Battisti | Páginas: 1164 | Editora: Instituto Alpha

 

[Livro]: Aprenda com Júlio Battisti: Access 2010 Básico em 140 Lições - Através de Exemplos Práticos

Access 2010 - Curso Completo - Passo a Passo

Livro: Aprenda com Júlio Battisti: Access 2010 Completo, Análise de Dados, Tabelas Dinâmicas, Funções Avançadas, Macros e Programação VBA - Passo a Passo

 

Autor: Júlio Battisti | Páginas: 1602 | Editora: Instituto Alpha

 

Livro: Aprenda com Júlio Battisti: Access 2010 Avançado, Análise de Dados, Tabelas Dinâmicas, Funções Avançadas, Macros e Programação VBA - Passo a Passo

Todos os livros com dezenas de horas de vídeo aulas de bônus, preço especial (alguns com 50% de desconto). Aproveite. São poucas unidades de cada livro e por tempo limitado.

Dúvidas?

Utilize a área de comentários a seguir.

Me ajude a divulgar este conteúdo gratuito!

Use a área de comentários a seguir, diga o que achou desta lição, o que está achando do curso.
Compartilhe no Facebook, no Google+, Twitter e Pinterest.

Indique para seus amigos. Quanto mais comentários forem feitos, mais lições serão publicadas.

Quer receber novidades e e-books gratuitos?
›››

Novidades e E-books grátis

Fique por dentro das novidades, lançamento de livros, cursos, e-books e vídeo-aulas, e receba ofertas de e-books e vídeo-aulas gratuitas para download.



Institucional

  • Quem somos
  • Garantia de Entrega
  • Formas de Pagamento
  • Contato
  • O Autor
  • Endereço

  • Júlio Battisti Livros e Cursos Ltda
  • CNPJ: 08.916.484/0001-25
  • Rua Vereador Ivo Cláudio Weigel, 537 Universitário
  • Santa Cruz do Sul/RS
  • CEP 96816-208
  • Todos os direitos reservados, Júlio Battisti 2001-2017 ®

    [LIVRO]: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2010 - PASSO-A-PASSO

    APRENDA COM JULIO BATTISTI - 1124 PÁGINAS: CLIQUE AQUI