Buongiorno, avrei bisogno di chiedere un aiuto/consiglio su una query di aggiornamento. Non ho molta esperienza e neanche tanta dimestichezza in VBA. Più che altro mi arrangio con quello che trovo in rete e qualche nozione acquisita in passato. Questo per dire che mi scuso in anticipo se non mi esprimo bene.
Passo ai problemi:
Ho una tabella (
tblElencoNominativi) con i classici campi
Id; Cognome; Nome; DataDiNascita; ecc...e una Form che li rappresenta/manipola
Oltre questi campi ho altri campi destinati all'inserimento di date (
DataRilascioCertificato, DataScadenzaCertificato, DataInvito) che vengono visualizzati in form delle textbox (
txtRilascioCertificato; txtInvito; txtScadenzaCertificato)
Il mio primo problema è la dichiarazione di questi campi che io per ora da neofita li ho dichiarati
Data/Ora. Quindi una volta che ho spiegato il mio problema, vorrei capire, facendo un passo indietro, se la dichiarazione
Data/Ora è corretta oppure bisogna trasformarli in
Testo Breve.
Ora il mio obiettivo è quello di creare tre ipotesi su evento click del
btnCorferma:
1) Se textbox
txtRilascioCertificato è maggiore di
txtInvito allora il campo
DataInvito si deve cancellare e campo
DataScadenzaCertificato deve corrispondere al contenuto della textbox
txtRilascioCertificato + 5 anni
2) Se
txtRilascioCertificato è vuota deve svuotare i campi
DataRilascioCertificato e
DataScadenzaCertificato
3) Se
txtInvito è vuota deve svuotare il campo
DataInvito
Io ho provato a buttar giù due righe ma ovviamente sbaglio. Faccio confusione tra dichiarazioni di variabili, date, stringhe, ecc....
Private Sub btnConferma_Click()
'PULSANTE CONFERMA
Dim sDataScadenza As String, sDataRilascioCertificato As String, sDataInvito As String
Refresh
sDataRilascioCertificato = CDate(txtRilascioCertificato)
sDataInvito = CDate(txtInvito)
Select Case sDataRilascioCertificato
Case Is > sDataInvito
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE tblElencoNominativi SET [Data invito] = Null WHERE [IdNominativo] = " & OpenArgs
DoCmd.SetWarnings True
Case Is <> ""
sDataScadenza = DateAdd("yyyy", 5, CDate(sDataRilascioCertificato))
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE tblElencoNominativi SET [Data scadenza certificato] = " & sDataScadenza & " WHERE [IdNominativo] = " & OpenArgs
DoCmd.SetWarnings True
Case Is = ""
DoCmd.SetWarnings False
CurrentDb.Execute "UPDATE tblElencoNominativi SET [Data scadenza certificato] = Null, [Data rilascio certificato] = Null WHERE [IdNominativo] = " & OpenArgs
DoCmd.SetWarnings True
End Select
DoCmd.Close acForm, Me.Name
Forms("frmElencoNominativi").Requery
End Sub
Ho letto che la funzione DateAdd restituisce un valere Variant e quindi immagino che così scritto già parto col piede sbagliato....
In altre parole:
in una maschera inserisco una data di rilascio certificato medico. A questa data bisogna aggiungere 5 anni e visualizzare questa nuova data in una textbox corrispondente al campo DataScadenzaCertificato. Un mese prima che scade il certificato mando un invito alla persona interessata il quale dovrà attivarsi per presentare un nuovo certificato. Questa data di invito la devo annotare nel database. Questa persona dopo qualche settimana mi porterà il nuovo certificato, io inserirò nel database la nuova scadenza. A questo punto se la nuova scadenza risulterà maggiore della data d'invito allora la data di invito non servirà più, quindi si deve eliminare.
Ma in tutti i casi queste date posso anche ometterle, quindi i campi possono risultare vuoti. La mia routine va in blocco proprio perché le variabili risultano nulle o vuote e ciò che ho scritto non va bene.