IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Access
  New Posts New Posts RSS Feed - [RISOLTO]Query errore 3072-Argomento non valido
  FAQ FAQ  Forum Search   Events   Register Register  Login Login


REGISTRATEVI su IALWeb forum!

[RISOLTO]Query errore 3072-Argomento non valido

 Post Reply Post Reply
Author
Message
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 10344
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Topic: [RISOLTO]Query errore 3072-Argomento non valido
    Posted: 19/Nov/2017 at 10:59
Cari amici
la parte di codice che sottopongo ha sempre funzionato con Access 2003

...
mSql = "SELECT T1.d, T1.TotE, T1.TotU, (SELECT SUM(TotE) FROM Saldi_prog AS T2 " & _
     "WHERE T2.d <= T1.d)-(SELECT SUM(TotU) FROM Saldi_prog AS T2 " & _
     "WHERE T2.d <= T1.d) AS Saldo_Attuale " & _
     "FROM Saldi_prog AS T1 ORDER BY T1.d"
Set mRst = db.OpenRecordset(mSql) 'errore 3072-Argomento non valido per la funz
...

Con il 2016 ottengo il suddetto errore.

La tabella Saldi_prog contiene tre campi:
1) Anno/mese
2) totale entrate dell'anno/mese
3) totale uscite dell'anno mese.

Allego img dalla quale risulta la tabella Saldi_prog oggetto della ricerca della query

In attesa di un aiuto saluto tutti



Edited by dodo47 - 26/Nov/2017 at 19:11
domenico
win 10- office 2016
Back to Top
Sponsored Links


Back to Top
@Alex View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 09/Apr/2012
Location: Mantova
Status: Offline
Points: 5155
Post Options Post Options   Thanks (0) Thanks(0)   Quote @Alex Quote  Post ReplyReply Direct Link To This Post Posted: 19/Nov/2017 at 16:48
Ciao Domenico, purtroppo se avessi allegato una tabella con cui testare la Query sarebbe stato meglio...
Così alla cieca non vedo errori evidenti, quindi l'unico suggerimento che mi viene da darti in via provvisoria è di scrivere la Query i questo modo:
mSql = "SELECT T1.d, T1.TotE, T1.TotU, "
mSql=mSql & "((SELECT SUM(TotE) FROM Saldi_prog AS T2 WHERE T2.d <= T1.d)-"
mSql=mSql & "(SELECT SUM(TotU) FROM Saldi_prog AS T2 WHERE T2.d <= T1.d)) AS Saldo_Attuale "
mSql=mSql & "FROM Saldi_prog AS T1 ORDER BY T1.d"


Verifica se ora funziona... ho aggiunto 2 Parentesi che mi parevano mancare... ma non saprei...


Edited by @Alex - 19/Nov/2017 at 16:50
Non SUPPORTO il CROSSPOST.
Mio Sito
Scaricare i DEMO modificando l'Estensione.
Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 10344
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 21/Nov/2017 at 10:47
CHE FINE HA FATTO LA MIA RISPOSTA?????? (Ripeto)
------------------------------------------------------

Carissimo Alessandro, sono ormai lontano da access, e con un po' di fatica (visto che non conosco il 2016) sono riuscito a creare uno "stralcio" del mio prg.
Purtroppo l'errore non si ripete e, sia con la tua query che con la mia, la funzione fa il suo dovere.

Ho provato allora ad eliminare il modulo con la function in questione dal file originale ed a importarla dal test (che allego), ma senza risultati.

La function è nell'unico modulo presente e effettua la query incriminata sulla tabella "saldi_prog" per poi creare/aggiornare la tabella "saldiprogressivi", per il resto non ho nulla da insegnarti.

Ho anche provato ad importare il tutto in un nuovo file, ma non funziona nulla e mi da una massa di errori.

Non ho problemi ad inviarti privatamente il mio DB originale, ma so che tu non gradisci tale forma.

Hai qualche suggerimento??

Un caro saluto
domenico


Allego inoltre immagine errore su file originale:


Edited by dodo47 - 21/Nov/2017 at 11:07
domenico
win 10- office 2016
Back to Top
@Alex View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 09/Apr/2012
Location: Mantova
Status: Offline
Points: 5155
Post Options Post Options   Thanks (0) Thanks(0)   Quote @Alex Quote  Post ReplyReply Direct Link To This Post Posted: 21/Nov/2017 at 12:47
Domenico, la funzione del File che Alleghi non mi genera, con Access365 alcun problema... funziona..!

Ci sono diverse osservazioni che si potrebbero fare, ma non sono oggetto del 3D, ma ti indico ugualmente:
Dichiarazione ESPLICITA delle variabili, come puoi vedere Non dichiari alcune Variabili(Oggetti)... e non genera errore solo per il fatto che non hai messo [Option Explicit]
Esempio
NewTab  non dichiarata
Dim NewTab As DAO.TableDef

   non dichiarata
Dim x As Integer


La Funzione [ScegliMese] che usa Choose, è assolutamente lentissima... la chiami in modo non splendido... con una sitassi errata... di base...
Function Choose(Index As Single, ParamArray Choice() As Variant)
    Membro di VBA.Interaction

