INSERT INTO

di il
11 risposte

INSERT INTO

Vorrei accodare una query ad una tabella attraverso una funzione di modulo.
Di seguito la funzione:

Function Accoda()
CurrentDb.Execute "INSERT INTO [importo deducibile]([ID lavoratore],[codice contratto], [importo]) SELECT [ID lavoratore], [codice contratto], [importo] FROM [calendario 22]"
End Function

che però mi da il seguente errore sulla seconda riga:
Errore di run-time '3061':
parametri insufficienti. Pevisto 1.

La sintassi l'ho ricavata spigolando da varie ricerche sul web, ma evidentemente c'è un errore o manca qualcosa.

Un grazie a chi volesse aiutarmi

11 Risposte

  • Re: INSERT INTO

    Senza conoscere la struttura della tabella di destinazione è difficile capire. Sintatticamente la query sembra corretta.
  • Re: INSERT INTO

    harry61 ha scritto:


    CurrentDb.Execute "INSERT INTO [importo deducibile]([ID lavoratore],[codice contratto], [importo]) SELECT [ID lavoratore], [codice contratto], [importo] FROM [calendario 22]"
    Quella stessa stringa, inserita come SQL nella consueta sezione dedicata alla creazione delle query funziona?
    Prova a riscriverla bene mettendo gli spazi dove devono andare (l'ho indicato cone la parola [spazio]):
    CurrentDb.Execute "INSERT INTO [importo deducibile][spazio]([ID lavoratore],[spazio][codice contratto], [importo]) SELECT [ID lavoratore], [codice contratto], [importo] FROM [calendario 22]"
    [Calendario 22] è una query, a sua volta? Se sì posta la SQL.
  • Re: INSERT INTO

    harry61 ha scritto:


    che però mi da il seguente errore sulla seconda riga:
    Errore di run-time '3061':
    parametri insufficienti. Pevisto 1.

    Philcattivocarattere ha scritto:


    [Calendario 22] è una query, a sua volta? Se sì posta la SQL.
    Può darsi che venga chiamata una query contenente al suo interno un parametro.
  • Re: INSERT INTO

    OsvaldoLaviosa ha scritto:


    ...

    Philcattivocarattere ha scritto:


    [Calendario 22] è una query, a sua volta? Se sì posta la SQL.
    Può darsi che venga chiamata una query contenente al suo interno un parametro.
    Indovina perché ho chiesto la SQL? Proprio per quel motivo!
  • Re: INSERT INTO

    Rispondo nell'ordine ai consigli e ai chiarimenti:

    La tabella di destinazione [importo deducibile] è composta dai seguenti compi:
    ID lavoratore - Numerico
    codice contratto - Testo breve
    importo - Numerico

    Non ho definito una chiave primaria perché non mi serve visto che all'inizio della procedura ne cancello tutto il contenuto.

    La query sorgente [calendario 22] è l'ultima di un cascata di query e contiene una variabile temporanea: [TempVars]![anno], che definisco con una macro. Mi sono assicurato che fosse definita. Di seguito il codice SQL di [calendario 22]:

    SELECT [calendario 21].[ID anno], [calendario 21].[ID lavoratore], [calendario 21].[codice contratto], Nz([SommaDidatore trimestre1])+Nz([SommaDidatore trimestre2])+Nz([SommaDidatore trimestre3]) AS importo, [calendario 21].[SommaDidatore trimestre1], [calendario 21].[SommaDidatore trimestre2], [calendario 21].[SommaDidatore trimestre3]
    FROM [calendario 21]
    WHERE ((([calendario 21].[ID anno])=[TempVars]![anno]));

    La stessa stringa inserita come SQL nella consueta sezione dedicata alla creazione delle query funziona perfettamente, di seguito la stringa utilizzata. Ho anche aggiunto lo spazio come suggerito da Phil.

    INSERT INTO [importo deducibile] ([ID lavoratore],[codice contratto], [importo]) SELECT [ID lavoratore], [codice contratto], [importo] FROM [calendario 22]

    Un grande grazie a tutti quelli che mi hanno risposto
  • Re: INSERT INTO

    harry61 ha scritto:


    Un grande grazie a tutti quelli che mi hanno risposto
    Sembra una frase conslusiva di discussione, ma a me non è chiaro se hai risolto oppure no.

    Come da regolamento, codici VBA e SQL sarebbe bene selezionarli e cliccare sul tasto in alto Code, in modo da visualizzarli con i caratteri stile Courier New, più familiari ai programmatori.

    Io mi perdo ulteriormente nella tua descrizione. Forse vado fuori tema, ma i nomi di campi, tabelle, query mi fanno pensare a una progettazione database non normalizzata e, di conseguenza, tutto potrebbe essere pensato diversamente.
  • Re: INSERT INTO

    Scusa Osvaldo, non ho risolto il problema. Se fosse lo avrei sicuramente specificato.
    Mi scuso anche per il codice SQL non formattato come da regolamento, le prossime volte lo farò sicuramente.

    Nella descrizione ho semplicemente risposto alle richieste e ai suggerimenti che mi sono stati posti, cercando di essere chiaro.

    La tua osservazione sulla progettazione del database è comunque per me un suggerimento prezioso perché comunque mi da un indirizzo su cui lavorare.

    Un caro saluto a tutti e grazie
  • Re: INSERT INTO

    harry61 ha scritto:


    La tua osservazione sulla progettazione del database è comunque per me un suggerimento prezioso perché comunque mi da un indirizzo su cui lavorare.
    Se hai altri problemi "a monte", apri nuove discussioni specifiche.
    Se hai bisogno di esporre come è fatto il tuo progetto e sospetti che non vada bene (normalizzazione e similari...), apri una discussione nella sezione "Progettazione database".
  • Re: INSERT INTO

    Grazie del supporto Osvaldo, lo farò sicuramente.
    Sto cercando di rivedere tutta la struttura del database a caccia di qualche piccolo baco o distrazione come a volte succede.
  • Re: INSERT INTO

    Ciao a tutti,

    dovrei scrivere un codice che mi consenta di copiare la tabella di un database (db2 che si trova nella stessa cartella del mio database aperto) nella medesima tabella del mio database attualmente aperto.
    Ho inserito delle msgbox per essere sicuro che il percorso del file sia corretto in effetti nelle msgbox mi viene restituito C:\Desktop\db2.accdb

    ma quando il codice arriva all'ultima riga mi da l'errore Impossibile trovare file C:\Documenti\oldfile

    Dove sbaglio? Tra l'altro posso capire che sbaglio qualcosa nella sintassi ma Documenti da dove salta fuori se il mio file è in Desktop?

    Grazie

    "
    Private Sub Form_Load()
    Dim oldfile As String, dbsOld As DAO.Database
    oldfile = Application.CurrentProject.path & "\db2.accdb"
    MsgBox (oldfile)
    If EsisteFile(oldfile) Then
    Dim answer As Integer, strSQL As String
    answer = MsgBox("Do You want to copy Records from old Database?", vbQuestion + vbYesNo + vbDefaultButton2, "Copy Data")
    If answer = vbYes Then
    Set dbsOld = OpenDatabase(oldfile, False, False, ";pwd=xxx")
    MsgBox (dbsOld.Name)
    dbsOld.Execute "INSERT INTO Tabella1 Select * From Tabella1 IN '' [;DATABASE=oldfile;PWD=xxx];"
  • Re: INSERT INTO

    Perchè ti sei accodato a questo 3D del 2018....?
    Aprine uno nuovo, come da REGOLAMENTO.
Devi accedere o registrarti per scrivere nel forum
11 risposte