Errore di run-time '3061' Parametri insufficienti. Previsto 1.

di il
15 risposte

Errore di run-time '3061' Parametri insufficienti. Previsto 1.

Salve a tutti, sono un autodidatta alle prime armi, potrebbe essere banale per la maggior parte di voi ma per me sta diventando un ossessione questo problema.

Ho una maschera di ricerca basata sulla Query (QryRicercaUnico) seguente:

SELECT qry_Ricerca_Generale.NUC, qry_Ricerca_Generale.NUC_08, qry_Ricerca_Generale.Denominazione, qry_Ricerca_Generale.CategoriaID, qry_Ricerca_Generale.SottocategoriaID, qry_Ricerca_Generale.SN_Matricola, qry_Ricerca_Generale.Coordinata, qry_Ricerca_Generale.SettoreID, qry_Ricerca_Generale.Posizione, qry_Ricerca_Generale.Selezione
FROM qry_Ricerca_Generale
WHERE (((qry_Ricerca_Generale.SottocategoriaID) Like "*" & [Forms]![RicercaGeneraleM]![CopiaCasella] & "*"))
ORDER BY qry_Ricerca_Generale.NUC;

la maschera filtra i dati in modo perfetto, nella maschera c'è una Casella di Controllo come origine di controllo il campo "Selezione" dove appunto posso selezionare i record che mi interessano uno per volta cliccandoci sopra.

Il problema è nato quando volevo codificare un pulsante che mi selezionasse tutti i record filtrati in quel momento nella maschera.

Il codice del pulsante è il seguente:

Me.Dirty = False
CurrentDb.Execute "UPDATE QryRicercaUnico set Selezione = True"
Me.Requery

e mi da ovviamente l'errore (run-time '3061' Parametri insufficienti. Previsto 1), ho provato anche con:

Me.Dirty = False
CurrentDb.Execute "UPDATE QryRicercaUnico set Selezione = True WHERE (((qry_Ricerca_Generale.SottocategoriaID) Like " * " & [Forms]![RicercaGeneraleM]![CopiaCasella] & " * "))"
Me.Requery  

e mi da l'errore (run-time '13' testo non corrispondente)

Spero di essere stato chiaro, grazie in anticipo

