Problema Tabella

di il
9 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.

9 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 e 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 è di questo tipo e rimarrà fissa come logica.

    Faccio per esempio un esempio di come farei io  ;-)     nel caso in cui si ha un certo schema fisso come risultato finale per l'import:
    - 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 Descrizioni Articolo

    Tabella di INPUT

    .
    Tabella di OUTPUT

    .
    Esempio di CODICE

    Option Compare Database
    Option Explicit
    
    ' IMPORT CODE ROWS
    Private Sub MyImportCodeRows()
        ' Set variables
        Dim rowsMax As Integer: rowsMax = 3
        Dim codeRow As String: codeRow = Space(0)
        Dim i As Integer: i = 1
        Dim CollDes As New Collection
        
        ' Delete all records from output table
        DBEngine(0)(0).Execute "DELETE FROM TabellaOutPut;", dbFailOnError
        
        ' Open recordset from input table
        With DBEngine(0)(0).OpenRecordset("SELECT CDARM9, NRRGM9, DSARM9 FROM TabellaInPut ORDER BY CDARM9, NRRGM9;", dbOpenSnapshot)
            ' Read record
            Do While Not .EOF
                ' Initialize codeRow first
                If codeRow = Space(0) Then codeRow = .Fields("CDARM9").Value
                
                ' Save new Record and Reset key level
                If .Fields("CDARM9").Value <> codeRow Then
                    ' Insert new records
                    MyNewInsertOutPut codeRow, CollDes, rowsMax
                    ' Reset level key and description collection
                    codeRow = .Fields("CDARM9").Value
                    Set CollDes = New Collection
                    i = 1
                End If
                
                ' Build collection of description
                If i <= rowsMax And codeRow = .Fields("CDARM9").Value Then
                    ' Add new item
                    CollDes.Add Nz(.Fields("DSARM9").Value, Space(0))
                    ' Increase count max
                    i = i + 1
                End If
                
                ' Next record
                .MoveNext
            Loop
            ' Insert new last records
            MyNewInsertOutPut codeRow, CollDes, rowsMax
        End With
    End Sub
    
    
    ' INSERT NEW RECORDS INTO TABLE OUTPUT
    Private Sub MyNewInsertOutPut(codeRow As String, CollDes As Collection, rowsMax As Integer)
        ' Check if the collection contains items
        If CollDes.Count > 0 Then
            ' Normalize the collection to ensure a fixed number of items
            Dim y As Integer
            For y = CollDes.Count + 1 To rowsMax
                CollDes.Add Space(0)
            Next y
            ' Insert new record into the output table
            DBEngine(0)(0).Execute "INSERT INTO TabellaOutPut (OutCDDTM9, OutCDLGGM9, OutCDARM9, OutDSARM901, OutDSARM902, OutDSARM903) " & _
                                    "VALUES ('01', 'IT', '" & _
                                            Replace(codeRow, "'", "''") & "', '" & _
                                            Replace(CollDes(1), "'", "''") & "', '" & _
                                            Replace(CollDes(2), "'", "''") & "', '" & _
                                            Replace(CollDes(3), "'", "''") & "');", dbFailOnError
        End If
    End Sub

    .
    In certi casi preferisco realizzare gli import con del codice in modo di avere la possibilità di inserire vari Controlli (come per esempio trattare eventuali caratteri speciali), Filtri, Condizioni e Criteri che spesso diversamente  non sarebbe possibile con altri sistemi... 
    in sostanza, per certi tipi di operazioni, utilizzando due righe di codice trovo più flessibilità, semplicità e controllo.

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

Devi accedere o registrarti per scrivere nel forum
9 risposte