Problema Tabella

di il
45 risposte

Problema Tabella

Buongiorno, nessuno ha mai dovuto risolvere un problema di questo tipo (se mai fosse un problema) nel mio caso lo è perchè se mi serve questa tabelle e vado in join con il campo codice articolo mi si duplicano i record

Ho una tabella collegata costruita in questo modo:

E voler ottenere una tabella così:

Considerando che il numero del campo Riga può tendere a infinito (ma non credo sia un problema).

Ho provato sia accodando, sia creando una nuova tabella ma con scarsi risultati.

45 Risposte

  • Re: Problema Tabella

    08/05/2025 - Fabio76 ha scritto:

    Buongiorno, nessuno ha mai dovuto risolvere un problema di questo tipo (se mai fosse un problema) nel mio caso lo è perchè se mi serve questa tabelle e vado in join con il campo codice articolo mi si duplicano i record

    Ho una tabella collegata costruita in questo modo....

    Ciao,   ....ma la tabella collegata è un foglio excel ? ... in pratica quello che ti chiedo per capire meglio è:

    1. L'origine dati qual'è e dove si trova ?
    2. La tabella di detinazione in MsAccess già esiste ?
  • Re: Problema Tabella

    Le righe non sono duplicate perchè sono diverse tra loro e la join funziona come dovrebbe per un DB.

    Tu cerchi una rappresentazione dei dati stile Excel e non ha senso

  • Re: Problema Tabella

    Questo è la soluzione

    che, come ti hanno detto, ha poco senso.

  • Re: Problema Tabella

    Cosa rappresenta la tua tabella? Ossia qual è il suo "nome proprio"?
    Concordo con gli altri che stai mostrando un qualcosa (che non si è capito) che somiglia a Excel (fuori strada).
    In Access devi avere chiari i concetti base di:
    - nomi propri di tabelle
    - campi chiave
    - omogeneità dati all'interno dei campi di ogni tabella
    vorremmo anche questo tipo di descrizione da parte tua.

    Forse vado fuori tema se dico che la seconda rappresentazione dati ricorda vagamente la query con funzione di Allen Brown, ma prima di parlare di ciò, occorre avere le idee chiare sulla consistenza dei dati di TuaTabella.

  • Re: Problema Tabella

    Scusate, la tabelle che vedete l'ho fatta in excel solo per far capire la struttura, la tabella originale è collegata ad un server ed è questa:

    Dove:

    CDDTM9 = Codice ditta, nel mio caso sempre valorizzato a 01

    CDLGGM9 = Codice lingua, assume valori del tipo GB,DE,FR o vuoto che equivale a IT

    CDARM9 = Codice articolo

    NRRGM9 = Numero riga

    DSARM9 = Descrizione

    Da questa struttura si evince che per ogni articolo, nella sua lingua, posso avere n righe di descrizione.

    Il mio obiettivo sarebbe avere questa tabella, dove per ogni articolo e la sua lingua ci fosse una sola riga (inoltre preciso che, se un articolo ha 10 righe di descrizione, non mi servirebbero nemmeno tutte, per quello che devo fare, quando riesco a creare una tabella dove al massimo il nrrgm9 è l'unione di 1+2+3 va più che bene

    presumo che sia con query di creazione tabella o accodamento non riesca a raggiungere il risultato che voglio.

    Alla domanda di franco se esiste la tabella di destinazione in access la risposta è si, e l'ho creata in questo modo, credo si capisca anche cosa ho provato a fare

  • Re: Problema Tabella

    I dati sono su AS400 o simili?

    In ogni caso la tabella che hai creato è quello che piuttosto sembra un report e, ripeto, non ha senso. Con un DBMS si lavora diversamente, per record e non per colonne, quella tabella fatta in quel modo non ha senso, ecco perché trovi difficoltà.

  • Re: Problema Tabella

    09/05/2025 - Fabio76 ha scritto:

    Alla domanda di franco se esiste la tabella di destinazione in access la risposta è si, e l'ho creata in questo modo, credo si capisca anche cosa ho provato a fare

    CDDTM9 = Codice ditta, nel mio caso sempre valorizzato a 01
    CDLGGM9 = Codice lingua, assume valori del tipo GB,DE,FR o vuoto che equivale a IT
    CDARM9 = Codice articolo

    NRRGM9 = Numero riga
    DSARM9 = Descrizione

    Ciao,

    direi che adesso è molto chiaro ... 

    1. abbiamo una tabella sorgente
    2. abbiamo una tabella di destinazione in MsAccess
    3. si deve elaborare un import dati in una certa forma

    .
    Tabella Input:

    1. Chiave Univoca CODICE :
      1. CDDTM9 = Codice ditta, nel mio caso sempre valorizzato a 01
        CDLGGM9 = Codice lingua, assume valori del tipo GB,DE,FR o vuoto che equivale a IT
        CDARM9 = Codice articolo
    2. Dettaglio DESCRIZIONI:
      1. NRRGM9 = Numero riga
        DSARM9 = Descrizione
    3. REGOLE
      1. Elaborare per ogni Chiave Univoca CODICE:
        1. Le prime 3 righe di Dettaglio DESCRIZIONE

    .
    Condizioni Regole:

    • Con quale regola determinare quali sono le tre righe di dettaglio da Importare ?
      • Prendere le prime 3 in Ordine di Numero Riga "NRRGM9 " coin le relative descrizioni ?
      • Importare al Massimo 3 Righe di Dettaglio
        • quindi se esistono 1 o 2 o 3 righe al massimo

    .
    Risultato per l'IMPORT... se confermate le Regole e le Condizioni di cui sopra:

    CodiceDittaCodiceLinguaCodiceArticoloDescrizione Riga 1Descrizione Riga 2Descrizione Riga3
    01IT1001BDSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
    01IT 1002AADSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
    01IT1011DDSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
    01IT 10334ARDSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
          

    Si deve ottenere una cosa  di questo tipo ?

  • Re: Problema Tabella

    Forse sbaglio perché non ho concretamente capito la consistenza dei dati (sono io molto duro di comprendonio) che pur è stata descritta dettagliatamente. Secondo me occorrono 2 tabelle correlate (se avessero nomi propri comprensibili sarebbe tutto più facile/logico), poi una query che coinvolga entrambe le tabelle e con opportuna funzione estragga 3 record al massimo dal lato molti e li allinei orizzontalmente.
    Riguardo il campo chiave primaria, sconsiglio il multicampo (nell'immagine ne vedo 4).

  • Re: Problema Tabella

    09/05/2025 - OsvaldoLaviosa ha scritto:

    poi una query che coinvolga entrambe le tabelle e con opportuna funzione estragga 3 record al massimo dal lato molti e li allinei orizzontalmente.

    Ciao,     pure io per certi Thread trovo difficoltà nel capire la domanda, può essere, anche in questo caso, di non averci capito nulla...  ;-)

    personalmente farei con una tabella unica e due righe di codice ... 
    Se al massimo vuole solo tre colonne, esegue un import delle "massimo 3 righe" di descrizione e le mette direttamente in orizzontale nelle 3 colonne di output.
    Sempre se la regola è questa e rimarrà fissa come logica.

    Faccio per esempio un esempio di come farei io  ;-)  nel caso in cui si ha un certo schema "fisso"
    - Poniamo di avere una tabella di INPUT e una di OUTPUT
    - Come Criterio al Massimo si prendono le Prime 3 Righe di Descrizione per Codice Articolo
    - Si crea in OutPut un nuovo Record che in "Orizzontale", per ogni Codice Articolo, popola le 3 colonne di Descrizioni Articolo

    Tabella di INPUT

    .
    Tabella di OUTPUT

    .
    Esempio di CODICE

    Option Compare Database
    Option Explicit
    
    
    

    .
    In certi casi preferisco realizzare gli import con del codice. SI ha la possibilità di inserire vari Controlli (come per esempio trattare eventuali caratteri speciali), Filtri, Condizioni e Criteri. Spesso, con altri sistemi, non sarebbe possibile.
    In sintesi, utilizzare due righe di codice permette di avere più flessibilità, semplicità e controllo.

    Boh... non so se effettivamente vuole ottenere tale risultato.  Vediamo cosa ci dice ;-) 

  • Re: Problema Tabella

    09/05/2025 - By65Franco ha scritto:


    Risultato per l'IMPORT... se confermate le Regole e le Condizioni di cui sopra:

    CodiceDittaCodiceLinguaCodiceArticoloDescrizione Riga 1Descrizione Riga 2Descrizione Riga3
    01IT1001BDSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
    01IT 1002AADSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
    01IT1011DDSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
    01IT 10334ARDSARM9 (prima)DSARM9 (Seconda)DSARM9 (Terza)
          

    Si deve ottenere una cosa  di questo tipo ?

    Hai centrato il punto perfettamente......

    Sto provando con il codice da te lasciato gestendo le tre lingue, GB, DE, FR in quanto l'IT che equivale al CDLGGM9 = null non mi serve, mi prendo la descrizione dall'anagrafica articoli, altra tabella.

  • Re: Problema Tabella

    12/05/2025 - Fabio76 ha scritto:

    Sto provando con il codice da te lasciato gestendo le tre lingue, GB, DE, FR in quanto l'IT che equivale al CDLGGM9 = null non mi serve, mi prendo la descrizione dall'anagrafica articoli, altra tabella.

    Ciao,

    certamente hai la possibilità di fare divere cose.

    Bisogna capire per esempio se il "CodiceArticolo"  CDARM9 è chiave univoca. In tal caso l'Sql e il Controllo durante la lettura dei records rimane valido.

    Ma se chiave Univoca per ogni articolo è data dai tre campi :

    CDDTM9 = Codice ditta, nel mio caso sempre valorizzato a 01
    CDLGGM9 = Codice lingua, assume valori del tipo GB,DE,FR o vuoto che equivale a IT
    CDARM9 = Codice articolo

    allora sia l'Sql che il Controllo durante la lettura dei records, cambia. 

    Per capirsi meglio :
    CDDTM9 =  01
    CDLGGM9 = IT
    CDARM9 = 1001B
    corrisponde all'articolo PERE

    mentre : 
    CDDTM9 =  01
    CDLGGM9 = GB
    CDARM9 = 1001B
    corrisponde all'articolo MELE

    e ancora potrebbe essere : 
    CDDTM9 =  01
    CDLGGM9 = FR
    CDARM9 = 1001B
    corrisponde all'articolo BANANE

    Quindi dopo aver definito con chiarezza con quale chiave lavorare, tutto è molto semplice e veloce.
    Fai sapere... 

  • Re: Problema Tabella

    12/05/2025 - Fabio76 ha scritto:

    Sto provando con il codice da te lasciato gestendo le tre lingue, GB, DE, FR in quanto l'IT che equivale al CDLGGM9 = null

    Se la chiave di lettura è composta da più colonne del tipo :
    CDDTM9 = Codice ditta, nel mio caso sempre valorizzato a 01
    CDLGGM9 = Codice lingua, assume valori del tipo GB,DE,FR o vuoto che equivale a IT
    CDARM9 = Codice articolo

    allora puoi prendere come esempio di riferimento questa piccola demo dove vengono trattate le 3 colonne come Chiave e come Livello di Controllo per importare i dati con le varie descrizioni in orizzontale :  https://www.transfernow.net/dl/20250514c0o5vUS9

    Come da codice sotto riportato, prendere spunto di come trattare una chiave composta al fine di riportare dei records esposti in Verticale in un formato Orizzontale.

    TableInput : è la tabella di origine dei dati nella forma Verticale
    TableOutPut : è la tabella per esporre i dati nella forma Orizzontale

    La demo consenti di :

    1. Button "Create New Output Table" : Ricrea la struttura della tabella di Output
    2. Button "Import Records...." : Esegue l'import dei records dalla tabella di Input nella tabella di Output
    3. Button "Display the Query Result" : esegue una query per visualizzare l'import nella tabella di Output
    4. Button "Display the Query Data Input" :  esegue una query per visualizzare la tabella di input, l'origine dei dati da importare.

    .

    Esempio:   (questo codice segue una certa logica e tecnica, ma può essere realizzato anche con altri metodi... è solo un piccolo e semplice  esempio) 
    Il codice si trova nel modulo "MyModImport"...

    Option Compare Database
    Option Explicit
    
    

    .
    Note al codice:

    • Viene trattata e normalizzata la colonna Lingua dove se CDLGGM9 = null , allora assume IT
    • Viene letta la tabella di input ordinata per le colonne  :
      • CDDTM9 / CDLGGM9 / CDARM9 / NRRGM9    (Company / Language / CodeItem / RowNumber)
    • Viene creata una chiave di livello per determinare quando scivere il record da importare con le sue descrizioni. La chiave in questo caso è composta da :
      • CDDTM9+CDLGGM9+CDARM9     (Company + Language + CodeItem)
    • Viene utilizzata una Collection per memorizzare le 3 descrizioni estratte secondo la chiave di lettura dei records
      • se per la chiave di lettura non esistono le 3 descrizioni articoli, allora gli elementi mancanti verranno impostati = Space(0)
      • se per la chiave di lettura esistono più di 3 descrizioni articoli, vengono ignorate e vengono presi solo i primi 3 records in ordine di "numero riga"
    • Viene utilizzata una DAO.QueryDef  per impostare una stringa Sql con i parametri da passare per eseguire l'Insert dei records nella tabella di Output
      • prima di eseguire l'Insert, vengono popolati i parametri con i valori estratti in fase di lettura dei records di input.
        Alcuni vantaggi per questo metodo :
        • consente di non doversi preoccupare se nelle descrizioni sono presenti caratteri speciali come per esempio :
          • Apicini : " ' "
          • Doppi Apici : " "
        • vale anche per i valori di tipo :
          • Date
          • Boolean
          • Null
          • Space(0) or Vuoto : stringhe di lunghezza Zero
          • Etc... Etc...
        • sarà il motore Dao a doversi preoccuparsi di trattare correttamente queste informazioni secondo il "tipo di dati" impostato nelle varie colonne della tabella.

    .
    Più o meno è tutto... ma se hai bisogno di ulteriori chiarimenti, chiedi pure... 

  • Re: Problema Tabella

    Scusa, ieri non ero in ufficio, tre cose:

    Ora provo a implementare sul mio esempio (poi dovrò automatizzare il fatto che all'apertura della maschera che mi usano in produzione dovrà svuotarsi la tableoutput e ripopolarsi con il lancio mymodimport, od al limite accodare quelli nuovi, ma credo non sia un problema)

    Vorrei capire perchè il fornitore dell'ERP crea la tabella lingue in questo modo (ma credo di capire, in questo modo non hai MAI limite di NRRGM9 (numero riga di descrizione), se fosse diversamente impostata dovresti prevedere un numero max di colonne di descrizione, tipo 1000, e se poi per caso arrivo a compilare la colonna 1000 e mi serve la 1001????)

    Grazie 1000, l'esempio va archiviato subito nella mia cartella utilità access 

    Vediamo cosa succede...

  • Re: Problema Tabella

    13/05/2025 - Fabio76 ha scritto:

    se fosse diversamente impostata dovresti prevedere un numero max di colonne di descrizione, tipo 1000, e se poi per caso arrivo a compilare la colonna 1000 e mi serve la 1001????

    Ciao Fabio,

    non conosco la logica usata dal tuo ERP per classificare il codice articolo e le sue descrizioni, quindi non saprei giudicare con correttezza il metodo/sistema adottato.

    Invece va ricordato che qualsiasi database ha lo scopo di sviluppare l'insieme dell'informazioni in senso "VERTICALE".
    Questo garantisce il "no limit" per qualsiasi tipo di informazione da trattare.

    In merito alla tua necessità, per la quale non conosco lo scopo e l'utilità, mi limito ad indicare, come già ben saprai, che mettere talune informazioni in senso "Orizzontale", non è una tecnica da database.

    Per esempio potrebbe andare bene se lo schema è fisso, ha delle regole e per un numero limitatissimo di colonne da traslare da verticale in orizzontale.
    Per le solo 3 colonne di descrizione, come nel tuo caso, è passabile ma solo nel caso sia utile per questioni pratiche di visualizzazione/stampa dell'informazioni.

    Se è per archiviare, gestire e modificare i contenuti.... allora direi proprio di no. Sarebbe una tecnica totalmente errata e altamente sconsigliabile.

    Ma ripeto, non conoscendo lo scopo e l'utilità di questa tua esigenza, non sono in grado di esporti eventuali consigli e tecniche da adottare.

    Buon lavoro... alla prox.  ;-)

Devi accedere o registrarti per scrivere nel forum
45 risposte