Newsgroup: it.comp.appl.access
Titolo: Come ordinare in automatico i campi delle tabelle?

Salve al NG.
Premesso che ho dato uno sguardo sull NG ma non ho trovato nulla, neanche 
sul
vostro sito (ben fatto) 
http://www.sitocomune.com/
.
Ho una tabella in Access 2003 (di cirda un 13.000 record...) così composta:
[Contatore]
[Dato A]
[Dato B]
etc...
Ora, aggiungendo un record nuovo, tale record viene posizionato 
"fisicamente" (?)
 in fondo al tabellone.
Devo invece posizionare tale record ordinandolo in modo alfabetico per il 
[Dato A]
 "correggendo" quindi la numerazione del [contatore]
Premesso che l'aggiunta dei record è un'evento raro nel contesto di questo 
MDB,
 devo comunque eseguire la procedura che descrivo qua in seguito.
A mano, in modo che mi rendo conto essere un po "stupido" (?), ma che 
comunque
 raggiunge il mio scopo, devo seguire questa procedura...:
1) devo crearmi un campo nuovo:  [Contatore provvisorio]
2) Fare ordinamento crescente sulla colonna [Dato A]...
3) Posizionarmi su [Contatore provvisorio] ed immettere il numero 1
4) Mettere un peso sul tasto "giù" ed attendere una decina di minuti che 
access
      rinumeri in modo crescente il [Contatore provvisorio].
5) una volta arrivato "sul fondo" si ferma da solo, quindi passo la 
proprietà
      contatore da [Contatore] a [Contatore provvisorio] per poi rinominare
      quest'ultimo...
So che per voi sta procedura sembrerà una bestemmia... ;°°}
Sapreste indicarmi una maschera/macro da usare pari-pari (rinominandomi
 gli eventuali campi) per fare il tutto in modo automatico ed un po più 
"bello" ^_^
Vi ringrazio.
-- 
A.GiovanniB. 

Azz, scusate la formattazione del post, OE me l'ha
scombussolata, grrr...
-- 
A.GiovanniB. 


Veramente più che una bestemmia non si capisce bene cosa
devi fare, perchè non ci spieghi per bene qual'è l'analisi del
problema invece della procedura

 wrote:

immagino che il campo denominato [contatore] non sia un campo di tipo
"contatore" ma numerico
dim rst as dao.recordset
dim cnt as long
set rst = currentdb.openrecordset("select * from nometabella order by
[Dato A];")
rst.movefirst
cnt = 1
do while not rst.eof
 rst!Contatore = cnt
 rst.movenext
 cnt = cnt + 1
loop
se il campo denominato [Contatore] è un campo di tipo "contatore"
crei un nuovo campo denominandolo come ti pare e nel codice
sostituisci rst!Contatore con rst!nuovocampo

 wrote:

Non credo di aver capito:
domande:
1) lavori direttaemtne con la tabella (niente maschera?)
2) esistono i tasti A->Z   Z->A ....
3) ma se sono già ordinati per dato A se aggiungi un nuovo record,
chiudi la tabella e la riapri non te lo ritrovi ordinato per [Dato
A]??
F.

 qual'è l'analisi del problema invece della procedura
Ci provo ^_^
1) Mettere in ordine alfabetico 1 campo:
   Esempio ordinare il campo NOME:
2) Creare un campo nuovo e numerarlo in ordine crescente.
Cioè se ho una tabella così
[NOME]
 Luca
 Alberdo
 Paolo
 Dario
Ordinare tutti i record in ordine alfabetico del campo NOME:
[NOME]
 Alberto
 Dario
 Luca
 Paolo
Quindi ora creare un nuovo campo NUMERI e numerare in ordine
 crescente
[NOME]        [NUMERI]
 Alberto              1
 Dario                 2
 Luca                  3
 Paolo                 4
-- 
A.GiovanniB. 

 chiudi la tabella e la riapri non te lo ritrovi ordinato per [Dato A]??
Se nel campo [Dato A]
Ho questa situazione
Record1      Dario
Record2      Tommaso
Se devo mettere  Marco
Marco finirà nel Record3, se poi ordino per nome il campo [Dato A],
 a VIDEO me lo ordina,
    Record1      Dario
    Record2      Marco
    Record3      Tommaso
