[RISOLTO] Utilizzo recursivo query di accodamento

di il
6 risposte

[RISOLTO] Utilizzo recursivo query di accodamento

Buongiorno a tutti.

In Access2016

Ho una query a campi incrociati che mi genera un set di record (65000 per l'esattezza) già la sola apertura ci mette più di 5 minuti.

Il campo univoco di questa query e' il dato che devo passare ad una query di accodamento col copia/incolla manuale funziona perfettamente.

Il problema è che sono 7 comandi per ogni aggiornamento…. facendo i conti 15 secondi ad aggiornamento ho 270ore di di click da fare…..

In Access 2000 si poteva registrare la Macro per l'esecuzione della successione dei comandi In Access2016 non sono riuscito a trovare questa funzionalità. 

Ho provato ha creare una Macro ma mi sono fermato all'apertura della Query a campi incrociati.

Se riuscite a darmi una aiuto mi fate risparmiare un lavoro veramente tedioso.

Mi serve per aggiornare correttamente la PARENT_CHILD nel PDM cad su SQL prelevando i dati da un DB2 di AS400.

E' un lavoro che deve esser fatto solo con metodo recursivo per non creare casini' nell SQL

6 Risposte

  • Re: [RISOLTO] Utilizzo recursivo query di accodamento

    28/12/2023 - Xvic ha scritto:

    Mi serve per aggiornare correttamente la PARENT_CHILD nel PDM cad su SQL prelevando i dati da un DB2 di AS400.

    Non ho la minima idea di cosa significhi questa frase.

    28/12/2023 - Xvic ha scritto:

    In Access2016 

    Ho una query a campi incrociati …

    Ho provato ha creare una Macro ma mi sono fermato all'apertura della Query a campi incrociati.

    Credo di esprimere l'opinione di molti dicendo che lo scenario è “inquietante”, per i tempi di esecuzione di cui parli e per come volevi venirne a capo: con le macro!

    Dacci qualche informazione in più, come minimo con le SQL della query a campi incrociati, di quella di accodamento… anche se poi dici che è copia incolla manuale e ancora che ci sono 7 comandi per ogni aggiornamento: oltre ad essere inquietante è pure oscuro.

    Il database di Access ha le tabelle collegate all'AS400 (quanti ricordi!!!) ed al contempo con quello che presumo essere SQL Server?

    Aggiungi e chiarisci a parole e se ritieni utile anche con qualche immagine.

  • Re: [RISOLTO] Utilizzo recursivo query di accodamento

    La tabella AS400 

     SVIBAPWIT_ANLEG00F sono otre 630K di record

    La tabella SQL del PDM

    dbo_PARENT_CHILD sono oltre 1600K di record

    a livello di PDM i figli sono maggiori  che a livello di ERP che poi al fine di confronto hanno un campo FAI_ACQUISTA che si utilizza per discriminarli al fine di avere le distinte materiali uguali sia dall'elaborazione in ERP e PDM.

    Il mio piccolo Access che utilizzo per gli aggiornamenti bidirezionali e' da 1.63Gb.

    Fino alle versione 2000 di access potevi registrare macro di invio tasti e selezioni che mandavi in loop su un PC dedicato ed era semplice.

    Ora seleziono il dato

    E lo do in pasto alla query di accodamento come parametro

    Riuscire ad automatizzare queste operazioni dovrebbe essere ancora possibile

    La query di accodamento va a scrivere in maniera opportuna nella PARENT_CHILD SQL

  • Re: [RISOLTO] Utilizzo recursivo query di accodamento

    L'SQL della query di accodamento è questo:

    INSERT INTO dbo_PARENT_CHILD ( PARENT_UNIQUE_ID, CHILD_UNIQUE_ID, PARENT_CHILD_FAI_ACQUISTA, PARENT_CHILD_BOM_POS, PARENT_CHILD_QTY, PARENT_CHILD_UM, DTVLD, DTVLA )
    SELECT dbo_DOCUMENTO_1.UNIQUE_ID, dbo_DOCUMENTO.UNIQUE_ID, dbo_DOCUMENTO.FAI_ACQUISTA, SVIBAPWIT_ANLEG00F.SEQZA, SVIBAPWIT_ANLEG00F.CFIMP, dbo_DOCUMENTO.UM, SVIBAPWIT_ANLEG00F.DTVLD, SVIBAPWIT_ANLEG00F.DTVLA
    FROM dbo_DOCUMENTO INNER JOIN (dbo_DOCUMENTO AS dbo_DOCUMENTO_1 INNER JOIN SVIBAPWIT_ANLEG00F ON dbo_DOCUMENTO_1.ID = SVIBAPWIT_ANLEG00F.PADRE) ON dbo_DOCUMENTO.ID = SVIBAPWIT_ANLEG00F.FILIO
    WHERE (((dbo_DOCUMENTO.FAI_ACQUISTA) Like "FAI") AND ((SVIBAPWIT_ANLEG00F.ATD01)<>"A") AND ((SVIBAPWIT_ANLEG00F.PADRE)=[COMMESSA]) AND ((dbo_DOCUMENTO_1.FAI_ACQUISTA) Like "FAI") AND ((dbo_DOCUMENTO_1.T) Not Like "D"))
    ORDER BY SVIBAPWIT_ANLEG00F.SEQZA;

    Come faccio a dargli una lista di valori al parametro COMMESSA ????

  • Re: [RISOLTO] Utilizzo recursivo query di accodamento

    28/12/2023 - Xvic ha scritto:

    La tabella SQL del PDM

    dbo_PARENT_CHILD sono oltre 1600K di record

    a livello di PDM … in ERP e PDM.

    Non ho capito ancora niente di quelle sigle spero di poterti aiutare lo stesso.

    28/12/2023 - Xvic ha scritto:

    Il mio piccolo Access che utilizzo per gli aggiornamenti bidirezionali e' da 1.63Gb.

    Il piccolo Access sta quasi per esplodere. Al massimo può arrivare a 2 GB. Conservi così tanti dati al suo interno? Fai compatta e ripristina (rigorosamente in locale, non su LAN) di tanto in tanto?

    28/12/2023 - Xvic ha scritto:

    Fino alle versione 2000 di access potevi registrare macro di invio tasti e selezioni che mandavi in loop su un PC dedicato ed era semplice.

    Non ricordo il “registratore di macro” di Access 2000, credevo fosse una macro in senso classico, seppur si possano sostituire al 99,9999% con codice vba che fa le stesse cose e meglio. Con questa mole di dati che cosa avresti fatto, lasciato andare il computer “da solo” con l'aiuto delle macro per N ore? Quando riesco provo a guardare le immagini.

    Scrivi per cortesia anche la SQL delle query? La ottieni premendo il pulsantone Visualizza struttura - Visualizza foglio dati della query, c'è anche Visualizza SQL. A maggior ragione torno a chiederla perché temo di vedere la richiesta di un parametro (almeno uno, forse di più) nel modo che viene insegnato nei pessimi manuali (e non solo, anche Microsoft ci si mette sul suo sito a volte) che obbliga JET/ACE a prendersi tutti i dati della tabella di origine per filtrarla poi su Access, senza beneficiare della presenza di un server tosto.

    PS: solo ora ho visto una SQL, il post è arrivato mentre stavo scrivendo. In attesa che tu prenda la mano con la barra dell'editor dei post, la rielaboro io con i rientri automatici e la pubblico con i tag code, così si legge meglio (tu intanto guarda cosa sono i tag code e come si usano per il codice in generale, anche SQL)

    INSERT INTO dbo_PARENT_CHILD (
    	PARENT_UNIQUE_ID,
    	CHILD_UNIQUE_ID,
    	PARENT_CHILD_FAI_ACQUISTA,
    	PARENT_CHILD_BOM_POS,
    	PARENT_CHILD_QTY,
    	PARENT_CHILD_UM,
    	DTVLD,
    	DTVLA
    	)
    SELECT dbo_DOCUMENTO_1.UNIQUE_ID,
    	dbo_DOCUMENTO.UNIQUE_ID,
    	dbo_DOCUMENTO.FAI_ACQUISTA,
    	SVIBAPWIT_ANLEG00F.SEQZA,
    	SVIBAPWIT_ANLEG00F.CFIMP,
    	dbo_DOCUMENTO.UM,
    	SVIBAPWIT_ANLEG00F.DTVLD,
    	SVIBAPWIT_ANLEG00F.DTVLA
    FROM dbo_DOCUMENTO
    INNER JOIN (
    	dbo_DOCUMENTO AS dbo_DOCUMENTO_1 INNER JOIN SVIBAPWIT_ANLEG00F ON dbo_DOCUMENTO_1.ID = SVIBAPWIT_ANLEG00F.PADRE
    	) ON dbo_DOCUMENTO.ID = SVIBAPWIT_ANLEG00F.FILIO
    WHERE (
    		((dbo_DOCUMENTO.FAI_ACQUISTA) LIKE "FAI")
    		AND ((SVIBAPWIT_ANLEG00F.ATD01) <> "A")
    		AND ((SVIBAPWIT_ANLEG00F.PADRE) = [COMMESSA])
    		AND ((dbo_DOCUMENTO_1.FAI_ACQUISTA) LIKE "FAI")
    		AND ((dbo_DOCUMENTO_1.T) NOT LIKE "D")
    		)
    ORDER BY SVIBAPWIT_ANLEG00F.SEQZA;
  • Re: [RISOLTO] Utilizzo recursivo query di accodamento

    La query di selezione valori per il parametro COMMESSA è questa

    SELECT *
    FROM LEGCICONTROLLO
    WHERE (((LEGCICONTROLLO.FILI_DBO) Is Null));

    Che posso trasformare in una di creazione tabella per avere la lista dei parametri

    La LEGCICONTROLLO  e la successione di 4 query a Campi Incrociate sulle tabelle AS400 e SQL che senza filtri ha 65K di record

  • Re: [RISOLTO] Utilizzo recursivo query di accodamento

    Scrivendo ho risolto il problema ho creato la tabella di selezione record e lo aggiunta alla query di accodamento togliendo il parametro

    INSERT INTO dbo_PARENT_CHILD (
       PARENT_UNIQUE_ID,
       CHILD_UNIQUE_ID,
       PARENT_CHILD_FAI_ACQUISTA,
       PARENT_CHILD_BOM_POS,
       PARENT_CHILD_QTY,
       PARENT_CHILD_UM,
       DTVLD, DTVL
       )
    SELECT 
    	dbo_DOCUMENTO_1.UNIQUE_ID,
    	dbo_DOCUMENTO.UNIQUE_ID,
    	dbo_DOCUMENTO.FAI_ACQUISTA,
    	SVIBAPWIT_ANLEG00F.SEQZA,
    	SVIBAPWIT_ANLEG00F.CFIMP,
    	dbo_DOCUMENTO.UM,
    	SVIBAPWIT_ANLEG00F.DTVLD,
    	SVIBAPWIT_ANLEG00F.DTVLA
    FROM PADRE INNER JOIN
     (dbo_DOCUMENTO INNER JOIN
     (dbo_DOCUMENTO AS dbo_DOCUMENTO_1 INNER JOIN SVIBAPWIT_ANLEG00F
     ON dbo_DOCUMENTO_1.ID = SVIBAPWIT_ANLEG00F.PADRE)
     ON dbo_DOCUMENTO.ID = SVIBAPWIT_ANLEG00F.FILIO)
     ON PADRE.PADRE = SVIBAPWIT_ANLEG00F.PADRE
    WHERE (
    	((dbo_DOCUMENTO.FAI_ACQUISTA) Like "FAI") 
    	AND ((SVIBAPWIT_ANLEG00F.ATD01)<>"A") 
    	AND ((dbo_DOCUMENTO_1.FAI_ACQUISTA) Like "FAI") 
    	AND ((dbo_DOCUMENTO_1.T) Not Like "D"))
    ORDER BY SVIBAPWIT_ANLEG00F.SEQZA;

    Ho fatto test con tabella PADRE di 6 record

    Controllati andati a buon fine 

    Per la creazione tabella padre limito i record con un filtro aggiuntivo

    SELECT LEGCICONTROLLO.PADRE, * INTO PADRE
    FROM LEGCICONTROLLO
    WHERE (((LEGCICONTROLLO.PADRE) Like "D055*") AND ((LEGCICONTROLLO.FILI_DBO) Is Null));

    Grazie per avermi dato il la alla soluzione

Devi accedere o registrarti per scrivere nel forum
6 risposte