Utilizzo query parametrica

di Anonimizzato26597 il
5 risposte
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

  • Ma ti serve il valore massimo di 1acQt.ID?
  • È il campo che uso per ordinare la query dal più recente al più vecchio
  • 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.
  • 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