22/02/2023 - @Alex ha scritto:
Trovo poco ottimizzato, anzi per nulla, il codice.
Grazie Alex per la risposta, purtroppo la mia conoscenza di VBA e' molto limitata per cui cerco di programmare in base alle mie conoscenze (molto basiche).
Ho modificato il tuo codice come segue perche' c'erano alcune inesattezze (sicuramente per non fornire la “pappa pronta”):
1) al posto del punto e virgola ho messo la virgola perche' mi dava errore nell' esecuzione della query (l'operatore IN chiede la virgola di separazione fra i valori)
2) mancava la dichiarazione del ctl.Itemdata
3) La WHERE condition mancava di un &
Comunque grazie, ho imparato un'altro pezzettino di VBA
Dim indice As Long
Dim sWHR As String
indice = Me.frmFActrIDtabFAid 'indice = a ID fattura del record corrente
Set ctl = Me.frmFAlstIDtabDDid
For Each varItm In Me.frmFAlstIDtabDDid.ItemsSelected
sWHR = sWHR & ctl.ItemData(varItm) & ","
Next
If Len(sWHR) > 0 Then
sWHR = Mid$(sWHR, 1, Len(sWHR) - 1) ' Tolgo l'ultima [,]
sWHR = "UPDATE tblDDddtfornitori SET NUMtabDDIDtabFAid=" & indice & " WHERE IDtabDDid IN (" & sWHR & ")"
Debug.Print sWHR
DBEngine(0)(0).Execute sWHR
End If
Me.sfrmFAqryFAaccoppiamentoddt.Requery
22/02/2023 - @Alex ha scritto:
Fai attenzione a come dichiari le variabili, [Indice] lo dichiari INTEGER, ma se il campo ID è Counter, è un errore, devi dichiararlo LONG
Ho corretto anche la dichiarazione perche' giustamente un counter potrebbe arrivare a numeri molto elevati; non sarebbe comunque stato questo il caso perche' probabilmente prima di arrivare a 32.767 fatture inserite (equivalenti a circa 90 anni), il database sara' gia' finito nel bidone.
Grazie ancora Alex