Modifica automatica campo booelano

di il
3 risposte

Modifica automatica campo booelano

Buongiorno a tutti,
ho un problema che non riesco a risolvere e vorrei chiedere il vostro aiuto.
In pratica nel mio db ho una tabella che contiene diversi campi fra cui "Data", che contiene la data di inserimento del record (compilata automaticamente con del codice al momento dell'inserimento del record) e "Nuova", un campo booleano che al momento dell'inserimento è settato autoamticamente su TRUE.
Quello che vorrei è che, all'apertura di una certa maschera ad esempio (o se più semplice del db stesso), il campo "nuova" venga "verificato" e se è passato un mese rispetto alla data contenuta in "Data", il suo valore passi da True a False.
Ho provato a scrivere il seguente codice, probabilmente tutto sbagliato :

Private Sub Form_Load()

Set db = CurrentDb '
Set rs = db.OpenRecordset("DB_CIL", dbOpenDynaset)

rs.Edit
rs.MoveFirst

Do While Not rs.EOF
If DateDiff(d, Now(), rs("Data")) > 30 Then rs.Fields("Nuova") = False
rs.MoveNext
Loop

rs.Update
End Sub

Sapreste dirmi dove sbaglio? Grazie a tutti

3 Risposte

  • Re: Modifica automatica campo booelano

    Non ricordo molto di DAO ma so che la funzione DateDiff() richiede che il primo paremetro sia una stringa, quindi devi indicare "d"

    Vedi qui
    https://support.office.com/it-it/article/funzione-datediff-e6dd7ee6-3d01-4531-905c-e24fc238f85f

    Inoltre, se non ricordo male, mi pare che con DAO il solo MoveNext non basta, devi fare l'update esplicito dopo ogni modifica (a differenza di ADO in cui è implicito).

    A parte questo, io ti suggerisco di fare una query di aggiornamento, invece di aprire un recordset e scorrere ogni singolo record.
    Se tu avessi 200.000 o più record?
  • Re: Modifica automatica campo booelano

    Forse la soluzione più rapida è aggiungere, all'apertura del programma o in una maschera in particolare, la seguente riga di codice
    DoCmd.Exceute "UPDATE DB_CIL SET [Nuova] = False WHERE ((DateDiff("d",[Data],Now())>30));"
  • Re: Modifica automatica campo booelano

    Grazie ad entrambi, alla fine ho cambiato sistema, ho cancellato il campo Nuova e ho impostato la formula datediff ecc. nella formattazione condizionale sui record del report generato dalla tabella (dato che il mio scopo finale era quello che il record si colorasse nel caso la differenza fosse inferiore di 30)
Devi accedere o registrarti per scrivere nel forum
3 risposte