controllo autocompletamento - autofill

Anonimo
2017-02-08T06:09:20+00:00

Salve a tutti,

immagino esistono molti modi per poter popolare un controllo all'interno di una form, in base alla quantità dei valori da scegliere.

Di solito vengono prelevati da una combobox oppure inseriti da un altra form.

Nel caso seguente vorrei poter ottenere il risultato come segue.

ho una tabella città:

idcitta

nomecitta

ho una form con una textbox citta e vorrei poter, come avviene di solito in diversi siti internet, poter completare automaticamente il nome della citta in base alle prime lettere che vengono digitate.

é possibile con access?

Grazie a tutti

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

8 risposte

Ordina per: Più utili
  1. Anonimo
    2017-02-09T07:43:37+00:00

    ciao Peppino38,

    interessante 3d, non ci avevo mai pensato...!

    la combobox gestisce la cosa in modo nativo e più facilmente, con la textBox è necessario lavorarci un po' su.

    Secondo me per simulare l'autoFill (o meglio autoExpand o espansione automatica) della comboBox, devi tenere conto di quello che viene digitato volta per volta, tasti backspace, canc e apostrofi compresi e per permettere di continuare la digitazione controllare la parte selezionata e relativa lunghezza con le proprietà selText e selLength, aprendo un recordset per verificare se quanto digitato "matcha" oppure no...

    esempio :

    Option Compare Database

    Option Explicit

    Private strSqlSel As String

    Private intChar   As Integer

    Private strString As String

    Private Const strSqlFull As String = "SELECT comuni.citta FROM comuni"

    Private Sub citta_Change()

    Dim rst      As DAO.Recordset

    strSqlSel = strSqlFull & " WHERE comuni.citta Like '" & Replace(strString, "'", "''") & "*' ORDER BY comuni.citta"

    Set rst = DBEngine(0)(0).OpenRecordset(strSqlSel, dbOpenDynaset)

    With Me.citta

        If intChar <> 8 And intChar <> 46 Then

          .Value = strString

          .SelStart = Len(.Value)

            With rst

              .FindFirst "[citta] like '" & Replace(strString, "'", "''") & "*'"

               If Not .NoMatch Then

                   Me.citta = rst.Fields(0)

               End If

            End With

            .SelStart = Len(strString)

            .SelLength = Len(.Value) - Len(strString)

         End If

    End With

    Set rst = Nothing

    End Sub

    Private Sub citta_KeyDown(KeyCode As Integer, Shift As Integer)

    intChar = KeyCode ' gestione canc

    End Sub

    Private Sub citta_KeyPress(KeyAscii As Integer)

    intChar = KeyAscii

    Select Case intChar

        Case 65 To 90, 97 To 122, 32, 39  ' alfabeto ad A...Z e da a...z 32=space , 39='

                strString = strString & Chr(intChar)

         Case 8   ' 8=backspace

            If Len(Me.citta.Text) > 0 Then

                With Me.citta

                    strString = Left$(.Text, Len(.Text) - 1)

                End With

            End If

    End Select

    End Sub

    Private Sub Form_Current()

    If Me.NewRecord Then strString = vbNullString

    End Sub

    se la textBox interessata da questo "caratteristica" è una sola può andare anche così, fossero una per maschera o più per maschera, andrebbe ripensato il tutto con una classe specifica.

    Sempre IMHO.

    prova a vedere qui se ci siamo.

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-02-09T06:23:06+00:00

    ciao Mimmo

    si il controllo non è digitabile. ho creato una semplicissima form in visualizzazione struttura, ho inserito una casella di testo txtcittà e sull'evento modifica ho inserito il codice da te proposto.

    quando visualizzo la form il controllo non è digitabile.

    Grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-02-08T13:56:18+00:00

    Se capisco il controllo non è digitabile. Con quale modalità hai aperto la form? Anche gli altri controlli sono protetti?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-02-08T13:52:08+00:00

    Ciao Mimmo

    ho modificato Nomecittà in Nomecitta ma nella frm txtcitta non consente la scrittura.

    Quale potrebbe essere l'errore?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-02-08T08:35:48+00:00

    Ciao Peppino,

    forse potresti, nell'evento su modifica del controllo text-box, effettuare una DFirst sulla tabella Città con condizione Like del testo immesso seguito da * , qualcosa del tipo:

    Dim wCitta as String

    wCitta =  DFirst("Nomecittà","Città","Nomecitta Like '" & txtCittà & "*'")

    if Not IsNull(wCitta) Then

       txtCittà=wCittà

    End If

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento