Newsgroup: it.comp.appl.access
Titolo: Riferimenti a campi di una altra tabella

Ciao a tutti.
Per gestire un inventario, mi sono organizzato su tre tabelle e due
sottomaschere.
Nella tabella A sono inseriti i nominativi dei dipendenti.
Nella tabella B i dati relativi al materiale dato in assegnazione, con
diversi campi da gestire: tipo di materiale assegnato, quantità, data di
assegnazione, durata minima in mesi, data di prossima assegnazione
Le due tabelle sono relazionate uno-a-molti (cioè ogni persona può avere
diversi tipi di materiale assegnato).
Nella tabella C ho tre campi: descrizione del materiale, quantità da
assegnare normalmente, durata minima in mesi.
La tabella C mi serve indipendente così da poter cancellare del materiale
non più in uso o aggiungere nuovo tipo di materiale; la quantità minima mi è
necessaria così da, in un secondo momento, richiamare delle ... statistiche
per sapere se un dato dipendente ha ricevuto tutto il quantitativo previsto
o se è in debito, mentre la durata minima in mesi mi serve, sempre in
secondo momento, per sapere quando è il momento di sostituire il materiale
assegnato in precedenza.
Fatte queste premesse....
Ho creato 1 maschera principale basata su tabella A dove mi richiamo volta
per volta il dipendente, con una struttura a 2 schede (materiali e
statistiche); poi una sottomaschera (inserita nella scheda materiali) basata
sulla tabella B.
In questa sottomaschera ho una cbx con origine dati la colonna "materiali"
della tabella C (per scegliere il/i materale/i assegnato/i), poi i vari
campi riferiti alla tabella B.
Sembrerebbe che tutto funzioni a dovere (in effetti poi la parte più ardua
sarà gestire le funzioni di statistiche varie, ma a questo penso dopo), solo
che non riesco a richiamare, nel campo "durata minima in mesi" della tabella
B il corrispondente valore, per il materiale scelto, che ho registrato nella
tabella C.
In effetti vorrei che, selezionando nella cbx il materiale, nel campo
"durata minima in mesi" mi visualizzasse il valore corrispondente
prelevandolo dalla tabella C; tale valore poi lo userei con una funzione
DateAdd per calcolare, dopo aver inserito la data di assegnazione, la data
di nuova assegnazione.
Ho provato ad inserire come "Proprietà/Valore predefinito" il valore
[tblC]![DurataMesi] ma, ovviamente (sarebbe troppo facile) mi restituisce
errore.
Probabilmente il problema ha una soluzione ovvia, ma non ci arrivo.....
Grazie e ciao
Andrea

 ha scritto nel messaggio 
news:vGeUf.45000$A83.1...@twister1.libero.it...

Funzione Dlookup? (vedi help attivabile con ALT-F11, poi F1)
Ciao.
-- 
Sergio MAZZA 

>Funzione Dlookup?
ehm.......sě........
Sto facendo delle prove e da una parte funza, dall'altra no. Forse ho
qualche idea sulla risoluzione del problema, smanetto un pň e se poi
capitolo (verbo "fare una brutta fine") chiedo aiuto, altrimenti
postorisultati.
Grazie
Andrea

