Accodare più "campi tabella" per ottenere un unico campo Query

di il
10 risposte

Accodare più "campi tabella" per ottenere un unico campo Query

Buona sera,sono nuovo e mi scuso subito se sto chiedendo bestialità/semplicità

Sto realizzando un applicativo con Acces per la gestione/catalogazione di tutti gli oggetti presenti in una stanza/casa.
Siccome ogni oggetto è diverso per "PROPRIETA'" dagli altri ho strutturato una tabella contenente questa struttura record : "ID,NomeOggetto,FamigliaOggetto,TipoOggetto,Proprieta1,Proprieta1Valore,Proprieta2 ,Proprieta2Valore,Proprieta3,Proprieta3Valore ecc.."
Ora vorrei poter ottenere una query "Proprieta,Valore" dove tutte le colonne tabella Proprieta1,Proprieta2,Proprieta3 ecc vengano accodate nella colonna Query "Proprieta" e tutte le colonne tabella Proprieta1Valore,Proprieta2Valore,Proprieta3Valore vengano accodate nella colonna Query "Valore".

per es. NomeOggetto="penna",Proprieta1="Lunghezza",Proprieta1Valore="100mm",Proprietà2="colore",Proprieta2Valore="rosso"

e vorrei ritrovarmi questo nella query
Proprieta - Valore
lunghezza - 100mm
colore - rosso

lo scopo è poter poi attraverso la selezione delle proprietà e/o valori e/o degli altri campi (ID,NomeOggetto,FamigliaOggetto,TipoOggetto) ricercare il/gli oggetti corrispondenti .
Avevo pensato ad un accodamento ma non riesco a gestirlo adeguatamente, o se c'è qualche altro sistema meno macchinoso per avere in una combobox il contenuto proposto di tutti i campi "Proprieta"/"Valori" della tabella.

Grazie a chi mi saprà aiutare

