Newsgroup: it.comp.appl.access
Titolo: For each per ogni riga nella tabella leggi il contenuto dei campi

Ciao.
Voglio eseguire in Visual Basic un ciclo che contiene una query basata
su valori contenuti in una tabella.
Quindi per ogni record di questa tabella1 voglio che esegua un codice
SQL su una tabella2.
Mi servono i riferimenti alla riga e al campo. Come faccio?
Ecco l'esempio:
For Each [Record] In [MiaTabella1]
     DoCmd.RunSQL "UPDATE MiaTabella2 SET MioCampo1 = " & [Campo1 in
MiaTabella1] & " WHERE MioCampo2='" & [Campo2 in MiaTabella1] & "';"
Next [Record]
Grazie

 ha scritto nel messaggio 
news:1e96a55a-42f3-485f...@21g2000vbk.googlegroups.com...

No...devi usare i recordset
Set rst = CurrentDb.OpenRecordset("tabella")
With rst
.edit
.Fields("campo") = iif(...)
...
.update
end with
Ciao
-- 
Roberto da Parma 

 ha scritto nel messaggionews:1e96a55a-42f3-485f...@21g2000vbk.googlegroups.com...

Però se ho capito bene così vai a modificare il valore di un campo
nella tabella, mentre io voglio leggere i valori di tre campi dalla
tabella1 ed usarli in una query eseguita sulla tabella2 per ogni
record della tabella1
Quindi avendo le tabelle:
1: [TbA_Descrizioni_Categorie] contenente i campi [CategoriaID],
[CausaleID] e [Descrizione]
2: [Tb_Estratti_Conto] contenente i campi [CategoriaSp], [CausaleABI]
e [Descrizione]
Io voglio creare questo codice:
For Each (ogni record) in [TbA_Descrizioni_Categorie]
    DoCmd.RunSQL "UPDATE Tb_Estratti_Conto SET CategoriaSp = " &
[CategoriaID] & " WHERE CategoriaSp Is Null AND CausaleABI='" &
[CausaleID] & "' AND Descrizione LIKE '*" & [Descrizione] & "*';"
Next (ogni record)
Mi mancano le definizioni per gli oggetti [TbA_Descrizioni_Categorie],
(ogni record) e i singoli valori nei campi.
Come faccio a leggerli in sequenza?


CI SONO RIUSCITO DA SOLO!
Function Aggiorna_Categorie()
    Set rst = CurrentDb.OpenRecordset("TbA_Descrizioni_Categorie")
    With rst
        .MoveFirst
        Do While Not .EOF
            MyCategoriaID = .Fields("CategoriaID")
            MyCausaleID = .Fields("CausaleID")
            MyDescrizione = .Fields("Descrizione")
            DoCmd.SetWarnings False
            DoCmd.RunSQL "UPDATE Tb_Estratti_Conto SET CategoriaSp = "
& MyCategoriaID & " WHERE CategoriaSp Is Null AND CausaleABI='" &
MyCausaleID & "' AND Descrizione Like '*" & MyDescrizione & "*';"
            DoCmd.SetWarnings True
            .MoveNext
        Loop
    End With
End Function

 Per� se ho capito bene cos� vai a modificare il valore di un campo



Bene!
Hai visto...con pochi input ci sei arrivato da solo...anche se comunque 
rimane una soluzione che non capisco fino in fondo...
Non ti conveniva fare un JOIN tra le tabelle e poi creare una query di 
aggiornamento basata sulla query?
Ma se ti funziona anche cos�...bene lo stesso


 ha scritto nel messaggio 
news:guepu8$5s4$1...@tdi.cu.mi.it...

Ciao, secondo me la query non e' efficente in partenza. Cosi' fai la select 
di alcuni campi da una tabella e poi esegui tante update sulla tabella2 
quante sono i record restituiti dalla prima select.
Prova questo:
DoCmd.RunSQL "UPDATE TbA_Descrizioni_Categorie,Tb_Estratti_Conto SET 
CategoriaSp=CategoriaID WHERE  CategoriaSp Is Null AND CausaleABI='" & 
CausaleID & "' AND Tb_Estratti_Conto.Descrizione Like '*" & 
TbA_Descrizioni_Categorie.Descrizione & "*'"