none
Dificuldades com IS NOT NULL? RRS feed

  • Pergunta

  • Alguém poderia ajudar? Excel e Access 2007.

    Nessa tabela existem campos vazios e não quero vê-los.

    Minha tabela está assim:

    Salgados / Bebidas / Sorvetes

    Coxinha / Coca Cola / Kibon

    Kibe / Pepsi   / Pablito

           / Fanta / Magnum

          /         /  Frutare    

    Testei  os códigos abaixos:

    Obs: Opcao é uma variável pública que armazena a coluna que o usuário escolhe ao clicar em um botão.

    Dim Cx As New Classeconexao
    Dim banco As ADODB.Recordset
    Dim sql As String, nProduto As String, Imagem As String
    
    Set banco = New ADODB.Recordset
    
    sql = " SELECT * FROM Grupo_de_Produtos "
    sql = sql & " WHERE NOT '" & Opcao & "' IS NULL " '"
    
    sql = " SELECT * FROM Grupo_de_Produtos "
    sql = sql & " WHERE '" & Opcao & "' NOT IS NULL " '"
    
    Cx.Conectar
    
    On Error Resume Next
    banco.Open sql, Cx.Conn
    
    While Not banco.EOF
    
    nProduto = banco.Fields(Opcao)
    
    banco.MoveNext
    
    Wend
    
    Cx.Desconectar

    Queria que o While percorresse somente os campos preenchidos. Ex: Se essa variável Opcao estiver com Salgados, que percorra até a segunda linha dessa coluna e depois saia fora, encerre o while. Atualmente ele percorre até a quarta linha por causa da coluna Sorvetes que tem mais produtos;

    Obs: Sei que resolveria isso criando uma tabela para cada Produto, mas pretendo usar assim mesmo, algumas colunas vão ter campos vazios, sei que se o IS NOT NULL pode resolver, só não estou sabendo como fazer.

    Obrigado.

    At






    • Editado Depoisteconto sexta-feira, 13 de setembro de 2013 02:40
    sexta-feira, 13 de setembro de 2013 02:35

Respostas

  • Reveja a estrutura da sua tabela, ela foge um pouco das boas práticas de design de base de dados. Numa base de dados, cada linha de uma tabela representa normalmente uma informação. Por exemplo, uma tabela de cadastro tem os campos Nome, Data de Nascimento e Telefone. Desta forma, cada linha representa uma pessoa. No seu caso, cada linha não representa uma unidade de nada. Além disso, não é recomendável deixar muitos espaços em brancos na tabela. Dados em branco podem fazer confusão com o engine que acessa a base de dados, pois dependendo de algumas situações, podem ser considerados NULL, 0 ou "".

    Lembro-me uma vez que você fez a mesma coisa, numa tabela com cidades de estados do Brasil, em que cada coluna representava um estado.

    Minha sugestão seria você criar uma tabela com três campos: ProdutoID, NomeProduto, TipoProduto, em que este terceiro campo pode assumir os valores "Salgado", "Bebida" ou "Sorvete".

    De qualquer forma, se não quiser alterar a estrutura de sua tabela e continuar utilizando desta forma, tire a cláusula IS NOT NULL da instrução SQL e use o código abaixo:

    While Not banco.EOF
        If Not IsNull(banco.Fields(Opcao)) Then
            nProduto = banco.Fields(Opcao)
        End If
    banco.MoveNext


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 16 de setembro de 2013 22:53
    Moderador