15 Risposte

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    Perché usi l'operatore Like? Suppongo che SottocategoriaID sia numerico. Vero?

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    02/11/2025 - mogaverik ha scritto:

    CurrentDb.Execute "UPDATE QryRicercaUnico set Selezione = True WHERE (((qry_Ricerca_Generale.SottocategoriaID) Like " * " & [Forms]![RicercaGeneraleM]![CopiaCasella] & " * "))" Me.Requery

    "Update.....like"*"...."*"))"

    Io credo che manchi qualche apice.

    02/11/2025 - mogaverik ha scritto:

    da l'errore (run-time '13' testo non corrispondente)

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    "Like '*testodatrovare*'"

    Non "like ' * testodatrovare * '"

    Osserva meglio

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    Ciao sihsandrea grazie per la risposta, ho provato a mettere gli apici ma il risultato non cambia

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    02/11/2025 - sihsandrea ha scritto:

    "Like '*testodatrovare*'"

    Non "like ' * testodatrovare * '"

    Osserva meglio

     Credo che si tratti di un campo numerico però.

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    02/11/2025 - Antony73 ha scritto:

    Perché usi l'operatore Like? Suppongo che SottocategoriaID sia numerico. Vero?

    Ciao Antony non è numerico , infatti la query filtra bene i dati

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    02/11/2025 - Antony73 ha scritto:

    02/11/2025 - sihsandrea ha scritto:

    "Like '*testodatrovare*'"

    Non "like ' * testodatrovare * '"

    Osserva meglio

     Credo che si tratti di un campo numerico però.

    Non farti ingannare dal SottocategoriaID  l'ho nominata io erroneamente in progettazione

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    Funziona se la mette in maschera non funziona se la chiama da pulsante

    CurrentDb.Execute "UPDATE QryRicercaUnico SET Selezione = True WHERE qry_Ricerca_Generale.SottocategoriaID LIKE '*" & [Forms]![RicercaGeneraleM]![CopiaCasella] & "*';"
    Me.Requery

    Un sacco di parentesi... Perché?

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    02/11/2025 - mogaverik ha scritto:

    SELECT qry_Ricerca_Generale.NUC, qry_Ricerca_Generale.NUC_08, qry_Ricerca_Generale.Denominazione, qry_Ricerca_Generale.CategoriaID, qry_Ricerca_Generale.SottocategoriaID, qry_Ricerca_Generale.SN_Matricola, qry_Ricerca_Generale.Coordinata, qry_Ricerca_Generale.SettoreID, qry_Ricerca_Generale.Posizione, qry_Ricerca_Generale.Selezione FROM qry_Ricerca_Generale WHERE (((qry_Ricerca_Generale.SottocategoriaID) Like "*" & [Forms]![RicercaGeneraleM]![CopiaCasella] & "*")) ORDER BY qry_Ricerca_Generale.NUC;

    Comunque sono diverse, devi ridefinire la query o impostare un parametro, poi passi il parametro.

    (SottocategoriaID Like [parametro] and [parametro] <>'')

    Basta impostare il parametro e fare un requery.

    Parametro="*" &[ Forms]![RicercaGeneraleM]! &"*"

    Se form!ecc.eccc ="" allora parametro="" altrimenti parametro= vedi sopra...

    Al requery si aggiorna il parametro e di conseguenza la query.

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    02/11/2025 - sihsandrea ha scritto:

    Comunque sono diverse, devi ridefinire la query o impostare un parametro, poi passi il parametro.

    (SottocategoriaID Like [parametro] and [parametro] <>'')

    Basta impostare il parametro e fare un requery.

    Parametro="*" &[ Forms]![RicercaGeneraleM]! &"*"

    Se form!ecc.eccc ="" allora parametro="" altrimenti parametro= vedi sopra...

    Al requery si aggiorna il parametro e di conseguenza la query.

    ciao andrea provato anche questa ma non va 

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    Ciao se ti posso aiutare, stavo leggendo è ti rispondo ....

    ’errore “Run-time error 3061 — Parametri insufficienti. Previsto 1” in Access indica che la query o il comando SQL fa riferimento a campi o parametri che Access non riesce a risolvere al momento dell’esecuzione.

    Nel tuo caso ci sono due punti critici principali:

    • La query QryRicercaUnico non è una tabella

    Quando usi CurrentDb.Execute con una query di aggiornamento, la query di origine (QryRicercaUnico) deve essere aggiornabile.

    Se si basa su un’altra query (qry_Ricerca_Generale) contenente riferimenti a form o campi calcolati, Access non riesce a risolverli e genera l’errore “Parametri insufficienti”.

    Cosa fare quindi:

    Devi eseguire l’UPDATE direttamente sulla tabella di origine (non sulla query) oppure costruire la stringa SQL includendo il valore filtrato del form.

    • Il filtro del Like con parametri da maschera

      Nel comando SQL che hai scritto, le virgolette e le concatenazioni non sono corrette.

      Access non interpreta correttamente " * " e l’uso di [Forms]![RicercaGeneraleM]![CopiaCasella] dentro la stringa SQL.

    Il mio codice corretto si scrive cosi

    Private Sub SelezionaTutti_Click()

       Dim sql As String
       Dim filtro As String

       ' Salva eventuali modifiche prima dell’aggiornamento
       Me.Dirty = False

       ' Legge il valore della casella di ricerca
       filtro = Nz(Me!CopiaCasella, "")

       ' Costruisce la stringa SQL completa
       sql = "UPDATE qry_Ricerca_Generale " & _
             "SET Selezione = True " & _
             "WHERE SottocategoriaID LIKE '*" & filtro & "*';"

       ' Esegue l’aggiornamento
       CurrentDb.Execute sql, dbFailOnError

       ' Aggiorna la maschera
       Me.Requery

       MsgBox "Tutti i record filtrati sono stati selezionati.", vbInformation

    End Sub

    Ti spiego cosa ho fatto in modo tale che puoi capire ma ti consiglio prima di procedere di studiare, di approfondire comunque

    • Nz(Me!CopiaCasella, "") evita errori se la casella è vuota.
    • Il filtro viene inserito nella query come testo puro, non come riferimento a form, perciò Access riesce a interpretarlo correttamente.
    • dbFailOnError ti segnala eventuali errori SQL veri, invece di ignorarli.
    • L’UPDATE viene fatto sulla stessa origine dati usata dalla maschera (qry_Ricerca_Generale), non su QryRicercaUnico, che è solo una query di visualizzazione.

    Puoi fare per una comodità poi vedi te:

    Se QryRicercaUnico ti serve per logica o join specifici, puoi creare una query salvata che includa solo i campi aggiornabili e usarla come base per l’UPDATE.

    In caso contrario, Access continuerà a restituire errori perché non può scrivere su query non aggiornabili.

    NB=

    • L’errore 3061 dipende da parametri non riconosciuti nella query.
    • L’errore 13 (“tipo non corrispondente”) deriva dalle virgolette e concatenazioni sbagliate.
    • Riscrivendo la SQL come sopra, il codice funziona perfettamente.

    Quindi ricapitolando il tuo errore che ti esce, ti esce perchè è l’errore di run-time “3061 – Parametri insufficienti. Previsto 1” appartiene proprio a Microsoft Access, e più precisamente al motore di esecuzione delle query (DAO/VBA).

    Questo errore non viene da un bug del codice VBA in sé, ma dal tentativo di eseguire una query che contiene riferimenti non risolti, cioè campi o parametri che Access non riesce a trovare.

    a te succede questo :

    La  istruzione VBA è:

    CurrentDb.Execute "UPDATE QryRicercaUnico SET Selezione = True"

    NB=

    La query QryRicercaUnico però si basa su un’altra query (qry_Ricerca_Generale) che a sua volta contiene un riferimento a una maschera:

    WHERE qry_Ricerca_Generale.SottocategoriaID Like "*" & [Forms]![RicercaGeneraleM]![CopiaCasella] & "*"

    NB=

    Quando Access esegue la query da VBA (CurrentDb.Execute), non ha accesso al contesto delle maschere aperte, quindi non trova il controllo [Forms]![RicercaGeneraleM]![CopiaCasella] ? e per questo genera l’errore “Parametri insufficienti”.

    Quindi:::::::

    NB=

    L’errore Run-time 3061 – Parametri insufficienti. Previsto 1 è tipico di Access quando la query richiamata tramite VBA fa riferimento a oggetti o parametri non risolti, come controlli di maschera o campi mancanti.

    Nel tuo caso, la query QryRicercaUnico dipende da qry_Ricerca_Generale, che filtra i record usando [Forms]![RicercaGeneraleM]![CopiaCasella].

    Quando esegui CurrentDb.Execute, Access non è in grado di interpretare i riferimenti ai controlli del form.

    Per risolvere puoi costruire la stringa SQL direttamente nel codice VBA, sostituendo il riferimento con il suo valore:

    Dim filtro As String
    filtro = Forms!RicercaGeneraleM!CopiaCasella

    CurrentDb.Execute _
       "UPDATE qry_Ricerca_Generale " & _
       "SET Selezione = True " & _
       "WHERE SottocategoriaID Like '*" & filtro & "*';"

    Me.Requery

    In questo modo il valore della casella viene letto prima dell’esecuzione della query e passato al database in modo esplicito.

    Ti consiglio inoltre di usare la proprietà Me.Dirty = False solo se serve salvare le modifiche nella maschera corrente, non è obbligatoria per l’update.

    Prova il codice quello di sopra che ti ho scritto e cerca di capire quello che ti ho scritto ciao 

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    Prova

    CurrentDb.Execute "UPDATE QryRicercaUnico set Selezione = True WHERE (((qry_Ricerca_Generale.SottocategoriaID) Like ""*" & [Forms]![RicercaGeneraleM]![CopiaCasella] & "*""))"

    oppure più semplicemente

    CurrentDb.Execute "UPDATE QryRicercaUnico set Selezione = True WHERE qry_Ricerca_Generale.SottocategoriaID Like ""*" & [Forms]![RicercaGeneraleM]![CopiaCasella] & "*"""

    ma per essere sicuri che funzioni si dovrebbe poter verificare se la query è del tipo aggiornabile quindi divresti postare, su un sito di condivisione, un file di esempio per poter vedere la struttura del database.

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    Ma stai cercando di modificare una tabella filtrata da query?

    02/11/2025 - mogaverik ha scritto:

    SELECT qry_Ricerca_Generale.NUC, qry_Ricerca_Generale.NUC_08, qry_Ricerca_Generale.Denominazione, qry_Ricerca_Generale.CategoriaID, qry_Ricerca_Generale.SottocategoriaID, qry_Ricerca_Generale.SN_Matricola, qry_Ricerca_Generale.Coordinata, qry_Ricerca_Generale.SettoreID, qry_Ricerca_Generale.Posizione, qry_Ricerca_Generale.Selezione FROM qry_Ricerca_Generale WHERE (((qry_Ricerca_Generale.SottocategoriaID) Like "*" & [Forms]![RicercaGeneraleM]![CopiaCasella] & "*")) ORDER BY qry_Ricerca_Generale.NUC;

    questa è una query o una tabella che hai chiamato col prefisso qry?

    poi su questa query (generale) crei una query (unico) per modificare la query (generale)???

    lavora sulle tabelle.

  • Re: Errore di run-time '3061' Parametri insufficienti. Previsto 1.

    04/11/2025 - Kiss ha scritto:

    ' Legge il valore della casella di ricerca
       filtro = Nz(Me!CopiaCasella, "")

    Grazie Kiss hai centrato il problema funziona benissimo ho dovuto solo fare questa correzione nel codice: filtro = Nz(Me!CopiaCasella, "")

    filtro = Nz([Forms]![RicercaGeneraleM]![CopiaCasella], "")
Devi accedere o registrarti per scrivere nel forum
15 risposte