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.
--
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
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
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.
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.
Visto la rarità delle modifiche che devo farci, si, anche perchè
per l'appunto non sapevo neanche come mettere in ordine
la tabella. (L'ordine corretto mi serve direttamente in tabella,
non in maschera)
> 2) esistono i tasti A->Z Z->A ....
Non ho capito... ;-/
> 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]??
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.
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.
--
Questo articolo e` stato inviato dal sito web http://www.nonsolonews.it
La storia di questo MDB è lunga e tormentata...
Il "programma" (query, forms, macro ed in minima parte codice)
Attinge in questa tabellona prelevando i dati in 2 momenti diversi...
Questi dati vengono prima scelti prendendo nota del numero di record in cui
si trovano, DOPO, durante il programma, vengono presi e COPIATI per usarli,
facendo appunto riferimento al record selezionato in precedenza...
Esempio:
Scelgo il nome "Marco" presente sul record 100 che ha delle determinate
caratteristiche (una 50ina di campi)...
Durante il programma, vado a prendere i dati di quel "Marco" presenti
i quel determinato record numero 100 che avevo scelto all'inizio...
> ..Crei una maschera su una query ordinata sulla tabella che ti serve...
> ...funzionano così i database...
Lo so...
> ..metti caso che tra un anno hai la necessità di inserire un dato 'tra'
> quelli
> 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.
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
>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
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.
Grazie per la dritta,
ho risolto con il consiglio di AleC
banale o no, a ricordarselo ^_^
--
A.GiovanniB.
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.... :-)