ma "fisicamente" l'ultimo record rimane in fondo...
Se poi accedo al Record3 tramite programma, non troverò Tommaso,
 ma Marco (essendo questo l'ultimo che ho aggiunto sul record3...)
-- 
A.GiovanniB. 

 ma Marco (essendo questo l'ultimo che ho aggiunto sul record3...)
Dimenticavo di dire (in risposta a te)
Di Marco posso averne vari, per quello che DEVO avere un campo
 univoco numerico/Contatore.
Proprio per distinguerli sicuramente (confrontare gli altri campo verrebbe
 una tragedia)... son quasi 50MB di sola tabellona ^_^
-- 
A.GiovanniB. 

LEOrap ha scritto:

Forse sparo una sciapata, ma le tabelle....cosa serve ordinarle? Esistono maschere e query apposta per avere tabelle nn ordinate.....Crei una maschera su una query ordinata sulla tabella che ti serve......funzionano così i database.....metti caso che tra un anno hai la necessità di inserire un dato 'tra' quelli già inseriti, che fai? Rinumeri tutto da capo?
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 già inseriti, che fai? Rinumeri tutto da capo?
Ehm, AHIME', yes...
La rinumerazione l'ho spiegata, così com'è funziona senza problemi,
 è che masticando poco di programmazione, se non a livelli molto
 elementari, il dover lasciare un peso su un tasto del pc per far si che
 si autonumeri non è "molto igienico" ^_^
Vorrei automatizzare la procedura...
1) Crea campo "A" in tabella
2) ordina record tabella in ordine alfabetico di un determinato campo "B"
3) numera (con un loop) da 1 alla fine dei record il campo "A"
4) imposta in campo "A" contatore.
5) Cancella un campo "C"
E' che volevo evitarmi quelle 2-3ore di bestemmie, che magari voi che
 ci lavorate da tempo mi scrivete in 10secondi quelle 10-15 righe
 di codice da sbattere in una form ;°°}
-- 
A.GiovanniB. 


cut
Crea una tabella di appoggio identica alla prima.
Con la tabella "vecchia" crea una query di accodamento ricordandoti di 
ordinare crescente la colonna che ti serve e di NON accodare nulla nel campo 
contatore. La tabella a cui accodare sarà la "nuova". Esegui la query.
Ora la nuova tabella avrà i dati ordinati e con il progressivo anch'esso 
ordinato.
Puoi rinominare la vecchia e dare il vecchio nome alla nuova. Occhio alle 
relazioni.
Ciao, Carlo 

loop
Ottimo!
Alla fine č un banale:
-Imposta variabili
-fai girare in loop fino a che...
Avevo fatto qualcosa del genere alle superiori qualche anno fa,
 e non usandolo mai, oltre a non conoscere molto il linguaggio
 programmazione, m'ero perso.
Perfetto, unica cosa (causa errori e l'help F1), ho dovuto aggiungere
 edit/update prima dell'immissione dei valori nella cella (giusto?):
 rst.Edit
    rst!Contatore = cnt
 rst.Update
Per il resto č proprio quel che cercavo, ed ovviamente cosě in
 manco 1 secondo m'ha fatto il tutto (ben 29.250 record) senza
 dover usar il metodo "spannometrico" da 6-7minuti ^_^
Grazie per la soluzione (banale forse, ma se uno non la sa... ;-P)
E pure agli altri per avermi dedicato del tempo.
-- 
A.GiovanniB. 

 Crea una tabella di appoggio identica alla prima.
[CUTTONE]
Grazie per la dritta,
ho risolto con il consiglio di AleC
banale o no, a ricordarselo ^_^
-- 
A.GiovanniB. 

LEOrap ha scritto:

Per me nn è una gran soluzione.....mi dici perchè vuoi il contatore 'in ordine'? Puoi sempre aggiungere un campo numerico in + e cambiare quello....in teoria l'ID serve al database, nn a noi.....


 mi dici perchè vuoi il contatore 'in ordine'?
Perchè così mi tiene correttamente in ordine i record a livello
 tabella... ;-/
Siccome il "databasone" vien usato anche da "vecchietti" che se nelle
 maschere si trovano in record 10, nella tabella si aspettano di trovarlo
 sempre in posizione 10, se glielo ordino solo in maschera "si perdono"
 ^_^
-- 
A.GiovanniB. 


ooooops....  :-)


Ma l'utente le tabelle nn dovrebbe neanche vederle......
