Calcellazione record in base a data attuale

di il
13 risposte

Calcellazione record in base a data attuale

Buonasera, mi auguro di porre bene la mia richiesta.

In pratica ho una tabella tblMemo con 5 campi:
ID----> num. Aut.
Data----> testo breve
Ora----> testo breve
Memo----> testo lungo
Data_Canc----> data/ora

Questi campi li visualizzo attraverso la maschera frmMemo. Al suo interno ho un button INSERISCI che, una volta compilati tutti i campi, attraverso una query vado a scrivere in tabella tblMemo.

Il mio problema è il seguente:

Nella tblMemo, al campo Data_Canc in pratica viene indicata una data. Ad esempio quella di domani.

Dunque, all'evento Open di un'altra maschera, vorrei che tutti i record che riportano nel campo Data_Canc la data fino a domani vengono cancellati quando domani aprirò questa seconda maschera.

In altre parole, io apro la maschera frmMemo, inserisco DATA, ORA, il testo in MEMO, la data di cancellazione in DATA_CANC (ad esempio quella di domani). Premo su INSERISCI e in tabella tblMemo mi comparirà un nuovo record con tutti i dati appena inseriti. Poi ripeto l'operazione altre volte, inserendo dati diversi e date di cancellazione di altri giorni.
Domani vado ad aprire un'altra maschera, non appena la apro, ci deve essere un controllo in tblMemo e se ci sono record che hanno scritto nel campo Data_Canc la data attuale (ovvero quella di domani) allora si dovranno cancellare.

Ho provato così:
Dim rs as DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT ID FROM tblMemo WHERE Data_Canc =" & Date) 
While Not rs.EOF
If rs(0) <> "" Then
     CurrentDb.Executive "DELETE FROM tblMemo WHERE ID =" & rs(0)
     Requery 
Else
     Exit Sub
End if
rs.MoveNext
Wend

End Sub
Chiaramente non funziona o meglio non fa nulla. Dove sbaglio? La strada è quella giusta o sto cannando?
Grazie

13 Risposte

  • Re: Calcellazione record in base a data attuale

    Quello che fai è assolutamente assurdo, sbagliato...
    A livello di logica potresti riflettere, ma credo tu debba prima studiare un Po...
    Cerchi di aprire un recordset filtrando per data, non formattata correttamente, poi cicli per eliminarne uno alla volta filtrando per ID.
    E cancellarli tutti in un colpo usando il criterio data nel delete...?

    Poi quando scrivi codice nel forum almeno assicurati cgevqyello che scrivi sia quanto meno esistente...
    È la seconda volta che ti faccio notare che scrivi funzioni insistenti e per questo non serve il forum basta la guida...
  • Re: Calcellazione record in base a data attuale

    Ok, quindi in sintesi ho seguito il tuo suggerimento
    CurrentDb.Executive "DELETE FROM tblMemo WHERE Dat_Canc =.... 
    Ora se scrivo al posto dei puntini una data (14/07/2018) mi elimina in un colpo solo tutti i record riferiti a quella data. Ma provando a scrivere
    CurrentDb.Executive "DELETE FROM tblMemo WHERE Dat_Canc = " & Date/code]
    
    per dargli la data attuale, non succede nulla. 
    
    Sicuramente c'entra qls quello che mi dicevi riguardo alla formattazione non corretta della data o cmq è la sintassi che non va ancora bene. Se puoi darmi questo ultimo aiuto te ne sarei grato.
  • Re: Calcellazione record in base a data attuale

    Se scrivi un'altra volta Executive smetto di rispondere.
    Le date si formattato diversamente... fai una ricerca sulla sintassi delle date in esecuzioni sql...
  • Re: Calcellazione record in base a data attuale

    Va bene capo.....agli ordini.
  • Re: Calcellazione record in base a data attuale

    alexps81 ha scritto:


    Va bene capo.....agli ordini.
    Ti rendi conto che non esiste Executive...? Spero sia un errore dello scrivere altrimenti...
  • Re: Calcellazione record in base a data attuale

    Ahhhh..... Scusa...

    Execute
  • Re: Calcellazione record in base a data attuale

    Dimmi solo se SI o NO
    CurrentDb.Execute "DELETE FROM tblMemo Data_Canc = " & Format(Date, "\#mm/dd/yyyy\#")
    Funziona cmq.
  • Re: Calcellazione record in base a data attuale

    Bene
  • Re: Calcellazione record in base a data attuale

    Chissà ora come reagisci.....

    Siccome può capitare che il campo Data_Canc può essere vuoto o che addirittura non ci sono record....dovrei far fare un controllo. Cioè prima verificare se ci sono record con date di cancellazione, poi eseguire la query, altrimenti va in bug se non ci sono record così.

    Suggerimenti? Help me....
  • Re: Calcellazione record in base a data attuale

    Chi se ne frega se genera errore... anzi meglio.
    La gestione errori si usa proprio per questo... a cosa serve fare un controllo prima...?
  • Re: Calcellazione record in base a data attuale

    Perdonami sicuramente non ti seguo per mie incompetenze....dicevo se in questa tabella non sono presenti record o magari uno dei record non ha la data nel campo Dat_Canc, allora la query di cancellazione si blocca e va in bug il codice (sicuramente mi massacrerai per questa ultima cosa che ho scritto, ma meglio non so indicare)
  • Re: Calcellazione record in base a data attuale

    Non sono sicuro di aver compreso il problema al 100%. Io in casi di indecisione/confusione idee procedo così:
    1. Creo una query di eliminazione (con opportuno filtro) QueryX
    2. Eseguo QueryX

    Se proprio non vuoi tenerti la QueryX, cattura il suo SQL e scrivi coerentemente la sintassi in VBA.
  • Re: Calcellazione record in base a data attuale

    OsvaldoLaviosa ha scritto:


    Non sono sicuro di aver compreso il problema al 100%. Io in casi di indecisione/confusione idee procedo così:
    1. Creo una query di eliminazione (con opportuno filtro) QueryX
    2. Eseguo QueryX

    Se proprio non vuoi tenerti la QueryX, cattura il suo SQL e scrivi coerentemente la sintassi in VBA.
    Quello che ha fatto quindi secondo te cosa sarebbe...?
Devi accedere o registrarti per scrivere nel forum
13 risposte