Condividi tramite

Errore Runtime per utilizzo query as dao.recordset

Anonimo
2017-10-31T10:33:10+00:00

Salve, ho scritto il codice per duplicare gli elementi della query "QOrdini" tramite il click su un tasto, ma durante l'esecuzione mi da errore 3601 (parametri insufficienti: previsto 1)

ecco il codice

Private Sub Comando448_Click()

    'DUPLICA ORDINE

    Dim tabord As DAO.Recordset

    Dim tabcod As DAO.Recordset

    Dim qord As DAO.Recordset

    Set tabord = CurrentDb.OpenRecordset("TOrdini")

    Set tabcod = CurrentDb.OpenRecordset("TCOrd")

    Set qord = CurrentDb.OpenRecordset("QOrdini", dbOpenDynaset)

    Dim tempcod As String

    If (qord.EOF = False) Then

        tempcod = InputBox("Inserire nuovo codice per Ordine da duplicare")

        tabcod.MoveLast

        tabcod.MoveNext

        tabcod.AddNew

        tabcod.Fields("Codice Ordine") = tempcod

        tabcod.Update

        'COPIA ITEMS ORD

        tabord.MoveLast

        qord.MoveFirst

        While (qord.EOF = False)

            tabord.MoveNext

            tabord.AddNew

            tabord.Fields("codTras") = qord.Fields("codTras")

            tabord.Fields("codprod") = qord.Fields("codprod")

            tabord.Fields("codseriale") = qord.Fields("codseriale")

            tabord.Fields("marca") = qord.Fields("marca")

            tabord.Fields("modello") = qord.Fields("modello")

            tabord.Fields("ncolli") = qord.Fields("ncolli")

            tabord.Fields("prezzo") = qord.Fields("prezzo")

            tabord.Fields("Fornitore") = qord.Fields("Fornitore")

            tabord.Fields("codArticolo") = qord.Fields("codArticolo")

            tabord.Fields("Totale") = qord.Fields("Totale")

            tabord.Fields("Inserito") = False

            tabord.Fields("Confermato") = False

            tabord.Update

            qord.MoveNext

        Wend

    Else

        MsgBox ("Nessun ordine selezionato.")

    End If

    Me.Refresh

End Sub

Ho utilizzato allo stesso modo il comando "currentdb.openrecordset("Tabella1",dbOpenDynaset)"

e non mi ha dato nessun problema

Private Sub Comando4_Click()

    Dim query As DAO.Recordset

    Set query = CurrentDb.OpenRecordset("Query", dbOpenDynaset)

    query.MoveFirst

    Me.campo1 = query.Fields("uno")

    Me.campo2 = query.Fields("due")

    Me.Refresh

End Sub

Qualcuno sa come risolvere?

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-11-03T15:31:23+00:00

Ciao Ivan,

tanto per cominciare devi specificare diverse cose:

  1. Quale istruzione genera l'errore
  2. Il codice SQL contenuto nella query QOrdini
  3. A cosa serve la tabella TCOrd e in che modo sarebbe collegata col resto
  4. Cosa sarebbe "Tabella1"

Specificato questo, ti suggerisco di pulire il codice così:

  1. elimina le istruzioni "tabcod.MoveLast" e "tabcod.MoveNext" (sono del tutto inutili)
  2. sposta la Dim della stringa "tempcod" in alto insieme alle altre Dim (funziona lo stesso, ma aumenta la leggibilità)
  3. Cerca di eliminare i nomi di campo composti da parole divise da spazi, elimina gli spazi unendo le parole direttamente o tramite un underscore "_"
  4. elimina l'istruzione "tabord.MoveNext" (non serve a niente)
  5. per aumentare la leggibilità, ti consiglio di usare la sintassi "tabord!NomeCampo" invece di "tabord.Fields("NomeCampo")"

Ciao

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-11-02T17:00:37+00:00

    Ciao,

    prova a cambiare l'istruzione:

    Set qord = CurrentDb.OpenRecordset("QOrdini", dbOpenDynaset)

    in

    Set qord = CurrentDb.OpenRecordset("Select * From QOrdini")

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-10-31T10:45:36+00:00

    ciao Ivan, 

    il problema dei parametri insufficienti si rivolve wrappando con la funziona nativa eval il parametro in modo da risolvere il riferimento per il DbEngine oppure gestendo il parametro stesso con VBA.

    La cosa però che continuo a non capire è l'incessante uso di recordset quando ci sono soluzioni alternative più efficienti ed efficaci, per non dire le sole da utilizzare considerando anche le performance.

    Anche per questo nuovo post che poni è meglio appoggiarsi ad un'action query ed inserire le righe nella tabella.

    Inoltre come già spiegato il recordset va chiuso ed è buona pratica distruggerlo e fine routine.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento