Newsgroup: it.comp.appl.access
Titolo: Q.ry di aggiornam. per campo progress.

W98 A97
situazione:
art.    vers    descr
A                 xxxxxx
A                 yyyyyyyyyy
B                 zzzzz
B                 wwww
B                   nnnnnn
Dovrei attribuire al campo versione - al momento vuoto - un numero
progressivo - che partisse da 1 per ogni articolo
esempio: art. A --> vers 1, 2  ecc  -   art. B vers. 1, 2, 3 ecc.
Ringrazio in anticipo chiunque vorrà darmi una dritta
Cordialmente
Gabriele

 ha scritto nel messaggio
news:bkbt9v$j6r$1...@newsread.albacom.net...

Guardati dmax() sull'help
E' semplice
MAssimiliano

MA ha scritto:


Dmax("versione","tabella",criterio)+1 per i nuovi record, ma per quelli
già esistenti... dovevi pensarci prima!
Per questo si consiglia sempre di pensare bene in fase di progettazione
del db a tutto ciò che può servire e a come dovrà essere usato.
Adesso ti tocca farlo a manina o  scriverti una routine vba. Quale dei due
metodi scegliere dipende dal numero di record che hai in tabella e da
quanto sai usare vba.
Namor
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Gabriele
Non è difficile, è un programmino di poche righe.
Dammi i nomi esatti della tabella e del campo che te lo scrivo io, così te
lo studi e cominci ad avvicinarti al vba.


 Namor
Specifica anche se ti serve attribuire il progressivo in ordine alfabetico
per descrizione, o se basta in ordine casuale (il codice cambia poco).



Tabella: TblArtVers
Campo: CodArt  (sono i codici articolo)
Campo: CodVers (č il nuovo campo che dovrei aggiornare con dei progressivi -
meglio se in ordine alfabetico crescente)
Campo: DescrVer (č il campo descrittivo della versione)
Ancora grazie
Ciao, Gabriele

 Ciao, Gabriele
Presumo che CodArt e DescrVer siano di tipo testo, e CodVers Numerico
intero lungo.
Crea un nuovo modulo e incollaci tutto il codice che segue. Se ti dà
qualche errore probabilmente è perchè qualche riga è stata spezzata in due
durante la copia, basta riunirla con la successiva. Accanto ad ogni riga
c'è un commento che indica a cosa serve, quando incolli il codice nel
modulo dovresti vedere tutti i commenti in un colore diverso (io li ho in
verde).
Metti il cursore dentro la procedura e premi F8 per cominciare ad
eseguirla. Continua con F8 ad eseguire una istruzione alla volta, e vedi
se leggendo i commenti riesci a capire il filo logico e il funzionamento.
Quando hai capito come funziona, o quando sei stufo, premi F5 per fare
eseguire tutto il resto in automatico senza pause.
Poi vai sulla tabella e verifica se ci sono i progressivi.
Io l'ho provata e funziona bene.
Ciao.
Namor
Private Sub Assegna_progressivi()
'ci serve una variabile che 
'rappresenti la nostra tabella
Dim Rst As Recordset 
'ci serve un contatore come numero progressivo
Dim i As Long
'memorizzerà il codice articolo per sapere
'quando passiamo da A a B a C ecc...
Dim oldArt As String  
'apriamo la tabella attraverso una query (per ordinare i record)
'altrimenti bastava Set Rst = CurrentDb.OpenRecordset("TblArtVers")
Set Rst = CurrentDb.OpenRecordset("SELECT * FROM TblArtVers ORDER BY
CodArt, DescrVer;")
With Rst 'indica che stiamo lavorando sul recordset
         '(per non dover riscrivere "Rst" su ogni riga)
    .MoveFirst 'ci posizioniamo sul primo record
    i = 0 'partiamo da 0 con il contatore
    oldArt = !CodArt 'partiamo dal primo codice articolo (per esempio "A")
    While Not .EOF 'finchè non arriviamo alla fine della tabella,
                   'esegui le istruzioni seguenti:
        .Edit 'indica che vogliamo modificare il record
        If !CodArt <> oldArt Then 'se siamo arrivati su un nuovo codice...
            i = 1 '...allora facciamo ripartire il contatore da 1...
            oldArt = !CodArt 'per ricordare, al prossimo passaggio,
                             'che stiamo lavorando su un nuovo codice
        Else
            i = i + 1 '...altrimenti incrementiamo di 1 il
                      'contatore, per il prossimo record
        End If
        !CodVers = i 'assegniamo al campo CodVers della
                     'tabella il valore del contatore i
        .Update 'salva le modifiche al record
        .MoveNext 'passa al prossimo record
    Wend 'se non siamo alla fine della tabella, riparti da .Edit
End With 'non ci serve più Rst
Rst.Close 'abbiamo finito il lavoro, chiudiamo la tabella
Set Rst = Nothing 'e liberiamo la memoria
'stampiamo un messaggio per avvisare che la procedura è terminata:
MsgBox "Assegnazione progressivi terminata", vbOKOnly, "Procedura vba"
End Sub 'fine della procedura
