Utilizzo di una Query UNION

di il
6 risposte

Utilizzo di una Query UNION

Buonasera a tutti, ho sviluppato una applicazione in Access-VBA per la gestione di un Agriturismo che funziona egregiamente da diversi anni. A causa di tabelle non sincronizzate per causa dei miei errori, ho intrapreso una procedura al fine di sincronizzare alcune tabelle nel corso degli anni. In pratica ho proceduto con una Query di tipo UNION in SQL la quale mi restituisce correttamente l'aggiornamento tra le tabelle tutto OK. Il problema è che non sono riuscito a effettuare con il risultato della Query, l'aggiornamento delle tabelle che il programma utilizza. Mi spiego meglio, il programma usa un archivio con tabelle collegate e ok, come posso fare per aggiornare queste tabelle dal risultato che mi restituisce la Query.
Ho provato con:
DoCmd.TransferDatabase acExport, "Microsoft Access", "C:\Prova1\2021\Archivi_be.accdb", acTable, "QClientiUnion", "CLIENTI"

Su una applicazione di prova funziona egregiamente mentre se inserita nell'applicazione definitiva fornisce un errore "Tabella CLIENTI non trovata" o qualcosa di simile e mi cancella dall'archivio la suddetta tabella.
Sicuramente sono imbranato io ma non riesco a capire. Mi andrebbe benissimo anche aggiornare la tabella in SQL a seguito della UNION. Grazie un milione....

6 Risposte

  • Re: Utilizzo di una Query UNION

    Che vuol dire "tabelle non sincronizzate"? Senza relazioni?
  • Re: Utilizzo di una Query UNION

    Buongiorno e grazie per la risposta, provo a rispondere, la mia applicazione utilizza un archivio con tutte le tabelle collegate necessarie, e ho avuto la brillante idea, invece di fare nel corso degl'anni un archivione che prima o poi sarebbe "Scoppiato" di creare una Directory per ogni anno. Quindi l'applicazione a fine anno, mediante apposita procedura" crea una nuova Directory dove copia l'archivio dell'anno precedente ma azzerando SOLO le tabelle delle prenotazioni e altre riferite al nuovo anno. Le tabelle base come i CLIENTI, CAMERE, PRODOTTI e AGENZIE vengono lasciate come dall'anno precedente. L'applicazione mi permette di muovermi tra i vari anni (Directory, 2020, 2021, 2022....) per consultare tutte le informazioni di prenotazione di anni precedenti, e quindi mi permette in quel momento anche di inserire nuovi CLIENTI, CAMERE ecc per una nuova prenotazione, ma questo avviene nelle tabelle dell'anno in quel momento selezionato. Quindi nei vari archivi degli anni mi trovo tabelle, ad esempio CLIENTI, diverse tra loro. Era mia intensione mettere una "toppa" al problema, ansichè ristrutturare il tutto, semplicemente eseguire una UNION tra le tabelle degli anni da me scelti in modo da ottenere una tabella CLIENTI "completa" che mi riporta tutti i clienti, e per questo l'esecuzione di UNION è perfetta, mi restituisce la tabella completa. Quello che non conosco è come posso fare per aggiornare nella tabella corrente, il risultato della Query. Non so se sia corretto l'utilizzo di
    DoCmd.TransferDatabase acExport, "Microsoft Access", "C:\Prova1\2021\Archivi_be.accdb", acTable, "QClientiUnion", "CLIENTI"Il e se si, non vorrei che il relativo errore sia causato dal processo di tale operazione in quanto la Query "QClientiUnion" viene eseguita dal codice SQL "SELECT CLIENTIUNION.* FROM CLIENTIUNION (che è una tabella da unire), che immagino verrà aperto, poi UNION SELECT CLIENTI.* FROM CLIENTI (che è la la tabella corrente da unire che anche questo verrà aperto) e che il risultato esportato nella tabella CLIENTI dall'esecuzione di DoCmd....... trovi una tabella già aperta da SQL, o in esecuzione, e quindi l'errore!!

    Dico questo perchè se cambio il nome della tabella da esportare nel DoCmd. da "CLIENTI" a "CLIENTINEW", ad esempio, questa tabella la ritrovo correttamente nel file dell'archivio corrente.

    Da batterci la testa.
  • Re: Utilizzo di una Query UNION

    Ti auguro di trovare un utente più esperto di me in grado di "cogliere" il senso della strada progettuale che avresti intrapreso. Da parte mia trovo assurdo gestire un database come lo esponi. Le tabelle devono poter lavorare "in perpetuo", Access è così (quasi) illimitato che non vale la pena porsi il problema di suddividere le tabelle anno per anno. Per questa occorrenza predisponi qualche query di selezione che gestisca ciò. L'idea delle query UNION la trovo sbagliata.
  • Re: Utilizzo di una Query UNION

    Grazie 1000 Osvaldo per il consiglio, la scelta è stata fatta per non avere fra le mani un "malloppo" di dati che raramente potevano essere utili negli anni successivi, per quanto riguarda la query di Unione ho pensato anche di realizzare una procedura simile in VBA ma avrei dovuto scrivere un sacco di codice e non ne avevo voglia. Grazie comunque per il tuo interessamento!!!
  • Re: Utilizzo di una Query UNION

    Potrei sbagliarmi, ma credo che far lavorare Access a suon di codici VBA piuttosto che sui dati nelle tabelle sia più faticoso. Il VBA lo si usa per fare automatizzazioni personalizzate e/o mirate a ottimizzare quel qualcosa che Access non ha concepito di "nativo". Le tabelle sono la parte più nativa ed essenziale dei dati su cui lavorare.
  • Re: Utilizzo di una Query UNION

    Probabilmente il problema era proprio che la stessa Tabella CLIENTI era aperta per l'esecuzione di SQL UNION e contemporaneamente per l'esportazione del comando DoCmd...Export che ovviamente è nello stesso comando,
    questo lo deduco dal fatto che caricando le due tabelle da unire con nomi diversi ( esempio 1 e 2 ) e su questi
    effettuata la Query di UNION, mi permette di aggiornare correttamente il risultato della Query nella Tabella
    corrente CLIENTI in archivio.
Devi accedere o registrarti per scrivere nel forum
6 risposte