Newsgroup: it.comp.appl.access
Titolo: raggruppare per valori a scalare

ciao a tutti; ho una situazione seguente:
giovanni aaabaabbab
nicola bbbaabaabb
giuseppe aaaabbaab
vorrei fare una cosa del tipo
giovanni aaaaaabbbb
nicola aaaabbbbbb
giuseppe aaabbbbbbb
spero di aver illustrato bene il problema
grazie
Francesco
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio news:193Z205Z174Z38Y...@usenet.libero.it...

ma la stringa aababababa č una stringa in un unico campo? o sono pių campi? sono attaccate o tra di loro c'č un separatore?
ciao
Nick 

 ha scritto nel messaggio
news:193Z205Z174Z38Y...@usenet.libero.it...

Non dici dove vuoi ottenere il risultato, ma utilizzando una query che può
servirti ovunque e soprattutto sperando che tu abbia nome e cognome separati
è sufficiente che tu ordini una query per il campo cognome e se ti servono
uniti faccia un terzo campo calcolato tipo NomeCognome: [Nome] & " " &
[Cognome].
Qualora i due campi non siano separati, per quanto ne sappia io, le cose si
complicano. Dovresti usare un pò di codice tramite le funzioni Mid() Right()
e Left() per trovare lo spazio tra nome e cognome per portarli in due campi
distinti e poi procedere come sopra. Se hai solo nomi o solo cognomi doppi
procedi da destra verso sinistra o viceversa, se sono misti AIUTO!!!!
Ciao Valerio.


sono piu' campi; ogni lettera un campo separato
ciao
F



allora creati un unico campo dove metti ituoi campi separati uno dietro l'altro e un nuovo campo testo
poi con questa parte di routine VBA controlli e crei la nuova espressione (aggiungi il caricamento del recordset)
dim car_p as string, car_a as string, tempostr as string
dim i as integer, j as integer
car_a > left (rst!campounito,1)
rst.edit
rst!nuovocampo = car_a
rst.update
i = 1
'inizio controllo conle altre lettere
do while not i = len(rst!campounito)
i = i+1
car_a = mid (rst!campounito,i,1) ' memorizzo il carattere
j = 1
do while not j > len (rst!nuovocampo)
        car_p = mid (rst!nuovocampo, j, 1) ' memorizzo il carattere presente
        if car_p >= car_a then ' se trovo che il carattere presente è maggiore o uguale inserisco quello letto
            tempostr = mid (rst!nuovocampo, 1, j) ' memorizzo la stringa che precede la mia lettera da inserire
            tempostr = tempostr & car_a ' inserisco il carattere
            tempostr = tempostr & mid (rst!nuovocampo, j+1, len(rst!nuovocampo)) ' aggiungo ciò che resta del campo
            rst.edit
            rst!nuovocampo = tempostr
            rst.update
            exit do ' esco dal loop perchè ormai ho inserito
        end if
        j = j+1
loop
loop
salvo errori di distrazioen dovrebbe andare ... prova e facci sapere ;)
ciao
Nick 

"Nick" <senz...@chiedetesul.NG> ha scritto nel messaggio news:pQd4d.2326$H11....@twister1.libero.it...

ecco il primo errore...
sostituisci
car_a > left (rst!campounito,1)
con
car_a = left (rst!campounito,1)
ciao
Nick


il problema che ogni lettera è un campo perchè ogni campo ha il suo valore e
questo è fondamentale. Unendo tutto in un campo solo si perdè ciò......non
so se mi sono spiegato



[CUT]
allora è più complicato.. ci dvo pensare ... ma x ora nn mi è venuto in mente nulla...
tieni sott'occhio il post che se mi illumino posto :)
ciao
Nick 

 ha
scritto:

dalla risposta deduco di essermi spiegato male; io ho un campo1=cognome, poi
una serie di campi, campo2, campo3......campoX, e il valore di questi campi
puo' essere a oppure b. La cosa che vorrei fare è quella di ordinare i
valori, per esempio prima tutti a e poi tutti i b, essendo chiaramente non
costante la a e la b nei campi. Ad esempio se i campi in totale sono 10, a
puo' essere i 3 e b in 7, a in 6 e b in 4 ecc.
Allora vorrei un ordinamento del tipo:
aaaaaaabbb
aaaabbbbbb
aabbbbbbbb
abbbbbbbbb
ho reso l'idea?
ciao
F


 ha scritto nel messaggio
news:82Z53Z74Z118Y1...@usenet.libero.it...

Ripeto, non mi dici dove ti serve, una maschera, una tabella, un report o
altro. Comunque tornando alla nostra query che puoi poi usare come vuoi puoi
provare a fare una cosa tipo:
CampoA - CampoB - CampoC - CampoD - ecc - .. - CampoUnico
CampoUnico è un campo calcolato tipo CampoUnico: [CampoA] & [CampoB] &
[CampoC] & ecc
poi ordini per CampoUnico
in pratica:
a - a - b - a - b - a - a
a - a - a - b - b - a - b
a - a - a - b - b - b - a
diventa:
a - a - a - b - b - a - b - aaabbab
a - a - a - b - b - b - a - aaabbba
a - a - b - a - b - a - a - aababaa
ordinando appunto l'ultimo campo, combinazione dei precedenti in crescendo
Se ti è d'aiuto, altrimenti fammi capire cosa mi sfugge.
Ciao Valerio.


Non ha importanza la destinazione, puo' essere un report o meglio ancora una
nuova tabella. La cosa difficile secondo me e fargli fare quello che io
penso e che ho cercato di spiegare e cioč, nel mio intento vorrei mettere
tutti i valori a e b dei campi in ordine e giocando con la lista degli
stessi, cioč:
seleziona cognome=pippo dalla tabella nomi;
se il campo1=a ok metti in lista;
se il campo2=a ok metti in lista;
se il campo3=b skip al successivo
se il campo4=a ok metti in lista
insomma una sorta di loop che mi dia alla fine, sul totale di 10 campi con
valore a o b:
pasquale aaaaaabbbb
nicola aaaabbbbbb
saverio aaabbbbbbb
giulia aabbbbbbbb
sergio abbbbbbbbb
gino bbbbbbbbbb
sto provando con tutte le query possibili e immaginabili, macchč


 F
Cioč vuoi cambiare l'ordine dei campi o del loro contenuto? L'unica cosa che
a questo punto mi viene in mente č tramite VBA, leggendo per ogni record
campo per campo il valore e assegnandolo ad altrettante variabili per un
valore dalla prima a crescere e per l'altro dall'ultima a scalare.
Tipo messo giu circa:
ContA = 1
ContB = 10
For N = 1 to NumeroCampi
    If EVal("Campo" & ContA) = a Then
        EVal("Var" & ContA) = a
        ContA = ContA + 1
    Else
       EVal("Var" & ContB) = b
       ContB = ContB - 1
    End If
Next
e alla fine riscrivere il nuovo record o inserirlo in una nuova tabella.
L'ho buttata lě a caso, non ho guardato se EVal funziona cosě o se devi
usare una variabile ulteriore, ricordo che comunque c'č un modo per leggere
campi e variabili cosě numerate. Per i campi con un For Next puoi
sicuramente usare anche l'insieme Fields, per i valori forse una matrice.
E' comunque l'unico modo che mi viene in mente.
Ciao Valerio.