sexta-feira, 23 de setembro de 2011

Selecionando Duas Tabelas Diferentes

           Dessa vez foi mais simples, mas tem algumas pessoas que ainda não entenderam como checar duas tabelas que estão relacionadas, vamos começar montando o exemplo, mas como eu não gosto de fruta, mamão com açúcar seria inútil.

           Tabela de Carro Novos (tb_carro_novo)
  
           car_codigo  -----  int ----- not null ----- PK
           car_modelo -----  varchar ----- not null 
           car_marca   ----- varchar  ----- not null
           car_cor       ----- varchar  ----- not null
           


          

           Tabela de Carro Usados (tb_carro_usado)

  
           car_codigo  -----  int ----- not null ----- PK
           car_modelo -----  varchar ----- not null 
           car_marca   ----- varchar  ----- not null
           car_cor       ----- varchar  ----- not null



           Tabela de Placas Registradas (tb_placa)

           pla_codigo  -----  int ----- not null ----- PK           car_codigo  -----  int ----- not null ----- FK
           pla_numero ----- varchar  ----- not null
           


           Com as tabelas definidas vamos montar uns exeplos de consultas:


            Consulta simples dos carros novos:


            Select * from tb_carro_novo // Selecionar todos os carros novos

              Consultas compostas entre tabela de carros usados e suas tabela de placas registradas na tabela de placas:     


              1º modo:
 
            Select * from tb_carro_usado X, tb_placa Z
               where x.car_codigo = z.car_codigo



            Observe: Ao selecionar a tabela de carros usados eu apelidei a tabela de "X" para que fique menor o código e a tabela de placas fiz o mesmo chamando de "Z" , veja como ficaria se não fizesse isso:

            Select * from tb_carro_usado, tb_placa
            where tb_carro_usado.car_codigo = tb_placa.car_codigo

            Com duas tabelas o código fica somente um pouco maior, mas vamos dizer que você precise selecionar 3 ou 4 tabelas, o código ficará bem maior.


            Agora vou explicar um pouco sobre a família JOIN que tem muita gente que não sabe muito bem como funciona então vamos lá:




            Left Join: Verificará e trará os campos solicitados somente da tabela que estiver a esquerda da comparação entre tabelas relacionadas.


            Right Join: O mesmo fará o right join porém buscando os campos da tabela que está a direita da comparação entre as tabelas relacionadas.


            Inner join: O efeito é trazer os campos de ambas tabelas relacionadas dentro da comparação feita entre elas.


           então vamos ao 2º Modo:

              Select * from tb_carro_usado X left join (tb_placa Y) on 
            (X.caruso_codigo = Y.caruso_codigo)
             
           Sendo assim buscamos os dados contidos na tabela de carros usados que estão cadastradas placas referentes a eles, os que não estiverem não serão mostrados.





          Vamos selecionar todos os carros novos e usados numa mesma consulta usando o camando Union, observe:


          select * from tb_carro_novo union select * from tb_carro_usado
 
 
          O banco de dados trará os dados da primeira tabela selecionada e em seguida o da segunda tabela no mesmo resultado, mas reparem que ele manteve a descrição da coluna da primeira tabela, porém ninguém uni nada sem um objetivo verdadeiro, então vamos dizer que o cliente quer saber quais carros da marca CHEVROLET a loja tem sendo usado ou não ai a chamada dos dados ficaria assim:


          
     (select * from tb_carro_novo where carnovo_marca = 'CHEVROLET')
       union 
      (select * from tb_carro_usado where caruso_marca = 'CHEVROLET')


      Observe que eu coloquei a cláusula where dentro do primeiro select e depois no segundo select para que traga a condição nas duas tabelas.
      Algumas pessoas podem estranhar o motivo de eu colocar o nome CHEVROLET em maiúsculo, é que eu mantenho o meu banco de dados utilizando maiúsculo para padronização de tamanho.


       Agora só pra terminar vamos selecionar na tabela de carros novos um lista de modelos de carros.

       Select * from tb_carro_novo
       where carnovo_modelo in ('CIVIC', 'CELTA', 'FIESTA')
       union
       Select * from tb_carro_usado
       where caruso_modelo in ('PALIO', 'GOL', 'CLIO')


       Sendo que eu não adicionei nenhum carro da Renault o CLIO não aparecerá, caso contrário estará lá no resultado.




       Bom, esta foi mais uma ajudinha pra galera.

       Espero ter ajudado.

       Que a força esteja com os Geeks.

quarta-feira, 17 de agosto de 2011

Filtrar intervalo de datas e nomes (SQLServer)

Como dá pra perceber mais duas dicas sobre informática sobre programação, dessa vez no banco de dados.

As perguntas foram:

1. "Como faço pra filtrar todos os clientes que eu tenho que foram cadastrados em um intervalo de data?"

2. "Como faço a mesma coisa definindo também um filtro de nome, por exemplo Pedro?"


Bom, vamos por ordem.





primeira pergunta (Resposta):


   Você deve utilizar o comando Between que define um intervalo em um campo seja ele numérico, de data ou valor monetário.


   Criei uma tabela chamada tb_cliente contendo os campos:


   cliente_codigo - tipo Integer - chave primária.
   cliente_nome  -  tipo Varchar (45).
   cliente_data_cadastro - tipo DateTime.


   para buscar todo mundo cadastrado de 01 junho de 2011 até 31 de agosto de 2011 eu coloquei o seguinte comando:




    Select * from tb_cliente
     where cliente_data_cadastro between '2011-06-01' and '2011-08-31'

    sendo assim a tabela retornará todos nesse intervalo de data.


    2 Pergunta (Resposta):


    Pra você filtrar pelo nome você tem que ver o que vc quer fazer, por exemplo:




    Procurar clientes que comecem com o nome PEDRO.

    Select cliente_nome from tb_cliente
    where cliente_nome like 'PEDRO%'


     Procurar clientes que terminem com o nome SILVA.

     Select cliente_nome from tb_cliente
     where cliente_nome like '%SILVA'


     Procurar clientes que tenham o nome PEDRO em qualquer posição do nome.

     Select cliente_nome from tb_cliente
     where cliente_nome like '%PEDRO%'



     Unindo as informações podemos responder a segunda pergunta:


     Select * from tb_cliente
     where cliente_nome like '%PEDRO%' and
              cliente_data_cadastro between '2011-006-01' and '2011-08-31'




     Espero ter ajudado, qualquer coisa entre em contato comigo.


     Abraço a todos.

     






   

segunda-feira, 15 de agosto de 2011

Resultado de uma Query num Combobox (Delphi + SQL)


Olá amigos,

Hoje vou ajudar um amigo que me pediu pra explicar como colocar o resultado de uma busca com uma Query dentro de um combobox na linguagem Delphi, essa informação é para profissionais da área então para o blog essa informação fica avaliada como Grau de Profissional (Médio), mas então vamos lá:


Primeiro vamos começar explicando que o componente Combobox tem propriedades e elas seram editadas, nesse exemplo iremos editar a propriedade "Itens" observe.


Dentro de um botão do tipo BitBtn vou colocar para fazer a busca em uma tabela de exemplo onde contém nomes de Alunos a qual nomeei TbAluno como mostra a figura 01.




fig01.

 





 Observem que foi utilizado no formulário:


  1. Combobox
  1. Botão do tipo BitBtn
  1. DataBase
  1. Query (Nomeada QueryAula).


  O DataBase foi utilizado para fazer contato com o banco de dados onde está localizada a tabela tbAluno.


  Estou levando em consideração que você sabe fazer contato com o banco de dados já que o objetivo é somente inserir no Combobox os dados da busca nele.


  Sendo assim com a Query nomeada de QueryAula coloquei na sua propriedade SQL localizada no object inspector o seguinte comando como mostra a figura 02:


    Fig02.


   


 
  Código SQL:
    
     select * from tb_aluno
      
     // Selecionar todos os alunos cadastrados na tabela de alunos (tb_aluno).






Após inserir o código na query vamos ter que informar uns códigos bem simples no botão BitBtn1 observe na figura 03.




fig03.


  
    Observe:

    Antes de começar alguma operação com a QueryAula eu fechei ela para que informações defasadas não sejam pertinentes na nossa nova busca e abri novamente para trazer informações atuais pois ao abrir a QueryAula a mesma executa o comando SQL buscando os alunos cadastrados.


    QueryAula.Close;
    QueryAula.Open;

   
   Depois eu verifiquei se ela conseguiu trazer algum registro do banco de dados e condicionei que se ela estivesse vazia de registro que mandasse uma mensagem ao usuário informando a ele sobre a situação.




    if QueryAula.IsEmpty then
     begin
       ShowMessage('Nenhum registro encontrado!');
       Exit;
     end

    Logo depois continuei com um comando ELSE, e neste momento estou confiante que você sabe utilizar o fomando if, then e else, e coloquei o comando para situação contrária de vazio para a QueryAula, dizendo aos programa que percorra todos os registros um a um colocando os nomes dos alunos no Combobox do formulário.


 Else 
  begin
    While not QueryAula.EOF do
      begin
        Combobox1.Itens.Add(
        QueryAula.FieldByName('nome_aluno').asString);
        QueryAula.Next;
      end;
  end;