Come vedi il Primo parametro è un SINGLE, ma tu passi una Stringa che obbliga al Casitng dei dati, per poi sfruttare una nuova conversione sapendo che nelle funzioni di Default i parametri sono ByRef...
 
    mName = ScegliMese(mName)


Avrei scritto questo:
Function ScegliMese(IndiceMese As Single) As String
    Const ElencoMesi As String = "GEN,FEB,MAR,APR,MAG,GIU,LUG,AGO,SET,OTT,NOV,DIC"
    If IndiceMese < 1 Or Indice > 12 Then IndiceMese = 1
    ScegliMese = Split(ElencoMesi, ",")(IndiceMese - 1)
End Function

E l'avrei chiamata
mName = ScegliMese(cSng(TuoIndice))

Oviamente se [TuoIndice] non è già un Single...

Ultimo, mi piacerebbe capire perchè CANCELLI una tabella già presente per poi ricrearla FISSA SEMPRE UGUALE e non semplicemente pensi a SVUOTARLA...?

Per il resto... mi spiace ma non saprei come ricreare il problema...


Edited by @Alex - 21/Nov/2017 at 12:50
Non SUPPORTO il CROSSPOST.
Mio Sito
Scaricare i DEMO modificando l'Estensione.
Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 10344
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 21/Nov/2017 at 13:11
Grazie Alessandro

quel lavoro è di ca. 11 anni fa e, come accennato, sono lontano da tale programmazione (età a parte)...
Pazienza, non userò quel report...

Grazie per i suggerimenti che cercherò di applicare

cari saluti
domenico
win 10- office 2016
Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 10344
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 21/Nov/2017 at 16:15
Chiedo cortesemente la traduzione della suddetta query in modo da poterla utilizzare nell'SQL di una query di selezione (sempre chi sia possibile farlo).

Purtroppo come detto più volte, non sono in grado di farlo.

Grazie e saluti

Questa la mia prova non funzionante:

SELECT saldi_prog.* AS t1, ((SELECT(SUM(TotE) FROM Saldi_Prog as T2
WHERE t2.d<= T1.d)-(SELECT SUM(TotU) FROM Saldi_prog AS T2
AND T2.d <= T1.d)) AS Saldo_Attuale
FROM Saldi_prog
ORDER BY t1.d;


Edited by dodo47 - 21/Nov/2017 at 17:01
domenico
win 10- office 2016
Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 10344
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 23/Nov/2017 at 12:54
Ciao a tutti. 
la query sono riuscito a crearla e funziona SOLO su un DB a parte tipo quello che ho precedentemente allegato.

SELECT T1.d, T1.TotE, T1.TotU, (SELECT SUM(TotE) FROM Saldi_prog AS T2  
WHERE T2.d <= T1.d)-(SELECT SUM(TotU) FROM Saldi_prog AS T2
WHERE T2.d <= T1.d) AS Saldo_Attuale
FROM Saldi_prog AS T1
ORDER BY T1.d;

Purtroppo non funziona nel file originale.

Provo ad allegare il mio file tramite file dropper sperando che vi resti il tempo necessario acchè qualcuno lo possa scaricareche nel mio computer win 10 con access 2016 genera l'errore (Spero lo faccia anche a chi di voi voglia provarlo.

Nella maschera principale che si apre, troverete sulla sinistra una serie di  etichette: cliccare su E/C -Saldi, nel sottomenù che si apre cliccare su Saldi progressivi, alla richiesta Ricalcolo? cliccare su SI.

La function incriminata è nel modulo "SaldiProgressivi".


Cari saluti


Allegato



Edited by willy55 - 25/Nov/2017 at 01:25
domenico
win 10- office 2016
Back to Top
willy55 View Drop Down
Moderatore
Moderatore
Avatar
Esperto di Access

Joined: 03/Ago/2011
Location: Italy
Status: Offline
Points: 9692
Post Options Post Options   Thanks (0) Thanks(0)   Quote willy55 Quote  Post ReplyReply Direct Link To This Post Posted: 25/Nov/2017 at 01:47

Ciao Domenico,
cerco di seguire il filo logico che mi ha portato alla risoluzione del problema (anche per un possibile futuro lettore che abbia medesimo inconveniente).

Determinato che l'errore da te indicato si presenta anche con la versione 2013 di Access (anche importando tutti gli oggetti, del tuo ultimo demo, su un nuovo db) e ciò anche portando tutti i dati in alcune versioni in MDB.
Cercando di circoscrivere la problematica, questa, effettivamente, si determinava quando si attiva il codice presentato:

mSql = "SELECT T1.d, T1.TotE, T1.TotU, (SELECT SUM(TotE) FROM Saldi_prog AS T2 " & _
       "WHERE  T2.d <= T1.d) - (SELECT SUM(TotU) FROM Saldi_prog AS T2 " & _
       "WHERE  T2.d <= T1.d) AS Saldo_Attuale " & _
       "FROM Saldi_prog AS T1 ORDER BY T1.d"
Set mRst = db.OpenRecordset(mSql) 'errore 3072-Argomento non valido per la funz

Anche effettuando il suggerimento di Alex (assegnare progressivamente la stringa SQL) non si risolveva il problema.

Non sono state di ausilio neppure le indicazioni di Microsoft, in merito a: "Argomento non valido per la funzione"
https://support.microsoft.com/it-it/help/835416/error-message-when-you-run-an-append-query--run-a-make-table-query--or

Ho cercato, quindi, di seguire il tuo codice nella elaborazione dei calcoli e si riscontrava il problema (come anche da te indicato) quando si genera la query annidata (query nested).
In particolare quando si impiegava la funzione "Sum" (o nella versione "Somma" italianizzata).

Ho letto sul web delle discussioni che possono essere ricondotte alla suddetta problematica (ma che possono fornire delle luci solo dopo aver scoperto l'arcano):
https://stackoverflow.com/questions/27569420/your-query-does-not-include-the-specified-expression-how-to-fix-it
https://social.msdn.microsoft.com/Forums/office/en-US/e7c8cd6a-cada-4262-8502-294808c4ae4e/error-message-invalid-argument-to-function?forum=accessdev

Ora, dal momento che il problema si verifica nella operazione della somma progressiva di T2 (per TotE - TotU) per la condizione dei valori precedenti rispetto alla corrente occorrenza (di T1); ho cercato di separare, in step, il processo della query annidata, memorizzando ciascun passo e rendere più semplice l'esecuzione dell'operazione complessiva.

Ho quindi suddiviso la query originaria, annidata, in due query in modo che si risolvano i riferimenti agli elementi costituenti.

Quindi partendo dalla tua ultima query presentata (che ho suddiviso anche nella sua presentazione, al fine di faciliarne la lettura) ho implenmentato un prima query (QueryTotaliMensili) con il seguente codice SQL (in modo da determinare il saldo fra il totale entrate ed uscite mensile):


SELECT Saldi_prog.d,
       Sum(Saldi_prog.TotE) AS SommaDiTotE,
       Sum(Saldi_prog.TotU) AS SommaDiTotU,
       Sum(Nz([TotE]))-Sum(Nz([TotU])) AS Saldo
FROM Saldi_prog
GROUP BY Saldi_prog.d;

In base alla sopra-citata query, si implementa il saldo progressivo (ove si verificava l'errore, della query annidata) ponendo la somma che determina il saldo totale mensile:


SELECT QueryTotaliMensili.d,
       QueryTotaliMensili.SommaDiTotE,
       QueryTotaliMensili.SommaDiTotU,
       QueryTotaliMensili.Saldo,
       (SELECT SUM(Saldo) FROM QueryTotaliMensili AS t WHERE t.d <= QueryTotaliMensili.d) AS TotaleSaldo
FROM QueryTotaliMensili
GROUP BY QueryTotaliMensili.d, QueryTotaliMensili.SommaDiTotE, QueryTotaliMensili.SommaDiTotU, QueryTotaliMensili.Saldo
ORDER BY QueryTotaliMensili.d;

Tale modalità con query separate permetteva, quindi il funzionamento.

Ho notato, comunque, che effettuando delle prove si verificava lo stesso errore se non si raggruppavano i dati con "GROUP BY" e ponendo la "espressione" per il il valore di TotaleSaldo; un esempio che fa ricomparire l'errore è il seguente:


SELECT QueryTotaliMensili.d,
       QueryTotaliMensili.SommaDiTotE,
       QueryTotaliMensili.SommaDiTotU,
       QueryTotaliMensili.Saldo,
       (SELECT SUM(Saldo) FROM QueryTotaliMensili AS t WHERE t.d <= QueryTotaliMensili.d) AS TotaleSaldo
FROM QueryTotaliMensili
ORDER BY QueryTotaliMensili.d;

Ne risulta una mancanza del confronto delle operazioni nelle query, con possibili loop nelle operazioni, che determinavano anche una corruzione del DB.

Stabilito l'inconveniente ho potuto determinare quale sia la corretta sintassi da impiegare nel tuo codice.
Per cui è ora sufficiente modificare la funzione "SaldiProgressivi" con il seguente codice SQL (che inserisce il "GROUP BY ..."):


SELECT T1.d, T1.TotE, T1.TotU,
       (SELECT SUM(TotE) FROM Saldi_prog AS T2  WHERE T2.d <= T1.d) -
       (SELECT SUM(TotU) FROM Saldi_prog AS T2  WHERE T2.d <= T1.d) AS Saldo_Attuale
FROM Saldi_prog AS T1
GROUP BY T1.d, T1.TotE, T1.TotU
ORDER BY T1.d;

 



Edited by willy55 - 25/Nov/2017 at 01:57
Willy
Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 10344
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 26/Nov/2017 at 19:10
Ciao willy
quindi ci voleva il GROUP BY !!! Strano che con 2010 e precedenti lo accettasse.

Ti ringrazio infinitamente per la tua squisita collaborazione

Cari saluti
Domenico
domenico
win 10- office 2016
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,062 seconds.