Condividi tramite

Sincronizzazione casella combinata

Anonimo
2017-03-26T14:20:58+00:00

Ciao a tutti

Nel mio db ho una maschera per l'anagrafica dei pazienti.

All'interno della maschera ho inserito una semplice combobox di ricerca pazienti​. Per capirci nella creazione guidata ho selezionato "Trova un record..."

Poi ho creato tre pulsanti per aggiungere eliminare e salvare i record.

La combobox funziona perfettamente, scegliendo un paziente dal menu a discesa mi porta nel record corrispondente.

Il problema mi nasce quando inserisco un paziente nuovo.

Mi spiego meglio, se sto su un record specifico e clicco sul pulsante aggiungi la maschera si sposta su record nuovo ma la combobox rimane sul record ke visualizzavo prima.

La stessa cosa succede se clicco sul pulsante Salva, il record viene salvato ma la combobox rimane sul record precedente.

Come posso risolvere questo problema di sincronizzazione?

Grazie

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2017-03-27T20:09:48+00:00

ciao Sossio,

supponendo, per i miei test, tratto dal NorthWind la tabella :

da cui la form :

dopo aggiornamento della comboBox cboCategories ( è l'unica combo  che c'è quindi di facile individuazione)

Private Sub cboCategories_AfterUpdate()

With Me.RecordsetClone

    .findFirst "categoryID=" & Me.cboCategories

    If Not .nomatch Then

        Me.Bookmark = .Bookmark

    End If

End With

End Sub

sincronizzi la maschera con la scelta effettuata dalla combo box e su corrente :

Private Sub Form_Current()

With Me.cboCategories

        If Not IsNull(Me.CategoryID) Then

            .Requery

            .Value = Me.CategoryID

        Else

            .Value = Null

        End If

 End With

End Sub

viceversa, quando selezionato dalla form viene sincronizzato nella comboBox.

sul commandButton con cui inserisci un nuovo record :

Private Sub cmdNewRecord_Click()

DoCmd.GoToRecord acDataForm, Me.Name, acNewRec

Me.cboCategories = Null

End Sub

lo stesso per quanto alla comboBox,, rendendo il suo valore null in quanto nuovo record.

l'origine riga della comboBox cboCategories:

SELECT Categories2.CategoryID, Categories2.CategoryName FROM Categories2;

ha come colonna associata il campo CategoryID la chiave primaria della tabella Categories2 che permette di sincronizzare la maschera verso la combo e viceversa.

nel codice che mostri verifichi isnull  su un commanButton....? ....mmmmm....lo devi effettuare sul controllo comboBox come mostrato cioè nel tuo caso casellaCombinata33.

Value non è una proprietà o metodo per un commandButton...da qui l'errore.

Spero che il senso sia chiaro.

Ti invito a modificare sempreil nome dei controlli specie quelli non associati attribuendo loro nomi maggiormente significativi...casellaCombinata33 non lo è.

Ciao e buona serata.

Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-03-27T20:29:19+00:00

    ciao Sossio,

    supponendo, per i miei test, tratto dal NorthWind la tabella :

    da cui la form :

    dopo aggiornamento della comboBox cboCategories ( è l'unica combo  che c'è quindi di facile individuazione)

    Private Sub cboCategories_AfterUpdate()

    With Me.RecordsetClone

        .findFirst "categoryID=" & Me.cboCategories

        If Not .nomatch Then

            Me.Bookmark = .Bookmark

        End If

    End With

    End Sub

    sincronizzi la maschera con la scelta effettuata dalla combo box e su corrente :

    Private Sub Form_Current()

    With Me.cboCategories

            If Not IsNull(Me.CategoryID) Then

                .Requery

                .Value = Me.CategoryID

            Else

                .Value = Null

            End If

     End With

    End Sub

    viceversa, quando selezionato dalla form viene sincronizzato nella comboBox.

    sul commandButton con cui inserisci un nuovo record :

    Private Sub cmdNewRecord_Click()

    DoCmd.GoToRecord acDataForm, Me.Name, acNewRec

    Me.cboCategories = Null

    End Sub

    lo stesso per quanto alla comboBox,, rendendo il suo valore null in quanto nuovo record.

    l'origine riga della comboBox cboCategories:

    SELECT Categories2.CategoryID, Categories2.CategoryName FROM Categories2;

    ha come colonna associata il campo CategoryID la chiave primaria della tabella Categories2 che permette di sincronizzare la maschera verso la combo e viceversa.

    nel codice che mostri verifichi isnull  su un commanButton....? ....mmmmm....lo devi effettuare sul controllo comboBox come mostrato cioè nel tuo caso casellaCombinata33.

    Value non è una proprietà o metodo per un commandButton...da qui l'errore.

    Spero che il senso sia chiaro.

    Ti invito a modificare sempreil nome dei controlli specie quelli non associati attribuendo loro nomi maggiormente significativi...casellaCombinata33 non lo è.

    Ciao e buona serata.

    Sandro.

    Ciao Sandro,

    immaginavo di aver impostato male il tutto

    Ti ringrazio gentilissimo come sempre!!

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-03-27T19:33:29+00:00

    Ciao Sossio78,

    supponendo che si ci una chiave primaria e che sia un longAutonumber o comunque numerica che identifica il paziente e che sia anche la colonna associata della comboBox.

    prova in questo modo:

    sul comman button che crea il nuovo record :

    Private Sub cmdNewRecord_Click()

    DoCmd.GoToRecord acDataForm, Me.Name, acNewRec

    Me.tuaComboBox= Null

    End Sub

    e su corrente  della form :

    Private Sub Form_Current()

     With Me.tuaComboBox

            If Not IsNull(Me.tuoControlloPK) Then

                .Requery

                .Value = Me.tuoControlloPK

            Else

                .Value = Null

            End If

     End With

    End Sub

    Personalizza il nome dei controlli con quelli proprio del tuo scenario.

    Facci sapere.

    Ciao, Sandro.

    Ciao Sandro,

    ho provato il tuo consiglio ma mi da errore su corrente della form come puoi vedere ma sicuramente ho sbagliato io a fare qualcosa.

    Smanettando un pò con le macro ho risolto in questo modo:

    E' un pò artigianale come cosa ma funziona..

    Grazie mille!

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-03-26T15:57:29+00:00

    Ciao Sossio78,

    supponendo che si ci una chiave primaria e che sia un longAutonumber o comunque numerica che identifica il paziente e che sia anche la colonna associata della comboBox.

    prova in questo modo:

    sul comman button che crea il nuovo record :

    Private Sub cmdNewRecord_Click()

    DoCmd.GoToRecord acDataForm, Me.Name, acNewRec

    Me.tuaComboBox= Null

    End Sub

    e su corrente  della form :

    Private Sub Form_Current()

     With Me.tuaComboBox

            If Not IsNull(Me.tuoControlloPK) Then

                .Requery

                .Value = Me.tuoControlloPK

            Else

                .Value = Null

            End If

     End With

    End Sub

    Personalizza il nome dei controlli con quelli proprio del tuo scenario.

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento