PDA

View Full Version : ciclo for next in acces


federchicco
30-07-2003, 00:24
Ho un problema:
Ho fatto un ciclo e va tutto bene ma vorrei incrementare una campo data di 7 giorni progressivi per tutte le volte del ciclo.
Esempio:
Una manutenzione settimanale per un anno sono 52 volte e la data deve incrementarsi di 7 giorni per 52 volte
1- 8-15-21-28-35 etc.
Ho provato ad aggiunger il numero 7 al campo ma mi incrementa il primo record.
Se invece metto la variabile del ciclo si incrementea di un giorno.
Grazie

ibridonet
30-07-2003, 08:42
mi fai dare un'occhiata al codice?
così ti posso aiutare.

valse
30-07-2003, 09:42
Originariamente inviato da federchicco
Ho un problema:
Ho fatto un ciclo e va tutto bene ma vorrei incrementare una campo data di 7 giorni progressivi per tutte le volte del ciclo.
Esempio:
Una manutenzione settimanale per un anno sono 52 volte e la data deve incrementarsi di 7 giorni per 52 volte
1- 8-15-21-28-35 etc.
Ho provato ad aggiunger il numero 7 al campo ma mi incrementa il primo record.
Se invece metto la variabile del ciclo si incrementea di un giorno.
Grazie

devi usare la funzione DateAdd():

memorizzi il valore del campo data in una variabile di appoggio x esempio; in questo es. la chiamo d

If Not IsNull(Me.Anni) Then d = DateAdd("yyyy", Me!Anni, d)
If Not IsNull(Me.Mesi) Then d = DateAdd("m", Me!Mesi, d)
If Not IsNull(Me.Giorni) Then d = DateAdd("d", Me!Giorni, d)

io avevo tre caselle ed in particolare una che contiene il numero di anni da aggiungere, i mesi, i giorni... a te penso che basta fare:

d = DateAdd("d", 7, d)

fammi sapere
valse

federchicco
30-07-2003, 14:51
Io dovrei incrementare il campo dataricerca in modo che mi faccia uno step di 7 giorni.
come posso fare ?

Public Sub AddRecords(ID As Long)
'id è la chiave primaria di tabella1
'questa sub richiede DAO
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim i As Integer



'crea recordset su TABELLA1
Set rs1 = CurrentDb.OpenRecordset("tabella1", dbOpenDynaset)

'cerca il record in TABELLA1
rs1.FindFirst "ID = " & CStr(ID)

'se trova il record...
If Not rs1.NoMatch Then

'crea recordset su tabella2
Set rs2 = CurrentDb.OpenRecordset("TABELLA2", dbOpenDynaset)
'ciclo sul totale di giorni
'per ogni giorno aggiunge un record alla tabella2
For i = 1 To rs1("scadenza")
rs2.AddNew
'elenco di campi da copiare o da impostare

rs2("ID") = rs1("ID")
rs2("macchina") = rs1("macchina")
rs2("tipo") = rs1("tipo")
rs2("reparto") = rs1("reparto")
rs2("installazione") = rs1("installazione")
rs2("scadenza") = rs1("scadenza")
rs2("controllo") = rs1("controllo")
rs2("Dataricerca") = rs1("Dataricerca")
'scrive record
rs2.Update
Next

MsgBox "Records creati!"

'... altrimenti...
Else
MsgBox "Record origine non trovato"
End If

'chiude gli oggetti
rs1.Close
rs2.Close
Set rs1 = Nothing
Set rs2 = Nothing
End Sub

federchicco
01-08-2003, 00:36
Per incrementare di 7 giorni ho fatto cosi:
rs1.Edit
rs1("dataricerca") = rs1("dataricerca") + Int(365 / rs1("scadenza"))
rs1.Update

essendo il record corrente si aggiorna prima del ciclo.
In questo modo mi calcola il giorni di incremento perchè nel caso di 12 mesi l'incremento deve essee di 30 giorni ovvero 365/12.

alla fine del ciclo devo mettere a posto la data inziale che risulta incrementata di un'anno e quindi rifaccio l'edit sottraendo 365 giorni.

forse c'era un sistema migliore ma vedo che funziona.
Nel caso accetto correzioni e suggerimenti.
Grazie