Newsgroup: it.comp.appl.access
Titolo: Come realizzare db per articoli 'multi-struttura' ?

Sicuramente molti partecipanti a questo newsgroup avranno gia' visto il 
sito web di Esprinet, che descrive articoli di famiglie diverse con 
caratteristiche diverse, ricercabili
 
Ad esempio per le stampanti ogni articolo presente in archivio disporra' 
del campo tipologia (aghi, laser, ink-jet), velocita' stampa, peso, ecc..
Mentre per i server saranno disponibili altri campi come numero cpu 
installate, numero alimentatori installabili, ram massima installabile, 
ecc...
 
Famiglie diverse di articoli, ogni famiglia dispone di campi specifici 
per la memorizzazione delle informazioni, campi che possono essere usati 
per filtrare le ricerche ed arrivare a selezionare gli articoli con 
buona precisione
 
Volendo replicare questo tipo di funzionamento su un db nuovo, come fareste?
Personalmente userei (almeno) queste tabelle per contenere le informazioni:
- famiglie_prodotti  (id_famiglie_prodotti, descrizione, ecc...)
- famiglia_prodotti_campi (id_famiglie_prodotti_campi, 
id_famiglie_prodotti, nome_campo, tipo_campo, ecc..)
- articoli (id_articoli, id_famiglie_prodotti, descrizione, ecc...)
- articoli_valori (id_articoli_valori , id_articoli, valore_stringa, 
valore_decimale, valore_data, ecc...)
 
Il problema salta fuori quando si tratta di inserire/modificare i valori 
  di un articolo, nel senso che la form dovrebbe 'autocostruirsi' in 
funzione della famiglia_prodotti cui l'articolo appartiene, quindi se 
l'articolo e' una stampante dovrebbero venir consentito l'inserimento 
nei campi 'tipologia', 'velocita', 'peso', ecc..
Mentre se stiamo modificando un articolo della famiglia 'server' la form 
dovrebbe presentare i campi 'numero cpu', 'alimentatori max', 'ram max', 
ecc...
La domanda e': come fareste voi per riuscire a memorizzare campi diversi 
su famiglie articolo diverse?

 
 
 
sicuramente non sarà il metodo migliore ma ti dico come ho fatto io in 
un scenario simile
 
 
tab Fam
tab dettFam
tab Art
tab dettArt
 
tab Fam:
IDFam
descrizione
...
 
esempio
01|stampanti
02|server
 
 
tab dettFam
idDettFam
idFam
nomeAttributo
 
 
esempio
01|01|pagine minuto
02|01|fronte retro
03|01|scanner
04|02|numero cpu
05|02|numero dischi
06|02|numero alimentatori
 
tab Art
IDART
Descrizione
...
 
esempio
A01|stampante canon A
A02|stampante canon B
S0x|server hp 310g
 
 
tab dettArt
idDettArt
idArt
Attributo
Valore
 
nel momento che creo un nuovoa articolo esempio "stampante epson abc" 
codice "AAA" famiglia 01
 
faccio una inser in dettArt di tutte le caratteristiche presenti nella 
famiglia mediante una insert
 
quindi:
 
in dettArt mi ritrovo
 
idDettArt|idArt|Attributo|Valore
....
01|AAA|pagine minuto|null
02|AAA|fronte retro|null
03|AAA|scanner|null
.....
 
nella form dell'articolo ho una subform di tipo tabellare con origine 
"select attributo, valore from dettart where idart=" & codice articolo 
corrente
 
qui mi ritrovo da compilare quindi i 3 attributi per la stampante.
 
 
nel caso a una famiglia aggiungo un nuovo attributo, vado ad aggiungerlo 
tramite una insert anche in tutte le dettArt gia create
 
con questa struttura riesco facilmente a filtrare per i singoli 
attributi di ogni famiglia di articolo
 
BFS


Si, la struttura db e' quella che ipotizzavo
Hai usato la subform in formato 'tabellare' per visualizzare colonne 
diverse per articoli di famiglia diversa
Era questo il punto che mi mancava, l'inserimento/modifica dei dati per 
famiglie diverse, e' un buon inizio
Speravo di trovare chi avesse realizzato la form dinamicamente 
'autocostruente' ma gia' con la form tabellare ci si arriva a fare 
quanto richiesto
Molte grazie

 Molte grazie
 
cosa intendi con "form dinamicamente autocostruente" ?
 
le colonne della subform sono sempre due per tutti gli articoli
Attributo e Valore
 
questa struttura mi permette di copilare e poi stampare schede tecniche 
con i soli attributi compilati
qualcosa tipo come si presenta nel sito techdata quando si clicca sulle 
specifiche
 
https://ibb.co/RjY0YgX
 
 
la prima colonna è l'attributo la seconda è il valore di cui parlo sopra
 
poi ovviamente devi pensare ad automatismi di duplicazione 
famiglie/articoli per evitare che uno debba compilarsi tutto ogni volta 
da zero
esempio due stampanti quasi identiche dove cambia solo il n° di pagine 
al minuto e il nome
 
ciao
BFS


Intendo una classica 'form singola' con tante textbox ognuna delle quali 
sia corrispondente ad un campo valore tra quelli previsti dall'articolo 
corrente
Ovviamente la label della textbox dovra' assumere lo stesso nome 
dell'attributo indicato
Quello che la vista in formato tabellare fa in automatico
 
 
 


ah ok
fattibile posizionando a runtime i controlli, impostare label etc
ma troppo sbattimento
 
nel mio caso a livello grafico ho impostato cosi:
 
maschera principale del prodotto
https://ibb.co/RbjybBD
 
 
tab dove carico gli attributi
https://ibb.co/BN9wsyG
 
 
maschera di ricerca
https://ibb.co/9wkwQ1Z
 
 
ciao
BFS
 
 
 
 
 
 
 


Per i campi ATTRIBUTI niente ricerca ?
Li tieni tutti genericamente in formato testo o hai anche numerico e 
data/ora ?
 
 


il cliente non ne aveva necessità
avrei cmq tenuto tutto in formato testo, più pratico e gestibile
in caso di ricerca per attributi avrei fatto una combo che si popola con 
la lista dei possibili attributi in base alla famiglia scelta
e una casella testo dove scrivere la parola chiave per l'attributo scelto
 
ciao