Ricerca dato con casella di riepilogo

di il
4 risposte

Ricerca dato con casella di riepilogo

Buongiorno a tutti.
In un DB un comando mi restituisce un errore che non mi riesco a spiegare anche perché ho utilizzato il comando in altri DB e funziona.
Ho una tabella NOMINATIVI con i seguenti campi
IDNominativi - chiave primaria
Nome - testo
Ho creato una maschera per inserire dei dati e vorrei fare in modo che la ricerca del nome non avvenga tramite una casella combinata ma avvenisse tramite una casella di riepilogo.
Nella maschera ho, quindi, inserito una casella di riepilogo ELENCO1 con queste proprietà:
origine dat:
SELECT IDNominativi, nome FROM Nominativi;
evento su click:
Private Sub Elenco1_Click()
Dim X As Object
Set X = Me.RecordsetClone
X.FindFirst "[IDNominativi]=" & Str(Me.Elenco1)
Me.Bookmark = X.Bookmark
Form_inserimentoDocumenti.Refresh
[Testo3] = ""
Testo3.SetFocus
Quindi ho inserito una casella di testo TESTO3 alla quale, all'evento, su modifica ho inserito questo codice
Private Sub Testo3_Change()
Dim alfa As String
Dim beta As String
alfa = Me.Testo3.Text
If Not IsNull(Me.Testo3.Text) Then
beta = "select idNominativi,nome from nominativi where (nome like " & Chr$(34) & "*" & alfa & "*" & Chr$(34) & ");"
Me.Elenco1.RowSource = beta
Me.Elenco1.Requery
End If
Il codice è corretto perché, come detto, l'ho utilizzato altre volte e funziona non riesco quindi a capire perché lanciando l'evento mi viene restituito il seguente errore
Errore 3070
Il motore di database non riconosce "IDNominativi" come espressione o campo valido
Eppure il nome è corretto.
Sapete spiegarmi il perché?
Grazie
Giorgio

4 Risposte

  • Re: Ricerca dato con casella di riepilogo

    Se non hai letto quello che ho scritto è meglio avevo sbagliato... segui le indicazioni di alex nel post successivo.

    a presto.
  • Re: Ricerca dato con casella di riepilogo

    Commetti diverse imprecisioni anche gravi...!
    
    Dim X As Object
    Set X = Me.RecordsetClone
    In questo caso è meglio fare così
    
    Dim X As DAO.Recordset
    Set X = Me.Recordset.Clone
    
    X.FindFirst "[IDNominativi]=" & Str(Me.Elenco1)
    Me.Bookmark = X.Bookmark
    Dopo il metodo invocato [FindFirst] devi rilevare la proprietà NoMatch altrimenti usare la gestione errori...!
    
    X.FindFirst "[IDNominativi]=" & Str(Me.Elenco1)
    If Not X.Nomatch Then Me.Bookmark = X.Bookmark

    questo non è un'errore ma un suggerimento
    
    beta = "select idNominativi,nome from nominativi where (nome like " & Chr$(34) & "*" & alfa & "*" & Chr$(34) & ");"
    io lo cambierei così
    
    beta = "select idNominativi, nome from nominativi where nome like '*" & alfa & "*';"
    
    Me.Elenco1.RowSource = beta
    Me.Elenco1.Requery
    La riassegnazione del RowSource produce in automatico il REQUERY quindi il 2° che fai tu è inutile.

    Per la segnalazione devi verificare tu se il Campo si chiama [IDNominativi] oppure solo [ID]...
  • Re: Ricerca dato con casella di riepilogo

    @Alex ha scritto:


    Commetti diverse imprecisioni anche gravi...!
    Per la segnalazione devi verificare tu se il Campo si chiama [IDNominativi] oppure solo [ID]...
    Io sono un perfetto neofita e quel codice l'avevo copiato da un tutorial su Youtube e ti posso assicurare che funziona.
    In ogni caso ho seguito il tuo consiglio ed ho modificato le istruzioni e FUNZIONA TUTTO.
    Con riferimento all'ultima parte ti posso assicurare che i nomi dei campi sono quelli che ti avevo scritto nel post precedente e che ho mantenuto inalterati anche nelle istruzioni che mi hai dato.
    Non riesco ancora a capire perché mi dava l'errore.
    In ogni caso grazie mille.
    Ciao
    Giorgio
  • Re: Ricerca dato con casella di riepilogo

    Le cose si possono fare in molti modi... tanto che funzionino e fatte bene... ovvio che io opto sempre per la 2°.
Devi accedere o registrarti per scrivere nel forum
4 risposte