Vabbè, niente.
Se lavoro solo sulla subform ela visualizzo, il DLookUp funziona a dovere.
Ma se apro la form principale che contiene la subform, mi dà errore:
"L'oggettto non contiene l'oggetto di automazione
'Forms!subMateriali!cbxDescrizione"
Questa è l'istruzione che ho inserito su DopoAggiornamento della
cbxDescrizione (subform):
    Dim Durata As Variant
    Durata = DLookup("[Rinnovo]", "tblMateriali", "[IDMateriale] =
[Forms]![subMateriali]![cbxDescrizione]")
    Me.Rinn = Durata
La cbxDescrizione l'ho creata con Creazione Guidata, inserendo 2 colonne:
IDMateriale (lunghezza 0 cm) e Descrizione.
Perchè non mi funziona????
Andrea

 ha scritto nel messaggio news:ICZUf.48608$A83.1...@twister1.libero.it...

Se la casella combinata [cbxDescrizione]è nella stessa (sub)form , che lo metti a fare tutto il percorso per arrivare al suo valore?
Dovrebbe essere:
Durata = DLookup("[Rinnovo]", "tblMateriali", "[IDMateriale] = "  & [cbxDescrizione])
Oltre al fatto che essendo una "variabile" dovrebbe essere fuori dalla stringa della condizioneWhere.
Altra considerazione; se la casella combinata è nulla (vuota) la dlookup ti presenta un errore; dovresti utilizzare la funzione NZ 
almeno per ritornare un valore = 0 per l'idmateriale:
Durata = DLookup("[Rinnovo]", "tblMateriali", "[IDMateriale] = "  & nz([cbxDescrizione];0))
Ciao.
-- 
Sergio MAZZA 

Grazie per i consigli. Adesso sembra che tutto funzioni. Fino al prox
ingrippo ;-)
Il problema principale di Access, credo, almeno per i non addetti come sono
io (che lo faccio per divertimento e per semplificarci la vita inufficio) è
che spesso non si sa in che modo risolvere dei problemi semplici (come
questo mio adesso) pur essendoci delle funzioni specifiche.
E quando qualcuno ti suggerisce la risposta, poi ci si mettono i dettagli,
come il fatto che trattavo il valore incriminato come variabile da una
parte, ma non dall'altra.
Le varie guide ti insegnano qualche contentino giusto per farti felice; in 3
anni che smanetto Access io ho comprato 2 guide formato enciclopedia, e 3
tascabili, ma sinceramente ciò che ho imparato rompendo le scatole qui sul
NG, non l'ho mai trovato sulle guide, ed in ogni caso mi avete infilzato in
mente la curiosità ed il ragionamento su certe cose (ad es. più o meno
guardavo sempre quell'errore della variabile, come se ne avessi il
presentimento ma non la certezza).
Prima o poi posterò un resoconto di ciò che sono riuscito a creare in questi
3 anni, soprattutto grazie a voi, per ringraziarvi tutti.
Avevo intenzione di farlo al termine del progetto, ma ogni giorno in ufficio
esce fuori una cosa nuova risovibile con Access ed ecco che ricomincia la
storia infinita.
Grazie ancora
Andrea

 ha scritto nel messaggio news:_fAWf.56027$A83.1...@twister1.libero.it...

Purtroppo nelle guide non troverai mai la soluzione al tuo (o qualsiasi altro) problema; perché ognuno ci vuole (giustamente) 
mettere del "suo".
La guida o il manuale deve essere preso per quello che è: una guida alla ricerca dei termini per la soluzione, che dovrà essere per 
forza assemblata da chi ha il problema...
Ciao.
-- 
Sergio MAZZA 

Adesso, risolto grazie a te il problema del DLookUp, quando tutto sembrava
dover procedere in discesa, si è ripresentato un altro inghippo.
Qaundo vado ad usare il DB creato, ora mi dice che nella tblPersonale è
necessario creare un record correlato.
Siccome qualche tempo fa avevo già creato un DB basato su due tabelle
correlate, ho seguito anche qui lo stesso procedimento.
la correlazione l'ho fatta, come in precedenza, creando un IDPersonale
contatore nella tblPersonale ed un IDMateriale numerico nella tblMateriali;
relazione uno-a-molti con integrità referenziale (1 personale-molti
materiali).
Se visualizzo la tblPersonale, vedo che esiste la persona (Pippo) con la
spunta per aprire la tabella correlata. Allora perchè nel DB mi dice che è
necessario creare il record correlato, se nella tabella questo record
correlato c'è???
Ho controllato con l'altro DB, la struttura è la stessa, ho settato anche i
campi master e secondari (anche se adesso non mi sovviene dove si settino,
ma deve essere per il nervosismo), eppure l'altro funza a dovere, questo mi
dice vattelapesca......
Scusate la rottura.....
Andrea

 ha scritto nel messaggio 
news:I4PWf.57079$A83.1...@twister1.libero.it...

Che correlazione c'è tra un Personale e (molti) Materiali?
Forse intendevi:
[tblPersonale]
- id, contatore, indicizzato sì (duplicati non ammessi);
- ...
[tblMateriali]
- id, contatore, indicizzato sì (duplicati non ammessi);
- idPersonale, numerico, intero lungo;
- ...
La relazione è:
[tblPersonale].id --> [tblMateriali].idPersonale
Se utilizzi maschera (associata a [tblPersonale]) e sottomaschera (associata 
a [tblMateriali]) devi impostare la proprietà campi secondari/master 
indicando i campi in relazione...
Ciao.
-- 
Sergio MAZZA 

In preda ad  un attacco di ira viuuulenta, ho applicato la soluzione finale:
tasto CANC e ricomincio daccapo da DB vuoto.
Adesso funziona tutto, eppure ho solo rifatto tutto quello che avevo fatto
prima.....
Misteri di zio Bill ???
Grazie ancora
Andrea