Newsgroup: it.comp.appl.access
Titolo: progettare il db

Ero quasi arrivato alla fine del mio db dei consumi di carburante, ma mi 
sono accorto di aver fatto un errore di progettazione
che ora mi costringe a fare tutto da capo.
il problema adesso è che non riesco più ad impostarlo.
La situazione è questa:
Nella mia azienda si utilizzano delle card (tipo bancomat) per fare i 
rifornimenti.
Ogni card è associata ad un veicolo.
Io sulla base di queste informazioni avevo sviluppato il db
tblVeicoli, TblRifornimenti
non avevno cosiderato però che c'è un numero esiguo di card (chiamate star) 
che possono essere
utilizzate indistintamente su ulteriori veicoli eventualmente assegnati in 
via temporanea. (non su quelli che già hanno la card associata)
ora queste card "star" (solo nel nr.di 5) potrebbero essere si utilizzate su 
altre autovetture ma queste autovetture
potrebbero utilizzare diverse card "star"
Avevo pensato ad una relazione molti-a-molti che però non riesco ad 
impostare.
oppure ancora, proprio per non buttare al vento tutto il lavoreo che avevo 
già fatto,
di aggiungere nel mio db tre nuove tabelle dedicate solo ai rifornimenti con 
card star
tblCard, TblVeicoli, TblRifornimenti
poi però devo fare in modo che in un'unica tabella (eventualmente 
tblRifornimentiTot) mi finiscano i rifornimenti di tutti i veicoli
ma in questo modo come faccio ad associare i rifornimenti di tutti i veicoli 
anche quelli con card star
In realtà per quel poco che ho imparato sui db relazionali non credo che sia 
corretto
tuttavia con una costruzione come indicato per ultimo (senza relazione 
molti-a-molti), ho già provato, avrei nella tblVeicoli più volte lo stesso 
veicolo per quante sono le card star che ha utilizzato per i rifornimenti.
che posso fare

 ha scritto nel messaggio 
news:46c7cc54$0$10626$4faf...@reader2.news.tin.it...

ho fatto un passo avanti
nella tabella rifornimenti credo di aver creato la relazione molti-a-molti
ho messo due riferimenti RIFECARD e RIFEVEICOLO che puntano alle chiavi 
primarie delle rispettive tabelle
per quanto riguarda gli inserimenti però mi capita nelle maschere che ho 
creato
che devo inserire manualmente il RIFECARD nella sottomaschera rifornimenti
E' cosi o c'è un modoalternativo? 

(.....)

T_Card
Campo	Descrizione		Tipo
---------------------------------------------------------------------
ID	Identificativo veicolo 	Contatore
N_Card	Numero carta		Testo
Tipo	Normale/Star		Testo
...
T_Veicolo
Campo	Descrizione		Tipo
---------------------------------------------------------------------
ID	Identificativo		Contatore
Targa	Numero di targa		Testo
...
T_Veicolo_Card
Campo	Descrizione		Tipo
------------------------------------------------------------------------
ID_V	Identificativo veicolo	Intero lungo
ID_C	Identificativo card	Intero lungo
DT_Ini	Data inizio validità	Data/ora
DT_Fin	Data fine validità		Data/Ora
T_Rifornimento
Campo	Descrizione		Tipo
------------------------------------------------------------------------------------
ID	Identificativo rifornimento	Contatore
ID_V	Identificativo veicolo	Intero lungo
ID_C	Identificativo card	Intero lungo
DT_R	Data rifornimento	Data/Ora
KM	Km veicolo al rifornim.	Intero lungo
Tipo	Tipo carburante		Testo
Qta	Quantità carburante	Singola precisione
Prezzo	Prezzo al litro		Singola precisione
A livello applicativo, nella form di gestione dei rifornimenti, l'utente dovrebbe come prima cosa selezionare il veicolo
e quindi impostare la data del rifornimento.
In questo modo puoi reperire via codice, senza bisogno di chiederlo all'utente, l'identificativo della card associata al
veicolo a quella data, mettendo il codice che segue nella routine "Dopo aggiornamento" dei controlli associati a ID_V ed
a DT_R:
Me!ID_C=Dlookup("ID_C","T_Veicolo_Card","ID_V=" & Me!ID_V & " AND DT_Ini<=#" & Format$(Me!DT_R,"mm-dd-yyyy") & "# AND
DT_Fin>=#" & Format$(Me!DT_R,"mm-dd-yyyy") & "#")
Ovviamente, il tutto se ho capito bene ed a meno di aggiustamenti.
Altrettanto ovviamente (spero !) ho dato per scontato che ad ogni veicolo non possano essere associate due o più card
Star i cui periodi di validità si sovrappongono, anche parzialmente.
Vincenzo Turturro
Certificato Eucip Core Level
ITA 0000-002299 del 14/05/2007
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
risorse Access:
http://www.accessgroup.it
---------------------------------------------
Il sito comune di it.comp.as400
http://www.faq400.com
---------------------------------------------

 - Mostra testo tra virgolette -
Me.ID_C = DLookup("ID_C", "T_Veicolo_Card", "ID_V = " & Me!ID_V & "
AND DT_Ini<=#" & Format$(Me!DT_R, "mm-dd-yyyy") & "# AND DT_Fin>=#" &
Format$(Me!DT_R, "mm-dd-yyyy") & "#")
Questa stringa è quella che mi hai dato tu.
solo che nel nel db che ho costruito così come avevi indicato
ho modificato le chiavi primarie delle tabelle utilizzando il numero
di targa e il numero di card (che sono univoci)
però le intestazioni dei campi non sono state modificate.
mi dice "operazione precedente annullata" quando eseguo
l'aggiornamento del campo veicolo nella maschera che ho creato per i
rifornimenti.
ho preferito fare questa scelta per agevolare la visualizzazione, così
vedo, nel momento in cui inserisco, sia la targa che il numero di
card, e soprattutto per facilitarmi l'importazione dei dati dai db che
distribuisco, per avere un riferimento univoco che sia la targa del
veicolo e non l'id che invece potrebbe essere uguale nei db da cui
importo
ah dimenticavo
ti ringrazione per la costruzione del db
e' eccezionale
però se non riesco a risolvere questo problema non posso utilizzarlo
per il momento ho modificato il mio
ma devo eventualmente inserire la card ai rifornimenti con la star
con il tuo invece ho il vantaggio di non doverlo specificare ed
inoltre mi consente di avere uno storico degli abbinamenti
veicolo-card
Grazie ancora

(...)
