Resettare solo alcune caselle di testo

di il
6 risposte

Resettare solo alcune caselle di testo

In una maschera utilizzo i valori delle caselle di testo editate dall'utente per aggiungere record ad una tabella collegata
una volta aggiunto il record devo ritornare sulla maschera conservando solo alcune caselle di testo che possono essere utilizzate per una nuova registrazione e resettarne delle altre che l'utente deve necessariamente ricompilare
la routine e' questa
Private Sub pulAggiungiGuida_Click()

' controllo dati prima di inserire il record in Guide
Dim codice, data, ORA, ore, istrutt, voto, brevi, pross, autos, notte, mess

codice = [Forms]![InserimentoGuideVeloce]![txtID]
data = [Forms]![InserimentoGuideVeloce]![txtData]
ORA = [Forms]![InserimentoGuideVeloce]![txtOra]
ore = [Forms]![InserimentoGuideVeloce]![cboOre]
istrutt = [Forms]![InserimentoGuideVeloce]![cboIstruttore]
voto = [Forms]![InserimentoGuideVeloce]![txtVoto]
brevi = [Forms]![InserimentoGuideVeloce]![txtNote]
pross = [Forms]![InserimentoGuideVeloce]![txtProx]
autos = [Forms]![InserimentoGuideVeloce]![flgA10]
notte = [Forms]![InserimentoGuideVeloce]![flgNotte]

' controllo alcuni valori che non devono essere vuoti
If autos = "" Or IsNull(autos) Then autos = 0
If notte = "" Or IsNull(notte) Then notte = 0
If codice = "" Or IsNull(codice) Then
    mess = "Inserire un allievo per la guida"
    GoTo 100
ElseIf data = "" Or IsNull(data) Then
    mess = "Inserire la data della guida"
    GoTo 100
ElseIf istrutt = "" Or IsNull(istrutt) Then
    mess = "Inserire l'istruttore della guida"
    GoTo 100
ElseIf ORA = "" Or IsNull(ORA) Then
    mess = "Inserire l'ora della guida"
    GoTo 100
ElseIf ore = "" Or IsNull(ore) Then
    mess = "Inserire la durata della guida"
    GoTo 100
End If

' aggiungo il record
DoCmd.OpenTable "Guide", acViewNormal, acAdd
DoCmd.GoToControl "COD_ANAGRAFE"
Screen.ActiveControl.Value = codice
DoCmd.GoToControl "DATA"
Screen.ActiveControl.Value = data
DoCmd.GoToControl "ORA"
Screen.ActiveControl.Value = ORA
DoCmd.GoToControl "ORE"
Screen.ActiveControl.Value = ore
DoCmd.GoToControl "ISTRUTTORE"
Screen.ActiveControl.Value = istrutt
DoCmd.GoToControl "VOTO"
Screen.ActiveControl.Value = voto
DoCmd.GoToControl "BREVI"
Screen.ActiveControl.Value = brevi
DoCmd.GoToControl "PROX"
Screen.ActiveControl.Value = pross
DoCmd.GoToControl "A10"
Screen.ActiveControl.Value = autos
DoCmd.GoToControl "NOTTE"
Screen.ActiveControl.Value = notte
DoCmd.Close acTable, "Guide"

' resetto solo i valori che servono
Me!txtOra.ControlSource = ""
Me!cboOre.ControlSource = ""
Me!txtVoto.ControlSource = ""
Me!txtNote.ControlSource = vbNullString
Me!txtProx.ControlSource = vbNullString
Me!flgA10.ControlSource = vbNullString
Me!flgNotte.ControlSource = vbNullString

' qui ho provato diversi metodi senza successo
Me.Requery
Me.Repaint

GoTo 500

100 MsgBox (mess)
500 'uscita

End Sub
ma ritornando sulla maschera i campi che voglio resettati non mi vengono svuotati e rimangono visibili i vecchi dati
mi potete aiutare?

6 Risposte

  • Re: Resettare solo alcune caselle di testo

    I controlli flgA10 e flgNotte sono due ceckbox?
  • Re: Resettare solo alcune caselle di testo

    Si sono due flag vero faso
    li resetto nuovamente a falso
  • Re: Resettare solo alcune caselle di testo

    Hai valutato di impostare valori predefiniti per campi o controlli?
    https://support.office.com/it-it/article/impostare-valori-predefiniti-per-campi-o-controlli-99508d03-b28b-4057-9652-dac1c4c60d86
  • Re: Resettare solo alcune caselle di testo

    Si ho provato i valori default sulla form ma senza risultato

    nella form sopra dopo aver inserito il nuovo record su Guide (Sottomaschera tabella relazionata) con il codice VBA sopra
    devo ritornare in editing e conservare Data e Istruttore
    mentre Allievo Data Ora Ore i due flag e le note devono ritornare vuoti.
    Ho rifatto il codice un po piu' ordinato:
    Private Sub pulAggiungiGuida_Click()
    On Error GoTo Err_OK_Click
    
    ' controllo dati prima di inserire il record in Guide
    Dim codice, data, ORA, ore, istrutt, VOTO, brevi, pross, autos, notte, mess
    
    ' carico i valori editati dall'utente
    codice = [Forms]![InserimentoGuideVeloce]![txtID]
    data = [Forms]![InserimentoGuideVeloce]![txtData]
    ORA = [Forms]![InserimentoGuideVeloce]![txtOra]
    ore = [Forms]![InserimentoGuideVeloce]![cboOre]
    istrutt = [Forms]![InserimentoGuideVeloce]![cboIstruttore]
    VOTO = [Forms]![InserimentoGuideVeloce]![txtVoto]
    brevi = [Forms]![InserimentoGuideVeloce]![txtNote]
    pross = [Forms]![InserimentoGuideVeloce]![txtProx]
    autos = [Forms]![InserimentoGuideVeloce]![flgA10]
    notte = [Forms]![InserimentoGuideVeloce]![flgNotte]
    If autos = "" Or IsNull(autos) Then autos = 0
    If notte = "" Or IsNull(notte) Then notte = 0
    
    If codice = "" Or IsNull(codice) Then
        mess = "Inserire un allievo per la guida"
        Err.Raise 0
    ElseIf data = "" Or IsNull(data) Then
        mess = "Inserire la data della guida"
        Err.Raise 0
    ElseIf istrutt = "" Or IsNull(istrutt) Then
        mess = "Inserire l'istruttore della guida"
        Err.Raise 0
    ElseIf ORA = "" Or IsNull(ORA) Then
        mess = "Inserire l'ora della guida"
        Err.Raise 0
    ElseIf ore = "" Or IsNull(ore) Then
        mess = "Inserire la durata della guida"
        Err.Raise 0
    
    End If
    
    ' aggiungo il nuovo record
    DoCmd.OpenTable "Guide", acViewNormal, acAdd
    DoCmd.GoToControl "COD_ANAGRAFE"
    Screen.ActiveControl.Value = codice
    DoCmd.GoToControl "DATA"
    Screen.ActiveControl.Value = data
    DoCmd.GoToControl "ORA"
    Screen.ActiveControl.Value = ORA
    DoCmd.GoToControl "ORE"
    Screen.ActiveControl.Value = ore
    DoCmd.GoToControl "ISTRUTTORE"
    Screen.ActiveControl.Value = istrutt
    DoCmd.GoToControl "VOTO"
    Screen.ActiveControl.Value = VOTO
    DoCmd.GoToControl "BREVI"
    Screen.ActiveControl.Value = brevi
    DoCmd.GoToControl "PROX"
    Screen.ActiveControl.Value = pross
    DoCmd.GoToControl "A10"
    Screen.ActiveControl.Value = autos
    DoCmd.GoToControl "NOTTE"
    Screen.ActiveControl.Value = notte
    DoCmd.Close acTable, "Guide"
    
    ' resetto solo i valori che servono
    Me!txtOra.ControlSource = ""
    Me!cboOre.ControlSource = ""
    Me!txtVoto.ControlSource = ""
    Me!txtNote.ControlSource = ""
    Me!txtProx.ControlSource = ""
    Me!flgA10.ControlSource = ""
    Me!flgNotte.ControlSource = ""
    
    Me.Requery
    Me.Repaint
    
    Exit Sub
    
    Err_OK_Click:
    MsgBox mess, vbOKOnly, "Manca un dato"
    
    End Sub
  • Re: Resettare solo alcune caselle di testo

    Salve Walter
    Alcune domande e suggerimenti:
    Il requery continua a non funzionare? se no dovresti fare un salva record prima.
    Err_OK_Click:
    MsgBox mess, vbOKOnly, "Manca un dato"
    Questo costringe l'operatore a fare una ricerca in un groviglio di dati.
    Potresti usare la formattazione condizionale (se il dato non c'è il controllo è a fondo rosso.
    In generale, invece avrei pensato di operare in questo modo:
    1) Aggiungo un record alla tab.
    2) Modifico il record con una query di aggiornamento che preleva i dati che non voglio variare dalla form.
    Saluti.
    Gianni
  • Re: Resettare solo alcune caselle di testo

    Grazie a tutti ho risolto
    il problema era nel codice
    Private Sub cboxAnagrafica_AfterUpdate()
    
    Me.Requery
    
    End Sub
    
    Private Sub cboAnagrafica_AfterUpdate()
    
    End Sub
    
    Private Sub pulAggiungiGuida_Click()
    
    ' controllo dati prima di inserire il record in Guide
    Dim codice, data, ORA, ore, istrutt, VOTO, brevi, pross, autos, notte, mess
    
    ' carico i valori editati dall'utente
    codice = [Forms]![InserimentoGuideVeloce]![cboxAnagrafica]
    data = [Forms]![InserimentoGuideVeloce]![txtData]
    ORA = [Forms]![InserimentoGuideVeloce]![txtOra]
    ore = [Forms]![InserimentoGuideVeloce]![cboOre]
    istrutt = [Forms]![InserimentoGuideVeloce]![cboIstruttore]
    VOTO = [Forms]![InserimentoGuideVeloce]![txtVoto]
    brevi = [Forms]![InserimentoGuideVeloce]![txtNote]
    pross = [Forms]![InserimentoGuideVeloce]![txtProx]
    autos = [Forms]![InserimentoGuideVeloce]![flgA10]
    notte = [Forms]![InserimentoGuideVeloce]![flgNotte]
    If autos = "" Or IsNull(autos) Then autos = 0
    If notte = "" Or IsNull(notte) Then notte = 0
    
    If codice = "" Or IsNull(codice) Then
        mess = "Inserire nome allievo della guida"
    ElseIf data = "" Or IsNull(data) Then
        mess = "Inserire data della guida"
    ElseIf istrutt = "" Or IsNull(istrutt) Then
        mess = "Inserire istruttore della guida"
    ElseIf ORA = "" Or IsNull(ORA) Then
        mess = "Inserire ora della guida"
    ElseIf ore = "" Or IsNull(ore) Then
        mess = "Inserire durata della guida"
    Else
        ' aggiungo il nuovo record
        DoCmd.OpenTable "Guide", acViewNormal, acAdd
        DoCmd.GoToControl "COD_ANAGRAFE"
        Screen.ActiveControl.Value = codice
        DoCmd.GoToControl "DATA"
        Screen.ActiveControl.Value = data
        DoCmd.GoToControl "ORA"
        Screen.ActiveControl.Value = ORA
        DoCmd.GoToControl "ORE"
        Screen.ActiveControl.Value = ore
        DoCmd.GoToControl "ISTRUTTORE"
        Screen.ActiveControl.Value = istrutt
        DoCmd.GoToControl "VOTO"
        Screen.ActiveControl.Value = VOTO
        DoCmd.GoToControl "BREVI"
        Screen.ActiveControl.Value = brevi
        DoCmd.GoToControl "PROX"
        Screen.ActiveControl.Value = pross
        DoCmd.GoToControl "A10"
        Screen.ActiveControl.Value = autos
        DoCmd.GoToControl "NOTTE"
        Screen.ActiveControl.Value = notte
        DoCmd.Close acTable, "Guide"
        
        ' resetto solo i valori che servono
        [Forms]![InserimentoGuideVeloce]![cboxAnagrafica].Value = ""
        [Forms]![InserimentoGuideVeloce]![txtOra].Value = ""
        [Forms]![InserimentoGuideVeloce]![cboOre].Value = ""
        [Forms]![InserimentoGuideVeloce]![txtVoto].Value = ""
        [Forms]![InserimentoGuideVeloce]![txtProx].Value = ""
        [Forms]![InserimentoGuideVeloce]![txtNote].Value = ""
        [Forms]![InserimentoGuideVeloce]![flgA10].Value = ""
        [Forms]![InserimentoGuideVeloce]![flgNotte].Value = ""
        
        Me.Requery
    
    End If
    If mess <> "" Then MsgBox mess, vbOKOnly, "Manca un dato"
    
    End Sub
    cosi' funziona perfettamente
    aggiornai dati e torna sul form delle guide con tutto pulito ad esclusione di
    data e istruttore
Devi accedere o registrarti per scrivere nel forum
6 risposte