10 Risposte

  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    Strutturalmente hai sbagliato. Avresti dovuto avere una tabella "proprietà" 1-N con la tabella "oggetti"

    Io il mio suggerimento te l'ho dato ma se vuoi insistere su quella strada puoi usare le UNION
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    Tjpianello ha scritto:


    Sto realizzando un applicativo con Acces per la gestione/catalogazione di tutti gli oggetti presenti in una stanza/casa.
    Anch'io ho creato qualcosa di simile.

    muttley005 ha scritto:


    Strutturalmente hai sbagliato. Avresti dovuto avere una tabella "proprietà" 1-N con la tabella "oggetti"
    Forse muttley005 ha ragione. Da parte mia, piuttosto che elencare quei nomi propri di campi che hai esposto (non ci ho capito nulla), sarebbe più interessante capire che dati hai e come li vuoi tracciare: servono alcuni esempi pratici.
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    muttley005 ha scritto:


    Strutturalmente hai sbagliato. Avresti dovuto avere una tabella "proprietà" 1-N con la tabella "oggetti"
    Mi associo al suggerimento. L'ideale sarebbe avere una tabella che elenchi i tipi di proprietà di cui si parla, ad esempio dimensioni, colore, tipo, ecc.

    I campi potrebbero essere: ID (es. contatore), Tipo (testo).

    In seguito, potresti definire la tua tabella con tutti gli oggetti, anch'essi identificati ad esempio da ID (es. contatore) e Nome (testo).

    Infine, la tabella dei valori delle caratteristiche per gli oggetti, ossia quella che correla una tipologia di proprietà a uno specifico oggetto, indicandone il valore, strutturata ad esempio con i campi: ID (es. contatore), ID oggetto (intero), ID proprietà (intero), Valore (a piacimento).

    In breve, suddividi le caratteristiche che vuoi inventariare dagli oggetti e dalle associazioni di valori per le caratteristiche stesse e per ogni oggetto.

    Attraverso delle query con JOIN, puoi facilmente riunire i dati e cercare qualsiasi informazione di destinazione applicando un filtro a qualsiasi dato di partenza (tipo di caratteristica, valore, tipo e valore, oggetto e caratteristiche, ecc.).

    In un contesto RDBMS in breve, la tua base dati deve essere normalizzata per poter essere ricercabile in modo efficace.

    Se i dati diventano oltremodo complessi, forse è l'uso di un RDBMS a non essere quello consono, e potrebbe essere più utile passare a un qualsivoglia database NoSQL. Prima però occorre valutare gli scenari d'uso dei dati che andrai poi a inserire, quindi serve senz'altro un approfondimento ulteriore per capire...

    Ciao!
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    Ho provato ad impostare il tutto come suggeritomi (campo PROPRIETA' e tabelle correlate con TIPO, PROPRIETA ma purtroppo ho relazione di molti a molti ... cerco di spiegarmi:
    un oggetto può avere 1 sola proprietà mentre altri ne possono avere fino a 16 di proprietà e pure doppie ( es una matita(il TIPO) con doppia punta(PUNTA sarebbe la proprieta : per es. pensate alle penne con anche 6 colori selezionabili) alle estremità di cui una ROSSA e una BLU (che sarebbero i VALORI assegnati alle proprieta).

    io invece da principiante totale ho pensato ad avere dentro il singolo record tutte a 16 le PROPRIETA con i relativi 16 VALORI.
    questo mi permette di avere una QUERY con tutte le PROPRIETA' legate ad ogni TIPO .
    avrò per es. un record con :

    ID :10 / Famiglia : scrittura / Tipo : matita / Param1: Punta Colore / valoreParam1: rosso / Param2: Punta Colore " _
    & " valoreParam2: blu / Param3: lunghezza / valoreParam3: 10cm / param4: / valoreParam4: / param5: /valoerParam5:

    nel momento in cui vado ad inserire una nuova "matita" oltre ai parametri già disponibili da tutti i record precedenti ne posso aggiungere altri (fino a 16in tot) che mi verranno proposti durante l'inserimento.
    ho quindi la QUERY di accodamento PARAMETRI: dove di volta in volta accodo i nuovi parametri
    ID: 2 / Tipo: matita / Parametro : Punta Colore
    ID: 3 / Tipo: matita / Parametro : lunghezza
    ID: 5 / Tipo: matita / Parametro : Materiale

    in fase di ricerca ora devo poter "selezionare" tutti quei campi che soddisfano ai criteri scelti (tramite cbo) FAMIGLIA,TIPO,Parametro1,ValoreParametro1,Parametro2,ValoreParametro2 ecc...
    l'inghippo è in questa fase... dove su 16 parametri ipoteticamente salvati nel DB io devo poter cercare per es il parametro "Punta Colore" in tutti e 16 i campi parametro e relativi valori .
    quindi ho realizzato una sequenza di AND /OR per gestirli in un stringa SQL per modificare il "RecordSource"
    Dim z As String
        z = "SELECT AttrezzatureUbicazione.* " _
        & "FROM AttrezzatureUbicazione " _
        & "WHERE AttrezzatureUbicazione.Famiglia LIKE '*" & CercaFamiglia & "*'" _
        & "AND AttrezzatureUbicazione.Tipo LIKE '*" & CercaTipo & "*' " _
        & "AND AttrezzatureUbicazione.DESCRIZIONE LIKE '*" & CercaDESCRIZIONE & "*' " _
        & "AND AttrezzatureUbicazione.Locale LIKE '*" & CercaLocale & "*' " _
        & "AND AttrezzatureUbicazione.PosizioneOrizzontaleAntioraria LIKE '*" & CercaOrizzontale & "*' " _
        & "AND AttrezzatureUbicazione.[Verticale Ubicazione] LIKE '*" & CercaVerticale & "*' " _
        & "AND (AttrezzatureUbicazione.PR1= cboParametro1  OR AttrezzatureUbicazione.PR3= cboParametro1 " _
        & "OR AttrezzatureUbicazione.PR5 = cboParametro1 OR AttrezzatureUbicazione.PR7 = cboParametro1 " _
        & "OR AttrezzatureUbicazione.PR9 = cboParametro1 OR AttrezzatureUbicazione.PR11 = cboParametro1 " _
        & "OR AttrezzatureUbicazione.PR13 = cboParametro1 OR AttrezzatureUbicazione.PR15 = cboParametro1 " _
        & "OR AttrezzatureUbicazione.PR17 = cboParametro1 OR AttrezzatureUbicazione.PR19 = cboParametro1 " _
        & "OR AttrezzatureUbicazione.PR21 = cboParametro1 OR AttrezzatureUbicazione.PR23 = cboParametro1 " _
        & "OR AttrezzatureUbicazione.PR25 = cboParametro1 OR AttrezzatureUbicazione.PR27 = cboParametro1 " _
        & "OR AttrezzatureUbicazione.PR29 = cboParametro1 OR AttrezzatureUbicazione.PR31 = cboParametro1) ;"
     
      Form_Ricerca.RecordSource = z
      Form_Ricerca.Requery
    dove "cboParametro1" rappresenta il primo dei parametri che io vorrei cercare nei record (la sua origine dati è la Query dove attraverso le UNION ho ricavato l'elenco di tutti i parametri dai 16 campi).
    la cosa funzionerebbe anche; se non fosse che avviando la maschera e premendo sulla combo "cboParametro1" e selezionato il parametro voluto mi esce una maschera automatica che mi richiede l'inserimento manuale del valore da cercare da inserire nell'oggetto "cboParametro1" per ciascuno dei 16 campi OR, come se la combo "cboParametro1" non esistesse nella maschera stessa e la stessi "creando li per li.

    scusate la mia ignoranza e scarsa preparazione, ma è veramente poco che mi ci sto deicando.
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    https://drive.google.com/file/d/1C0Ef6lCp93rvcrDnmM19rW4iwmV4i8oe/view?usp=sharing
    se riesco a caricarla questa è la maschera di ricerca
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    Per me stai proponendo un quesito più tipico della sezione "Progettazione database". Andiamo avanti lo stesso qui. Anche per me resta d'obbligo normalizzare su più tabelle. Occorre quindi conoscere:
    - nomi propri di tutte le tabelle
    - nomi propri di tutti i campi
    - le relazioni

    In attesa di conoscere esattamente i nomi propri campi...penso che devi trovare una DENOMINAZIONE UNIVOCA per ogni oggetto. Puoi distribuirlo su più campi (Categoria potrebbe essere uno di questi...), ma poi ce ne sarà certamente uno totalmente testuale dove dovrai trovare tu la denominazione più congrua...
    L'esempio delle matite rende parzialmente l'idea, ma in tutta la casa tu non hai solo matite, hai anche...vado a ruota libera:
    corde (con i vari spessori)
    fermagli
    fermacampioni
    gomme
    temperamatite
    colori pastelli
    colori a spirito
    colori a tempera
    colori a olio
    colori a vernice
    ...e chi più ne ha più ne metta...da questi esempi che ti ho proposto, capisci bene che tutti i dettagli/caratteristiche diventano tipiciX, tipiciY, tipiciZ...non so se ho reso l'idea.
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    TJ non ha importanza se la stessa proprietà può ripetersi, sta tutto nella strutturazione e nelle chiavi.
    E' chiaro che si può arrivare a far funzionare il tuo "sistema" ma non è il massimo come ti sei già reso conto per una banale ricerca.
    La struttura che ti propongo è qualcosa del genere:
    (SU 2 TABELLE)
    T_OGGETTI: id_oggetto (PK), des_oggetto, altri campi "singoli"
    T_OGGETTI_PROPRIETA: id_ogg_prop (PK), id_oggetto (FK), des_proprietà, val_proprietà
    oppure
    (SU 3 TABELLE)
    T_OGGETTI: id_oggetto (PK), des_oggetto, altri campi "singoli"
    T_PROPRIETA: id_proprieta (PK), des_proprietà, eventuale_default_value
    R_OGG_PROP: id_ogg_prop (PK), id_oggetto (FK), id_proprieta (FK), val_proprieta

    in entrambi i casi se vuoi avere una sola volta la proprietà X per un oggetto ti basta impostare un indice univoco (oltre alla PK) di oggetto/proprietà ma siccome tu dici di poter ripetere la stessa proprietà per oggetto non serve (anzi è dannoso)
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    Tjpianello ha scritto:


    un oggetto può avere 1 sola proprietà mentre altri ne possono avere fino a 16 di proprietà e pure doppie ( es una matita(il TIPO) con doppia punta(PUNTA sarebbe la proprieta : per es. pensate alle penne con anche 6 colori selezionabili) alle estremità di cui una ROSSA e una BLU (che sarebbero i VALORI assegnati alle proprieta).
    E quale sarebbe il problema? Aggiungi più record alla tabella che contiene i valori delle proprietà inserendo un riferimento all'ID dello stesso oggetto (es. matita) e l'ID della stessa proprietà (es. punta), duplicandolo ovvero mettendo due record, una con "doppia" e una con "singola".

    Da nessuna parte è stato detto che i valori per stesso oggetto e stessa proprietà debbano necessariamente essere uno solo, a meno che tu non voglia forzare questo vincolo.

    Tjpianello ha scritto:


    io invece da principiante totale ho pensato ad avere dentro il singolo record tutte a 16 le PROPRIETA con i relativi 16 VALORI.
    questo mi permette di avere una QUERY con tutte le PROPRIETA' legate ad ogni TIPO . [...]
    scusate la mia ignoranza e scarsa preparazione, ma è veramente poco che mi ci sto deicando.
    Ti è già stato detto che questa soluzione è limitata e inadatta al tipo di interrogazioni che vuoi fare tu.

    Chiedi aiuto ma poi, quando ti vengono suggerite soluzioni, alla fine fai di testa tua e riproponi nuovamente lo stesso problema: ne converrai che in questo modo sarà ben difficile uscirne.

    Prova a fare tesoro dei consigli e cerca di capire la logica che vi sta dietro.

    Ciao!
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    Scusate, stavo solo cercando di spiegare quello che avevo fatto fino ad ora... ben vengano tutte le "dritte" per fare qualcosa fatto come si deve
    il quesito del post era stato raggiunto con le "UNION" che mi avete proposto subito all'inizio, poi ho cercato solo di spiegare il mio "pasticcio". Se volete chiudere questo post ne apro un'altro apposito per come strutturare con le vostre dritte il tutto .
    Devo solo riorganizzare celebralmente la struttura del tutto

    per il momento grazie a tutti per il contributo...

    il cardine identificativo di ogni "oggetto" è semplicemente l'ID della "TabellaEntita" a cui associo un codice di localizzazione nell'ambiente composto da "Locale&PosizioneOrizzontale&PosizioneVerticale" che sono campi della "TabellaEntita"
    es: 126LB1 ----> è il codice univoco identificativo dell'elemento n°126 che si trova nel locale "L" (per es "L"=>Lavanderia) nell'elemento fisico "B" (immaginate di aprire una porta e partendo dalla vostra dx assegnare ad ogni cosa che vedete occupare da terra a soffitto una lettera partendo da "A" a "Z" in senso antiorario.... il primo elemento alla vostra dx è "A", poi in senso antiorario trovate "B"....e cosi via).Verticalmente si parte da 0 che è il pavimento a salire sui vari livelli che si trovano verticalmente 0-9.In questo modo se etichettassi questo "codice univoco" sugli oggetti saprei esattamente dove trovarli/riporli.
    Per scremare e dare un senso pratico ho poi aggiunto i campi alla "TabellaEntita" :
    FAMIGLIA(es Apparecchiatura,Consumabile,Attrezzatura,Arredo,Vestiario)
    TIPO(es Elettrico,Stoffa,Legno,Detersivi)
    DESCRIZIONE(es Phon,Ferro da stiro,Matita,Penna,Maglia)

    a questo punto 16 campi "PARAMETRO" con i relativi campi "VALORE" sono legati a quanto sopra per 'qualificare' l'ENTITA' legata al "126LB1".

    questi sono principalmente i miei campi da gestire...
    ora cerco di impostare come mi avete suggerito il tutto e poi vi aggiorno
  • Re: Accodare più "campi tabella" per ottenere un unico campo Query

    Si te l'ho suggerito io ma ti ho anche evidenziato che è un rimedio ad una problematica di base ... quindi funziona ma non significa che sia fatto bene
Devi accedere o registrarti per scrivere nel forum
10 risposte