ACCESS VBA Type mismatch - Tipi di dati non corrispondenti nell'espressione criterio

Anonimo
2021-01-09T18:29:33+00:00

Buonasera,

Ho costruito un database contatti piuttosto semplice a cui sono legate altre tabelle che riguardano la subregione di provenienza, la tipologia, e i referenti aziendali.

Dopo aver fatto nella tabella contatti (la principale) il Dlookup per avere il collegamento tra le varie tabelle, nel momento in cui voglio ricercare il dato in una maschera mi da sempre errore. 

Ho provato con le caselle combinate multiple a filtrare la maschera ma non funziona.

Come posso fare?

Se il dato nel campo della tabella principale è numerico per creare invece la casella prendo i dati da una tabella secondaria (es. tipologia), quindi va da sé che non riconosce il lookup.

Quali sono i passaggi che mi sono persa?

Il nome della tabella da cui provengono i dati è Contacts, in essa sono presenti i 3 capi ID_Subregion, ID_Type, ID_Keywords1 corrispondenti ai campi id delle rispettive tabelle a cui ho eseguito il dlookup per visualizzare le voci e non l'ID.

Posso normalizzare ovvero posso far sì che nella casella combinata mi dia i nomi ma che come mezzo di ricerca usi l'ID?

E' stato un errore chiamare i campi delle due tabelle in egual modo?

Spero di essere stata chiara e scusatemi per la mia inesperienza. Grazie a chi mi aiuterà.

Questo è il codice per i filtri:

Private Sub ApplicaFiltri()

    Dim wFiltro As String

    On Error Resume Next

    wFiltro = ""

    If Left(Me.CboSubregion, 1) <> "(" Then

       wFiltro = wFiltro & " And ID_Subregion = '" & Me.CboSubregion & "' "

    End If

    If Len(Me.cboType & "") > 0 Then

       wFiltro = wFiltro & " And ID_Type = '" & Me.cboType & "' "

    End If

   If Len(Me.CboKeywords1 & "") > 0 Then

       wFiltro = wFiltro & " And ID_Keywords1 = '" & Me.CboKeywords1 & "' "

  End If

    Me.Filter = Mid(wFiltro, 6, Len(wFiltro))

    Me.FilterOn = True

End Sub

Private Sub CboKeywords1_AfterUpdate()

ApplicaFiltri

End Sub

Private Sub CboSubregion_AfterUpdate()

ApplicaFiltri

End Sub

Private Sub CboType_AfterUpdate()

ApplicaFiltri

End Sub


Questo invece è il codice per la ricerca Option Compare Database:


Option Compare Database

Private Sub CboSubregion_AfterUpdate()

Call CriterioRicerca

End Sub

Function CriterioRicerca()

Dim strSubregion, strType, strKeywords1 As String

Dim Scegli As String

Dim strScelta As String

If IsNull(Me.CboSubregion) Then

    strSubregion = "[ID_Subregion] Like '*'"

Else

    strSubregion = "[ID_Subregion] = " & Me.CboSubregion

End If

If IsNull(Me.cboType) Then

    strType = "[ID_Type] Like '*'"

Else

    strType = "[ID_Type] = " & Me.cboType

End If

If IsNull(Me.CboKeywords1) Then

    strKeywords1 = "[ID_Keywords1] Like '*'"

Else

    strKeywords1 = "[ID_Keywords1] = " & Me.CboKeywords1

End If

strScelta = strSubregion & "And" & strType & "And" & strKeywords1

Scegli = "Select '*' From Contacts WHERE " & strScelta

Form_MS_Search.RecordSource = Scegli

Form_MS_Search.Requery

End Function

Private Sub CboType_AfterUpdate()

Call CriterioRicerca

End Sub

Private Sub CboKeywords1_AfterUpdate()

Call CriterioRicerca

End Sub

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

21 risposte

Ordina per: Più utili
  1. Anonimo
    2021-01-12T12:36:40+00:00

    ciao Luciana,

    le relazioni sono un vincolo un ulteriore garanzia di normalizzazione che non deve essere applicata forzatamente per ottenere quanto di ho mostrato.

    Se elimini le relazioni della demo che ti ho mostrato il tutto funziona come prima.

    La demo e' presa dell'esempio di MSFT della NothWind e che e' da prendere come spunto per molti aspetti ma per altri e' decisamente carente, anche se predisposto dalla MSFT stessa.

    Le chiavi esterne se fosse per me le manterrei sempre numeriche senza lookuk fields che sono solo fonte di mal di testa.

    Per ottenere la descrizione nella visualizzazione della combo e non il valore numerico e' sufficiente impostare un predicato sql nel controllo della form.

    Spero sia sufficientemente chiaro.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-01-12T10:47:17+00:00

    Ciao Sandro,

    grazie intanto per questo esempio fantastico. E' bello vedere qualcosa che funziona e sicuramente un codice più affidabile.

    Ora la mia domanda è, ho visto inanzitutto che non ci sono relazioni tra le varie tabelle tramite integrità referenziale ecc. quindi in realtà mi stai dicendo che collegando tutto come ho fatto ho solo complicato la faccenda? 

    Quindi se ho capito e correggimi se sbaglio, per avere ciò che desidero devo scollegare tutte le tabelle, i campi li ritrasformo in testo breve ma per avere la scelta tra i valori che voglio posso creare una casella combinata nella maschera contatti dove lo inserisce come testo? Giusto?

    Così tutto è testo e a quel punto la maschera filtra i risultati che voglio?

    Ho capito bene?

    Grazie per la pazienza!

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-01-12T10:22:58+00:00

    Ciao Mimmo!

    E' esattamente quello che ho fatto.

    Ovvero in casella combinata 2 colonne, la prima quella dell id a 0 in modo che mostri solo le voci.

    (questo in maschera)

    Ho fatto lo stesso per collegare il campo es. Country di contatti con la tabella country, dove ho fatto si che country in contatti sia numerico e nell'origine riga ho inserito i 2 campi id.country e id, mostrando solo la voce country.

    Quindi non so se sia questo il problema, che essendo un campo numerico uno e misto l'altro non lo legga!

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2021-01-10T08:50:57+00:00

    ciao Luciana,

    codice un po' brutto.

    Lascia perdere i lookUp fields comportano più problemi che vantaggi.

    Vedi se questo esempio   ti può essere di aiuto.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2021-01-09T20:24:39+00:00

    Ciao,

    Quale istruzione va in errore?

    Nella casella combinata dovresti  avere due campi, il primo è l'id il secondo la descrizione e come lunghezza imposterai 0cm;5 cm

    In modo che l'id non venga visualizzato e invece la descrizione si.

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento