Forzare ordine alfabetico/numerico

di il
5 risposte

Forzare ordine alfabetico/numerico

Ciao a tutti.
Spesso mi trovo a dover...registrare dei record dandogli un identificativo manuale, che a volte può essere un numero, altre una lettera, che viene registrato in un campo testo (ovviamente la tabella ha un suo ID numerico separato e univoco per ogni record)

Ora, se per i numeri questi vanno da 0 a infinito, nel caso delle lettere no, e quindi arrivato a Z (purtroppo a volte succede, anche se sporadicamente.....), ricomincio da AA, AB, AC, insomma stile excel.

Il problema è che quando poi eseguo una query per recuperare i dati, e li ordino per quel campo testo, ottengo qualcosa tipo:

A, AA, AB, B, C, D invece che A, B, C, D, AA, AB
oppure
1, 10, 11, 2, 3 invece di 1, 2, 3, 10, 11

Francamente a me lo cosa non creerebbe nessun problema, ma a chi sta sopra di me causa notti insonni ed agitate, turbamenti indicibili, nonchè ulcere perforanti a manetta, attacchi epilettici, pestilenze, carestie, piaghe d'egitto.....

Il problema (soprattutto in caso di numeri) nasce dal fatto che il campo in questione è numerico.

C'è modo di risolvere il problema?

Grazie a tutti

Andrea

5 Risposte

  • Re: Forzare ordine alfabetico/numerico

    Un ordinamento numerico NON E' un ordinamento ""lessicografico"", ovviamente

    Per avere un ordinamento sulle parole STILE quello dei numeri, ti serve un DOPPIO ordinamento (o un ordinamento su DUE colonne)

    1. il primo ordinamento sulla LUNGHEZZA della parola (corrisponde al numero di cifre del numero), in questo modo le parole piu' corte vengono messe PRIMA di quelle piu' lunghe

    2. il normale ordinamento lessicografico, MA in questo caso su parole della STESSA lunghezza. Guarda caso questo coincide con un normale ordinamento numerico

    il trucco aggiuntivo, se esiste una lunghezza massima predeterminata delle parore, e non e' eccessiva, e' quello di mettere in testa alla parola degli spazi che servono per avere la stringa di quella lunghezza.

    poiche' lo spazio ha codice ASCII minore di qualunque carattere, e' come mettere degli 0 in testa ad un numero: l'ordine rimane lo stesso

    Come si fa in Accesso?
    Boh!
  • Re: Forzare ordine alfabetico/numerico

    Se non ho capito male si usa FORMAT per applicare un numero fisso di caratteri al nu.ero che poi diventa TESTO ovviamente e si procede ad ordinare per questo Campo Calcolato.

    Es: 1 ---> Format(valore,"000")="001"

    Se ho frainteso portate pazienza oggi ho fatto troppe ore...
  • Re: Forzare ordine alfabetico/numerico

    Ho ragionato su entrambe i suggerimenti che mi avete dato, e credo di aver trovato un modo per "aggirare" l'ostacolo.
    In pratica una volta inserito il valore nella maschera, verifica se il valore è numerico o meno, quindi agisce di conseguenza.
    Qualcosa del genere:
    
    Dim Controllo As String
    
    Controllo = InputBox("Valore")
    
    If IsNumeric(Controllo) = True Then
        Controllo = LPad(Controllo, 0, 2)
    Else
        Controllo = Chr(32) + Controllo
    End If
    
    MsgBox (Controllo)
    
    Ho usato una funzione Lpad, così posso variare dinamicamente i parametri, ma in effetti è il senso del suggerimento di @Alex

    Eseguendo quindi la query, al momento ottengo il risultato voluto.
    Vedremo nelle prossime occasioni se la cosa fila liscia.

    Grazie a tutti

    Andrea
  • Re: Forzare ordine alfabetico/numerico

    Jocman ha scritto:


    Vedremo nelle prossime occasioni se la cosa fila liscia.
    Sulla scorta di quanto suggerito da Migliorabile, rispetto a quanto scritto da @Alex io farei una cosa tipo questa
    Format("1", "@@@")
    In questo modo ottieni una stringa costituita da 2 spazi e il numero 1.
    Riporto la parte della guida Microsoft sulla funzione Format
    Character: @
    Description: Character placeholder. Display a character or a space. If the string has a character in the position where the at symbol (@) appears in the format string, display it; otherwise, display a space in that position. Placeholders are filled from right to left unless there is an exclamation point character (!) in the format string.

    Character: &
    Character placeholder. Display a character or nothing. If the string has a character in the position where the ampersand (&) appears, display it; otherwise, display nothing. Placeholders are filled from right to left unless there is an exclamation point character (!) in the format string.
    Occhio però alla necessità fin da subito evidenziata da Migliorabile di conoscere la lunghezza massima della stringa, così da poter impostare il numero giusto di spazi, altrimenti il giochino non regge.

    PS: non fare affidamento su InputBox, in generale, per far aprire quella bella finestrella in cui scrivere qualcosa. L'utente medio cliccherà il pulsante X di chiusura e ... che si fa?
  • Re: Forzare ordine alfabetico/numerico

    Philcattivocarattere ha scritto:



    Occhio però alla necessità fin da subito evidenziata da Migliorabile di conoscere la lunghezza massima della stringa, così da poter impostare il numero giusto di spazi, altrimenti il giochino non regge.

    PS: non fare affidamento su InputBox, in generale, per far aprire quella bella finestrella in cui scrivere qualcosa. L'utente medio cliccherà il pulsante X di chiusura e ... che si fa?
    Sulla lunghezza, non è un problema: in caso numero, la lunghezza è impostata a 3 cifre (che è astronomica, 2 bastavano e avanzavano); in caso di lettere 2 bastano e avanzano (stesso motivo).

    Circa l'inputbox, quello che ho postato è una prova che avevo fatto giusto per rendere l'idea, poi in realtà il valore viene preso da una casella di test della form su DopoAggiornamento
Devi accedere o registrarti per scrivere nel forum
5 risposte