Utilizzo query parametrica

di il
5 risposte

Utilizzo query parametrica

Buongiorno,
al solito mi arrivano richieste di implementazione superiori alle mie capacità e che devono essere pronte per "ieri" e nuovamente mi trovo costretto a chiedervi aiuto

sostanzialmente ho bisogno di ottenere l'ultimo codice di una serie di record ma secondo dei parametri provenienti da due caselle combinate presenti su una maschera, in due parole:

ho una serie di alberi su cui sono stati fatti dei controlli, gli gli alberi hanno un committente e sono ubicati in un comune, io ho bisogno di capire l'ultimo codice assegnato ad un albero del comune "tot" del committente "x", il problema è che la query è facilmente creabile dal editor struttura query di access ma poi non riesco ad utilizzarla in vba per estrarne i parametri che mi interessano...mi risponde come se la query risultasse vuota, eppure se la apro da access funziona....

ho provato allora a crearla direttamente in VBA ma non riesco a capire come utilizzarla poi, nel migliore dei casi mi da lo stesso errore....

di seguito il codice:

Private Sub Comando0_Click()
Dim db As DAO.Database
Dim t, c, r As DAO.QueryDef
Dim xcod1 As Recordset

Dim F As String
Dim P As String
Dim trig, lcod, cod As Integer
P = "x"


Set db = CurrentDb
F = "SELECT [1acQt].ID, [1acQt].[N° Albero], [1acQt].Comune, [1acQt].Committente, [Comuni rif].[Id Comune] "
F = F & "FROM 1acQt LEFT JOIN [Comuni rif] ON [1acQt].Comune = [Comuni rif].Comune "
F = F & "WHERE ((([1acQt].Committente) = [Maschere]![Albero Short]![Committente]) And (([Comuni rif].[Id Comune]) = [Maschere]![Albero Short]![CasellaCombinata64])) "
F = F & "ORDER BY [1acQt].[N° Albero] DESC;"

Set t = CurrentDb.CreateQueryDef(xcod, F)
DoCmd.OpenQuery ("xcod")' fino a qui tutto funziona

xcod.MoveFirst

scusate, probabilmente sto sbagliando qualche concetto base ma ho provato a studiare e cercare 3gg ma non ne esco... mi basterebbe anche avere un link dove trovo info da studiare senza buttare altro tempo in ricerche infruttuose...

grazie mille

5 Risposte

  • Re: Utilizzo query parametrica

    Ma ti serve il valore massimo di 1acQt.ID?
  • Re: Utilizzo query parametrica

    È il campo che uso per ordinare la query dal più recente al più vecchio
  • Re: Utilizzo query parametrica

    La "query parametrica" va sempre ottimizzata specificando il tipo dati dei PARAMETERS (se sai usare SQL), altrimenti, in visualizzazione struttura query, clicca in alto su "Parametri query". Leggi anche qui
    https://support.office.com/it-it/article/usare-i-parametri-in-query-maschere-e-report-8209eb5c-1589-42e2-9b20-4181f4c7a356
  • Re: Utilizzo query parametrica

    talpo79 ha scritto:


    Buongiorno,
    ....
    ho provato allora a crearla direttamente in VBA ma non riesco a capire come utilizzarla poi, nel migliore dei casi mi da lo stesso errore.... Commetti veramente una quantità di ERRORI tecnico concettuali che fatico ad elencarli...!

    talpo79 ha scritto:


    di seguito il codice: [Code] Private Sub Comando0_Click() Dim db As DAO.Database Dim t, c, r As DAO.QueryDef
    Stai dichiarando solo [r] come QueryDef mentre [t, c] sono Variant... ma poi assegni a [t] l'oggetto QueryDef...
    
    Dim t As DAO.QueryDef
    Dim c As DAO.QueryDef
    Dim r As DAO.QueryDef
    oppure
    
    Dim c As DAO.QueryDef, t As DAO.QueryDef, r As DAO.QueryDef
    Passiamo avanti:

    talpo79 ha scritto:


    
    Dim xcod1 As Recordset
    
    Dim F As String
    Dim P As String
    Dim trig, lcod, cod As Integer
    Stessa cosa di prima... stai dichiarando SOLO [cod] come Integer mentre gli altri sono Variant...!

    talpo79 ha scritto:


    
    P = "x"
    
    Set db = CurrentDb
    F = "SELECT [1acQt].ID, [1acQt].[N° Albero], [1acQt].Comune, [1acQt].Committente, [Comuni rif].[Id Comune] "
    F = F & "FROM 1acQt LEFT JOIN [Comuni rif] ON [1acQt].Comune = [Comuni rif].Comune "
    F = F & "WHERE ((([1acQt].Committente) = [Maschere]![Albero Short]![Committente]) And (([Comuni rif].[Id Comune]) = [Maschere]![Albero Short]![CasellaCombinata64])) "
    F = F & "ORDER BY [1acQt].[N° Albero] DESC;"
    Non si usano Nomi di Campi come questo [N° Albero]... MAI, in quanto ha un carattere pericoloso, non si usano Spazi ne altri caratteri speciali... serve capire che il Nome del Campo non è la Descrizione delle Etichette nella Maschera, ma sono Nomi ad Oggetti fisici, che hanno regole...!!!!

    Lasciamo poi stare che non risolvi i valori ma crei una Query che è costretta a Risolvere i valori... parlo di questa parte, ma sono 2...
    
    [1acQt].Committente) = [Maschere]![Albero Short]![Committente]
    In questi casi si fa risolvere il valore in fase di costruzione...
    
    "[1acQt].Committente = " &  Me![Committente] & " ...."

    talpo79 ha scritto:


    
    Set t = CurrentDb.CreateQueryDef(xcod, F)
    Questa richiederebbe un chiarimento...!
    Hai poco prima dichiarato [Set db=CurrentDb], giusto, ma ora riutilizzi [Set t = CurrentDb...], lo sai che ad ogni invocazione di CurrentDb si istanzia un oggetto in memoria che non viene rilasciato...?

    Secondo, [xcod] per quanto è lecito capire dal tuo codice è un Oggetto Recordset, che però è assente nelle Dichiarazioni. hai dichiarato [xcod1] e non sono la medesima cosa... ma cosa più grave è che il MEtodo CreateQueryDef non vuole un Recordset come primo Parametro... ma il NOME della Query da salvare, e se OMESSO la Query è Temporanea.
    https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/database-createquerydef-method-dao

    talpo79 ha scritto:


    
    DoCmd.OpenQuery ("xcod")' fino a qui tutto funziona
    Non dirlo nemmeno per scherzo è impossibile...!

    talpo79 ha scritto:


    scusate, probabilmente sto sbagliando qualche concetto base ma ho provato a studiare e cercare 3gg ma non ne esco... mi basterebbe anche avere un link dove trovo info da studiare senza buttare altro tempo in ricerche infruttuose...

    grazie mille
    Sicuramente l'assenza di Basi, e non qualche concetto, è un grosso problema... io ti ho dato tutti i suggerimenti per Risolvere... ma devi guardarci bene... e strudiare meglio i concetti Base, TUTTI.
  • Re: Utilizzo query parametrica

    Intanto grazie mille, mo mi metto a studiare.... perdonate la mia ignoranza ma mi han chiesto di far sta cosa da oggi per ieri e sto facendo il possibile...

    ora se dio vuole avrò un po' di tempo per studiare...
Devi accedere o registrarti per scrivere nel forum
5 risposte