
Originariamente inviata da
19pantarei75
.... però all'interno di un istruzione sql da passare al generatore di query. ...
Ci confondi le idee,
di solito al generatore di query non si passa una istruzione sql,
bensi è il generatore di query che crea le istruzioni sql
comunque usando il VBA di Access puoi fare:
- 1 recorset sulla tua tabella ( Chiamata "Tabe" ) ( id-testo / ref-numero / cartella-numero )
- 1 query che raggruppando per "id" gli da una numerazione come da esempio ( nel codice "ssq" )
- 1 recordset su ssq
- cicli sul recordset della tabella "RsT"
- per ogni ciclo
---- cicli sl recorset della qery RsQ
---- se id corrisponde aggiorni il valore della cartella
- chiudi tutto
codice:
Public Function AggiornaValori()
Dim ssq As String ' La query che Raggruppa x id e conta quelli minori
ssq = ""
ssq = ssq & "SELECT DISTINCT Q2.id, Q2.conx FROM "
ssq = ssq & "(SELECT Tabe.id, (SELECT Count(T.id) FROM "
ssq = ssq & "(SELECT DISTINCT X.id FROM Tabe AS X) AS T "
ssq = ssq & "WHERE "
ssq = ssq & "T.id<=Tabe.id) AS conx FROM Tabe) AS Q2;"
Dim DBx As DAO.Database
Dim RsT As DAO.Recordset ' La Tabella da aggiornare
Dim RsQ As DAO.Recordset ' La Query da cui prelevare i valori da mettere in tabella
Set DBx = CurrentDb
Set RsT = DBx.OpenRecordset("Tabe", dbOpenDynaset)
Set RsQ = DBx.OpenRecordset(ssq, dbOpenDynaset)
' -- 1 --- Ciclo sui record della Tabella -------------------------------------------
RsT.MoveFirst
Do Until RsT.EOF
' -- 2 --- Per ogni record della tabelle ciclo sui record della query
' trovo il corrispondente id e aggiorno il valore di Tabe.cartella
RsQ.MoveFirst
Do Until RsQ.EOF
If RsT.Fields("id") = RsQ.Fields("id") Then
RsT.Edit
RsT.Fields("cartella") = RsQ.Fields("conx")
RsT.Update
Else
'
End If
RsQ.MoveNext
Loop
' -- 2 --- Fine ---------------------------
RsT.MoveNext
Loop
' -- 1 --- Fine -------------------------------------------
RsQ.Close
RsT.Close
DBx.Close
Set RsQ = Nothing
Set RsT = Nothing
Set DBx = Nothing
End Function
Attento se potresti avere dei valori vuoti di "id" allora bisogna aggiustarla
Facci sapere
.