MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    (RESOLVIDO) Ordenar consulta numericamente em campo de texto

    avatar
    nucosta
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 25
    Registrado : 24/07/2012

    (RESOLVIDO) Ordenar consulta numericamente em campo de texto Empty (RESOLVIDO) Ordenar consulta numericamente em campo de texto

    Mensagem  nucosta em 26/3/2018, 20:03

    Boa tarde,

    Numa tabela tenho algumas provas de atletismo com respectiva classificação.
    Nessa tabela tem o campo de texto classificação que terá os valores (1,2,3,4,5,etc,Desc,dns, dnf)

    Numa consulta quero ordenar logicamente pela classificação numericamente deixando no fundo os desc, dns e dnf.

    Sugestões?
    Nuno
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    (RESOLVIDO) Ordenar consulta numericamente em campo de texto Empty Re: (RESOLVIDO) Ordenar consulta numericamente em campo de texto

    Mensagem  CassioFabre em 26/3/2018, 21:01

    Boa tarde,

    O SQL da consulta ficaria assim:
    Código:
    SELECT * FROM tab ORDER BY classificacao ASC

    O identificador ASC (ascending) ordenará os dados em ordem alfanumérica (já que o campo é do tipo texto) ascendente (do menor para o maior), primeiro os numeros e depois quaisquer textos em ordem alfabética, ou seja, supondo que tenha as classificações como da imagem abaixo:
    (RESOLVIDO) Ordenar consulta numericamente em campo de texto 113

    Voce usará esta consulta e retornará os dados da seguinte maneira:
    (RESOLVIDO) Ordenar consulta numericamente em campo de texto 212

    Claro que usei aqui num listbox, mas voce pode usar em consultas comuns também.

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    avatar
    nucosta
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 25
    Registrado : 24/07/2012

    (RESOLVIDO) Ordenar consulta numericamente em campo de texto Empty Re: (RESOLVIDO) Ordenar consulta numericamente em campo de texto

    Mensagem  nucosta em 26/3/2018, 22:02

    Boa noite,

    Obrigado CassioFabre mas creio que não funciona a partir do décimo classificado.

    Eu já resolvi, no entanto não sei bem como. Vou deixar um pouco mais o tópico aberto porque gostava de compreender.

    Para exemplificar o problema vou anexar uma base de dados com exemplo.

    Tem duas tabelas exactamente iguais de resultados (só o nome dos campos é diferente mas o resto é igual).

    Ambas as tabelas foram importadas de um ficheiro txt.

    O comportamento do campo da classificação é diferente (não consigo compreender porquê).

    Um ficheiro foi importado pelo access normalmente, o outro foi importado por VBA.

    No código VBA tinha o comando trim para eliminar todos os espaços em branco e ficar só com os dados correctos.

    Quando tirei o trim e deixei ficar com o espaço à esquerda ele ordena como eu quero.

    Não percebo.

    (Não consegui colocar a base de dados por questão de espaço, fica o link dropbox
    https://www.dropbox.com/s/tz7n0y0fpt89bl8/Resultados2.zip?dl=0 )
    Cumprimentos,
    Nuno
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    (RESOLVIDO) Ordenar consulta numericamente em campo de texto Empty Re: (RESOLVIDO) Ordenar consulta numericamente em campo de texto

    Mensagem  CassioFabre em 27/3/2018, 11:47

    Bom dia,

    Como o tipo de dados do seu campo é text, mesmo que o que está inserido por vezes é integer, o mau funcionamento em relação a algarismos maiores que 10 se dá pelo fato da função pegar o primeiro número e fazer a comparação, da mesma forma que se faz para saber se uma palavra vem primeiro que a outra em ordem alfabética. Exemplo:

    Qual palavra viria primeiro em ordem alfabética ascendente: Abstrato ou Aberto? Vejamos: A primeira letra das duas palavras são iguais, então vamos para a próxima. As segundas também são iguais, vamos à próxima. Na terceira letra temos caracteres diferentes. Entre s e e, a segunda vem primeiro, certo? Logo, a palavra Aberto vem antes da palavra Abstrato.

    Aplicando isso na classificação:
    Se voce tem as classificações 1, 2 e 10 qual vem primeiro? Seguindo a mesma lógica acima a ordem ficaria 1, 10 e 2, pois o 1 (do número um) e 1 (do número 10) vem antes do 2.

    Toda comparação textual vai funcionar dessa maneira. Como resolver? Aplique o 0 antes dos algarismos unitários, ou seja, ao invés de classificar o cara como 1, classifique-o como 01. Neste caso dará certo. Mas lembre-se de retirar os espaços do campo.

    Quanto ao comportamento da tabela Results que funciona corretamente é pelo fato de APENAS nos algarismos unicos (de 1 a 9) voce colocou o espaço antes. O caractere "espeço" é ordenado ants de número e letras pelo VBA, por isso funciona certo. Você também pode fazer isso para classificar, ao invés de usar o 0.

    Espero que tenha entendido.

    Abraço.


    .................................................................................
    Só não tem código pra morte!
    avatar
    nucosta
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 25
    Registrado : 24/07/2012

    (RESOLVIDO) Ordenar consulta numericamente em campo de texto Empty Re: (RESOLVIDO) Ordenar consulta numericamente em campo de texto

    Mensagem  nucosta em 27/3/2018, 12:08

    Correcto.
    Básico mesmo.
    Não tinha dado conta desse facto na importação.

      Data/hora atual: 24/10/2020, 01:35