Nella speranza che i suggerimenti vengano dati con uno spirito di BUONA TECNICA soprattutto agli UTENTI non in grado di capire gli errori..., quelli più bisognosi che gli vengano spiegate le cose in modo costruttivo non in modo errato ..!
Sub rateizzazione()
On Error Goto Err_Handler
Dim rst As DAO.Recordset
STRSQL = "SELECT ID_PREVENTIVO, COSTO_TOTALE, ACCONTO, RATE FROM PREVENTIVO ORDER BY ID_PREVENTIVO"
Set RDS = DbEngine(0)(0).OpenRecordset(STRSQL,dbOpenSnapshot)
Do Until RDS.EOF
V_ID_RATA = 1
V_RATE = RDS.Fields("RATE")
V_ID_PREVENTIVO = RDS.Fields("ID_PREVENTIVO")
For X = 1 To V_RATE
V_Insert = " INSERT INTO RATE (IDRATA, IDPREVENTIVO, DataScadenzaRata, DATAPAGAMENTO) VALUES (" & V_ID_RATA & "," & V_ID_PREVENTIVO & ", '12/01/2012', '12/01/2012')"
DbEngine(0)(0).Execute V_Insert, dbFailOnError
V_ID_RATA = V_ID_RATA + 1
Next
RDS.MoveNext
Loop
Exit_Here:
On Error Resume Next
RDS.Close
Set RDS=Nothing
Exit Sub
Err_Handler:
MsgBox "Errore Numero " & err.Number & " - " & err.Description
Resume Exit_Here
End Sub
1) Non si usano QueryDEFS temporanee, in quel modo non servono a NULLA.
2) Non serve forzare il MoveLast e First se si obbliga nella Query l'ordinamento
3) Non si dichairano 1000 volte gli oggetti Database
4) Si distruggono gli oggetti alla fine.