Juntando tudo fica assim:





    QueryAula.Close;
    QueryAula.Open;

    
    if QueryAula.IsEmpty then
     begin
       ShowMessage('Nenhum registro encontrado!');
       Exit;
     end
    else 
     begin
       While not QueryAula.EOF do
         begin
           Combobox1.Itens.Add(
           QueryAula.FieldByName('nome_aluno').asString);
           QueryAula.Next;

         end;
     end;
   

     Selecione o componente Combobox1 e altere a propriedade Style no Object Inspector para csDropDownList para ficar melhor a visualização do resultado da busca já no combobox.




    Depois de tudo prontinho executamos, clicamos no botão para executar a busca e se houver algum registro ele manda uma mensagem de sucesso, caso contrário ele manda uma mensagem de falha, logo depois podemos ver o resultado na figura 04 com todos os alunos cadastrados no combobox.




fig 04.

   



    Bom, tentei deixar tudo bem explicadinho, se você tiver dificuldades entre em contato comigo.
    Pra melhorar um pouco mais vou deixar o código do botão dentro de um arquivo de texto no grupo do google pra vocês, junto com as imagens da explicação.


    Grupo do Google TecnicaSys - Apoio de Informática.

   O endereço estará disponível para vocês se cadastrarem para ter acesso aos assuntos e dados contidos no grupo do google.


   Espero ter ajudado.

segunda-feira, 27 de junho de 2011

Revira Texto - Programa Inverter Link's

Alô pessoal, 

Estou aqui pra ajudar novamente e dessa vez é pra galerinha que gosta de fazer download de sites como megaupload, easy share, hotfile, fileserve e etc mas hoje os sites tem um tal de protetor de link pedindo pra você cadastrar o seu celular e depois sim conseguir acesso ao site desejado, todo mundo sabe que o link pode ser recortado para ficar somente com o caminho do site por exemplo:
   Com protetor de link fica assim:
   http://castordownloads.net/protetor/?url=http://www.megaupload.com/?d=JRWUI1112

    Observem que o link tem o endereço do megaupload com o devido arquivo
   http://www.megaupload.com/?d=JRWUI1112

   Se você copiar somente essa parte do link e colar na barra de endereço do seu navegador (internet explorer, firefox, google chrome e etc) e pressionar enter ele sai do protetor de link e vai para o site do megaupload, nesse caso, sem ter que esperar o tempo de liberação para o link, bom até ai tudo bem isso não é novidade, mas alguns sites o link tá vindo assim:

   Com protetor de link:

   http://protetor.yesdownloads.org/redirect/?url=RUPI1111=d?/moc.daolpuagem.www//:ptth 

   Observe que tem o mesmo pedacinho que encaminha pro site do megaupload nesse site mas o endereço tá invertido.

   RUPI1111=d?/moc.daolpuagem.www//:ptth 

   então agumas pessoas digitam ao contrário a informação que também dá resultado mas as vezes demora tanto digitar que o tempo de liberação é mais rápido que você, sem falar que as vezes você digita tudinho e quando consegue entrar no site o link foi removido ou até mesmo digitar errado o endereço pode levar você a perder tempo, então resolvi criar um programinha que faz o trabalho de inverter o que está escrito no link sem esforço.


   Observe nas imagens.

   fig 01.

     

     Copie e cole na parte escrita "Texto Virado" o link invertido que o site mostrou pra você observe a fig 02.

   

     Pressione o botão ok e veja que ele inverte o que está escrito em cima no campo de baixo, "Texto Revirado", observe a fig 03.



Agora é só você copiar o texto correto e colar na barra de endereço do seu navegador, depois pressione enter e prontinho você será encaminhado para o site do megaupload para baixar o seu arquivo desejado.
  

Esse programinha foi desenvolvido por mim mesmo e está disponível no link, sem proteção de link, rsrsrs aqui!



O programa é pequenino contendo menos de 1mb e não precisa instalar no computador, façam bom uso.

Espero ter ajudado.

Abraço a todos.

quinta-feira, 2 de junho de 2011

Codecs

Olá pessoal,

Hoje me enviaram uma pergunta simples e estou respondendo aqui.

Porque o meu computador não passa determinados tipos de vídeos e nem toca todos os tipos de músicas?

A pergunta foi exatamente essa então vamos primeiro entender como a coisa toda funciona, vou procurar ser mais claro possível.


Áudios e Vídeos são codificados e comprimidos em alguns formatos e essa transição de descompressão e decodificação do arquivo para que os programas consigam ler perfeitamente mantendo qualidade e integridade da informação é feita pelo Codec, esses tipos podem variar muito.

Exemplos:

Áudios:


Mp3 e Wav

Vídeos:
Avi, Mpeg e Rmvb

Uma solução para o seu problema é instalar codecs para que os seus programas possam ler os arquivos, um dos codecs mais conhecidos é o K-lite Codec Pack, disponível num link no final do blog, baixe e instale selecionando todas as opções de Audios e Videos, assim você poderá assistir vários tipos de vídeos.

Lembre-se de reiniciar o seu sistema operacional para que não haja erros.