PDA

View Full Version : [vba access] aggiornare campo in tabella


ciaps
16-02-2010, 12:39
Salve a tutti ho bisongo di agigornare un campo di una tabella. la tabella contiene le inforamzioni relative ad un soggetto diversificate per tipo record ed io ho bisogno di creare una chiave unica che mi permetta di identificare le informazioni relative ad un soggetto.
Mi spiego meglio
soggetto x ha :
record N2
record n3
record n4
soggetto y
record n2
record n3
record n4

l'associazione soggetto record è data dalla sequenza dei record ma per poter effettuare alcune operazioni ho necessità di stravolgere la sequenza perntanto pensavo di numerare tutti i record che fanno capo ad uno stesso soggetto con un numeratore per fare questo pensavo di fare un ciclo for next in cui impostavo la condizione di inserire il valore del campo x finchè non trovavo un altro record iniziale della sequenza, a quel punto impostare x+1 e ricominciare ....ma come faccio?

MarcoGG
16-02-2010, 13:44
Non ho chiaro come sia la tabella, ma così su 2 piedi farei un campo aggiuntivo... Però mi sorge il dubbio se non sia meglio spezzare quella tabella in 2 e mettere sulla seconda tutti i record di ogni "soggetto" - 1 Soggetto->Molti Record...

ciaps
16-02-2010, 14:37
ehm mi sono sicuramente spiegato male.
la tabella ha record in sequenza
n2
n3
n4
n2
n3
n4
ogni gruppo n2-n4 rappresenta un soggetto ma sul file non ho una chiave che identifichi il soggetto ho quindi creato un campo aggiuntivo dove vorrei andare a scrivere un numero per ogni soggetto diverso e quindi fare:
n2 15
n3 15
n4 15
n2 16
n3 16
n4 16
....
....
n2 n
n3 n
n4 n

MarcoGG
16-02-2010, 15:54
Allora è come pensavo, e, ripeto, gran brutta scelta la mono-tabella in questo caso.
Purtroppo Access non è Oracle, e Rownum non c'è, perciò bisogna inventarsi un certo "giro" con VBA.
Cosa farei io ( nel mio esempio ho una tabella "nomeTabella" con il solo campo "N" che contiene n2, n3, n4, n2, n3, n4, ecc. ) :

1. Definisco un mio Tipo "record" :
Private Type record
N As String
soggetto As Integer
End Type
Ovviamente "record" va completato con tutti i campi che si vogliono registrare.

2. Carico tutta la tabella in un Recordset :

Dim soggetto As Integer
soggetto = 0
Dim RS As Recordset
Set RS = CurrentDb.OpenRecordset("nomeTabella")
Do While Not RS.EOF
Dim R As record
R.N = RS("N")
If R.N = "n2" Then soggetto = soggetto + 1
R.soggetto = soggetto
MsgBox R.N & " - " & R.soggetto
RS.MoveNext
Loop

La MsgBox è di debug, e serve a far capire cosa intendo.

3. Ad ogni record letto, creo un Type "record", e lo aggiungo ad un array o collection che sia...

4. Leggo l'array dal primo elemento all'ultimo e faccio una Insert di ogni Type "record" su una nuova tabella, che avrà la stessa struttura di "nomeTabella", con la sola aggiunta del campo "Soggetto".

E il gioco è fatto. ;)