Buon pomeriggio a tutti,
avrei bisogno di eseguire una query da vba, ma avendo il problema che il comando
Set rstObj = CurrentDb.OpenRecordset(strSQL) non riceve i parametri da una query esterna al codice, non riesco a proseguire.
Provo ad andare con ordine sapendo però che dovrò essere un po lungo:
Ho queste tre query esterne al modulo VBA che funzionano alla grande:
Query OpuscoloSelezionato
SELECT tblProdotti.ID, tblPagine.ID, tblOpuscoli.ID, tblListaProd.ID, tblProdotti.CodiceProd, tblListaProd.Categoria, tblOpuscoli.OpuscoloN°, tblOpuscoli.TitoloVolantino, tblOpuscoli.VolantinoDa, tblOpuscoli.VolantinoA, tblPagine.NumeroPagina, tblPagine.NumeroMaxProd, tblPagine.PagDelGrMer, tblProdotti.CodiceEan, tblProdotti.Marca, tblProdotti.ProdottoFROM (tblOpuscoli INNER JOIN tblPagine ON tblOpuscoli.ID = tblPagine.IdVolantino) INNER JOIN (tblListaProd RIGHT JOIN tblProdotti ON tblListaProd.CodiceProd = tblProdotti.CodiceProd) ON tblPagine.ID = tblProdotti.IdPaginaWHERE (((tblOpuscoli.OpuscoloN°)=[forms]![frmOpuscoli].[txtOpuscoloN°]));Query CategorieSELECT tblListaProd.Categoria, tblListaProd.DescrizioneCategorieFROM tblListaProdGROUP BY tblListaProd.Categoria, tblListaProd.DescrizioneCategorie;
come potrete notare la prima ha come parametro il numero opuscolo selezionato che viene pescato da una maschera aperta. Adesso ho la necessità di sapere tra la lista di prodotti inseriti in quell'opuscolo quale categoria manca e se lo faccio con una query esterna al modulo tipo questa sotto tutto funziona correttamente.
Query CategorieMancanti
SELECT qryCategorie.Categoria AS CategorieNONinserite, qryCategorie.DescrizioneCategorieFROM qryOpuscoloSelezionato RIGHT JOIN qryCategorie ON qryOpuscoloSelezionato.Categoria = qryCategorie.CategoriaGROUP BY qryCategorie.Categoria, qryCategorie.DescrizioneCategorie, qryOpuscoloSelezionato.CategoriaHAVING (((qryOpuscoloSelezionato.Categoria) Is Null));
ADESSO IL PROBLEMA
Dim strSQL As StringDim DB As DAO.DatabaseDim rstObj As DAO.RecordsetSet DB = CurrentDb
strSQL = "SELECT qryCategorie.Categoria, qryCategorie.DescrizioneCategorie"strSQL = strSQL & " FROM qryOpuscoloSelezionato RIGHT JOIN qryCategorie ON qryOpuscoloSelezionato.Categoria = qryCategorie.Categoria"strSQL = strSQL & " GROUP BY qryCategorie.Categoria, qryCategorie.DescrizioneCategorie, qryOpuscoloSelezionato.Categoria"strSQL = strSQL & " HAVING (((qryOpuscoloSelezionato.Categoria) Is Null))"Set rstObj = CurrentDb.OpenRecordset(strSQL)DoCmd.OpenForm "frmListaCatMancanti"Forms!frmListaCatMancanti!Elenco4.RowSource = strSQLrstObj.CloseDB.CloseSet rstObj = NothingSet DB = Nothing
Ho riprodotto la stessa query CategorieMancanti nel modulo VBA ma mi da l'errore "Errore di RUN-TIME 3061" Parametri insufficienti. Previsto 1"
In pratica non riconosce il parametro : WHERE (((tblOpuscoli.OpuscoloN°)=[forms]![frmOpuscoli].[txtOpuscoloN°]))
Se tolgo il parametro dalla query il messaggio non compare e il codice prosegue senza problemi.
Come poso fare per passare questo parametro?
So che sarebbe possibile anche passarlo internamente alla routine ed ho fatto mille tentativi senza esito positivo. Potreste indirizzarmi alla soluzione?
Grazie Michele