Salve a tutti
Ho questo spezzettone di codice
codice:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If Me.TextNumFatt = "" Then End
If UnloadMode = 0 Then
Cancel = True
Else
'Devo ricalcolare magazzino e totali
Set cs = New ADODB.Connection
Set rs = New ADODB.Recordset
Set con = New ADODB.Connection
Set res = New ADODB.Recordset
' How To: Chiusura form e modifica totali: _
Stabilire le connessioni, recuperare il vecchio totale _
calcola il nuovo totale tramite quantità * prezzo ( _
quella già preventivamente scaricata. Effettua la sottrazione _
rigetta i parametri nel database, chiudi le connessioni, settale _
con valore nothing, passa al punto B (standby, DoEvents)
'Res = dettagli fatture
'Rs = anagrafica prodotti
cs.Open provider
rs.Open "anagprodotti", cs, 3, 3
con.Open provider
res.Open "dettfatture", con, 3, 3
' 1. Connessioni stabilite
If TextNumFatt.text = "" Then
TextNumFatt.text = "0"
End If
Set res = con.Execute("Select * from dettfatture where dett_numfatt = " & TextNumFatt.text)
If res.RecordCount < 1 Then Exit Sub
res.MoveFirst
rs.MoveFirst
' 2. Risultati puntati al primo record
While rs.EOF = False
Set rs = cs.Execute("Select * from anagprodotti where cod_prodotto = '" & res.Fields("dett_codprodotto").Value & "'")
vecchiototale = rs.Fields("prezzototale").Value
' 3. Totale vecchio recuperato
nuovototale = CCur(rs.Fields("quantita_totale").Value) * CCur(rs.Fields("pracquistoe_prodotto").Value)
' 4. Totale nuovo recuperato
newtot = vecchiototale - nuovototale
' 5. Totale da mettere in db recuperato
cs.Execute ("Update anagprodotti set prezzototale = '" & newtot & "' where cod_prodotto = '" & res.Fields("dett_codprodotto").Value & "'")
' 6. Totale rigettato in database
' 6.1 Per quanto riguarda le quantità
MsgBox "Update anagprodotti set quantita_magazzino = '" & rs.Fields("quantita_magazzino").Value - res.Fields("dett_quantita").Value & "'"
cs.Execute ("Update anagprodotti set quantita_magazzino = '" & rs.Fields("quantita_magazzino").Value - res.Fields("dett_quantita").Value & "'")
' 7. Non chiudo le coonnessioni perchè è un ciclo
res.MoveNext
Wend
' 8. Rifaccio il ciclo finchè non finiscono i record della fattura indicata
End If
Tutto ciò deve essere eseguito quando viene chiuso il form
Accorgendomi che non funzionava, ho messo delle msgbox sparse per tutta la sub per capire cosa eseguiva e cosa no.
Mi sono accorto che tutto va bene fino al ciclio con while
Infatti non lo esegue per niente. Ho provato a cambiarlo con do until res.eof ma niente da fare il compilatore non lo calcola per niente, non prende via di eseguirlo, il che, dopo averlo letto varie volte, pare alquanto strano. Avete qualche idea?