Newsgroup: it.comp.appl.access
Titolo: Nuova assegnazione di identificatori (ID) in un campo.

Ho una tabella Tab1 ed un campo ID.
Nela campo ID ho una serie di identificatori numerici non ordinati.
Ciò che dovrei fare è sostituire tutti gli identificatori (ID), assegnandone 
di nuovi ed avendo
come riferimento un  limite superiore (21) ed un limite inferiore (36).
Cioè:
se tutti gli ID sono compresi tra 0 e 15, dovrei poterli sostituire partendo 
da un valore specifico,
ad esempio il 21.
Quindi, allo 0 dovrei far corrispondere 21, secondo quest'ordine:
0 21
1 22
2 23
3 24
.. ..
.. ..
6 27
3 24 (si ripete)
1 22 (si ripete)
8 29
.. ..
.. ..
15 36
considerando che gli stessi ID possono ripetersi, non essendo univoci ne 
ordinati, e che ad ogni ID sostituito
dovrà corrispondere sempre lo stesso in precedenza assegnato.
Ho provato a scrivere qualche riga di codice che purtroppo non fa quanto 
vorrei che facesse,
nel senso che sotituisce senza un ordine preassegnato i valori dei campi che 
rientrano in un
determinato intervallo da me definito:
**************************
Private Sub Comando0_Click()
Dim db As Database
Dim rst As Recordset
Dim it As Integer 'nuovo indice superiore
Dim idw As Integer 'nuovo indice inferiore
Dim idOldt As Integer 'vecchio indice superiore
Dim idOlddw As Integer 'vecchio indice inferiore
Dim c As Integer
Dim f As Integer
Set db = CurrentDb
Set rst = db.OpenRecordset("tab1")
it = "21"
idw = "36"
idOldt = "0"
idOlddw = "15"
rst.MoveFirst
Do While Not rst.EOF
For c = it To idw
For f = idOldt To idOlddw
If rst!id = f Then
    rst.Edit
    rst!id = c
    rst.Update
    it = it + 1
End If
Next f
Next c
 rst.MoveNext
Loop
Set db = Nothing
Set rst = Nothing
End Sub
********************
Ringrazio tutti per l'aiuto.
Angelo 

[omissis]
Sinceramente non ti sei spiegato molto.
Devi fare una rimappatura di questi ID? Se sě, quale?
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution

 PBsoft di Gabriele Bertolucci
***
Devo esattamente rimappare gli ID secondo un ordine predefinito.
Quello che cerco di fare č asseganre un nuovo ID, sostituendolo a quello 
esistente in modo schematico.
Come dicevo, vorrei che ad un determinato valore ne corrispondesse un altro:
es.:
il valore 0  lo sostituisco con il 21;
il valore 1  lo sostituisco con il 22
.... ecc..
Tanto x semplificare.
Chiaramente tutto ciň vorrei riuscire a farlo in un solo passaggio, 
scrivendo una routine ad hoc.
Grazie
Angelo 

 scrivendo una routine ad hoc.
Se si tratta di diminuire di 21 unità il valore del campo ID, allora puoi 
fare tutto anche con una query, senza ricorrere al VBA; altrimenti, devi 
scrivere qualche riga di codice, ma è veramente semplice.
Caso 1)
============================
UPDATE nometabella SET ID = [ID]-21
============================
Caso 2)
============================
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Source = "SELECT * FROM tbl01"
rst.Open
rst.MoveFirst
Do While Not rst.EOF
    Select Case rst!ID
        Case 34
            DoCmd.SetWarnings False
            rst!ID = 134
            rst.Update
            DoCmd.SetWarnings True
        Case 95
            DoCmd.SetWarnings False
            rst!ID = 5
            rst.Update
            DoCmd.SetWarnings True
    End Select
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
============================


> Caso 1)


Ciao Gabriele,
intanto ti ringrazio per l'interessamento e mi scuso se nel voler essere
sintetico sono stato poco preciso.
I tuoi due esempi sono calzanti e ritengo che per il mio scopo possa andare
benissimo la query di
aggiornamento suggerita, alla quale non avevo pensato.
Per completezza ti dico che il fine della rimappatura è quello di aggiungere
un numero predefinito
di unità a quelle già esistenti.
Ancora grazie e buona domenica.
Angelo