Per spiegarmi meglio:
supponi di avere una maschera associata ad un recordset che contiene
il cap di un comune e di dover accedere alla tabella "Comuni" per
visualizzare la denominazione.
In questo caso se il campo CAP è associato al controllo che si chiama
txtCAP è sbagliato scrivere
DlookUp("Denominazione";"Comuni";"CAP = " & txtCAP)
mentre è corretto
DlookUp("Denominazione";"Comuni";"CAP = " & [CAP])
Se invece i controlli della maschera hanno nome uguale ai campi
associati, rinominali: questo ti eviterà travasi di bile dovuti ad
errori altrimenti inspiegabili.
Vincenzo Turturro
-----------------------------------------------------
Niuna impresa, per minima che sia,
può avere cominciamento e fine senza queste tre cose:
e cioè senza sapere,
senza potere,
senza, con amore, volere
(Anonimo fiorentino, XIV sec.)
-----------------------------------------------------
ho un problema con la funzione DLOOKUP.
Immaginate che io abbia una maschera basata su una tabella, e che
questa maschera mi presenti un record della tabella per ogni riga
(maschera tabellare).
Ora, ogni controllo della maschera è associato ad un campo della
tabella.
Io, però, ho aggiunto alla maschera un controllo non associato che
tramite una funzione DLOOKUP va a prelevare in un'altra tabella un
certo valore che corrisponda al valore in due controlli associati
delal maschera.
Ho provato a far eseguire la funzione DLOOKUP su diversi eventi della
maschera e dei controlli, ma il massimo che riesco ad ottenere è di
ritrovare ripetuto su ognuna delle righe della maschera lo stesso
valore che corrisponde alla riga (record) su cui ho cliccato. Clicco
su un'altra riga, e mi ritrovo un altro valore corretto ripetuto su
tutte le righe che vedo.
Io, invece, mi dovrei aspettare di poter vedere un valore diverso per
ogni riga.
Spero di essere riuscito a spiegarmi.
Avete per favore una soluzione a questo problema?
Grazie in anticipo
Andrea
Andrea W. GUAGLIO
Milan, ITALY
PP-ASEL
If you want to privately mail me, please replace WantNoSpam with FLYING_WOLF
Immagino che quando parli di maschera tabellare vuoi intendere una maschera
la cui proprietà "Visualizzazione predefinita" sia "Maschere continue".
Ora un controllo non associato, come dice la parola, non è associato ad un
campo di un record della tabella, è quindi da considerarsi come un elemento
intrinseco della maschera e, se è un controllo calcolato inserito nel corpo
della maschera, il calcolo viene effettuato con i dati contenuti nel record
corrente e quindi ha significato solo nel caso in cui la "Visualizzazione
predefinita" della maschera sia "Maschera singola".
Se hai comunque l'assoluta necessità di utilizzare una maschera continua,
penso che tu non abbia altra scelta che crearti una query, nella quale
effettui anche i tuoi calcoli, quindi adoperi questa query come "Origine
record" della tua maschera.
Fra l'altro, nel tuo caso, se adoperi una query, forse non hai bisogno della
funzione DLOOKUP, visto che le due tabelle possono essere messe sicuramente
in relazione fra di loro tramite i campi che hai adoperato nei criteri della
funzione DLOOKUP ed essere pertanto usate congiuntamente nella query.
Roberto
visto che ho imparato? ;-)
Anyway, grazie per la tua risposta.
>Immagino che quando parli di maschera tabellare vuoi intendere una maschera
>la cui proprietà "Visualizzazione predefinita" sia "Maschere continue".
Precisamente. Scusa, la mia proprietà di linguaggio va migliorata.
>Ora un controllo non associato, come dice la parola, non è associato ad un
>campo di un record della tabella, è quindi da considerarsi come un elemento
>intrinseco della maschera e, se è un controllo calcolato inserito nel corpo
>della maschera, il calcolo viene effettuato con i dati contenuti nel record
>corrente e quindi ha significato solo nel caso in cui la "Visualizzazione
>predefinita" della maschera sia "Maschera singola".
Ok.
>Se hai comunque l'assoluta necessità di utilizzare una maschera continua,
eh sì, per il tipo di cosa che devo fare non ho alternative purtroppo.
>Fra l'altro, nel tuo caso, se adoperi una query, forse non hai bisogno della
>funzione DLOOKUP, visto che le due tabelle possono essere messe sicuramente
>in relazione fra di loro tramite i campi che hai adoperato nei criteri della
>funzione DLOOKUP ed essere pertanto usate congiuntamente nella query.
E no, purtroppo. Sarebbe bello, ma non posso.
Consentimi di spiegarti.
Il mio problema originale, ossia quello che ha potuto essere risolto
solo con la DLOOKUP, è apparentemente semplice.
Cerco di essere sintetico e di spiegarlo al meglio.
Io sono un agente, e quindi metto in relazione Fornitori con Clienti.
Ho quindi:
Tabella Fornitori: FORNITORE ecc. ecc.
Tabella Clienti: CODICECLIENTE, NOME CLIENTE ecc. ecc.
Tabella Fatture: NUMEROFATTURA, FORNITORE, CODICECLIENTE
e:
Tabella Fornitori Vs Clienti: FORNITORE, CODICECLIENTE, CODFOR
dove CODFOR è il codice che ogni fornitore assegna a ciascun cliente.
Le 4 tabelle di cui sopra sono tutte legate tra loro da relazioni, ma
per un limite di Access non è possibile creare una maschera (o un
report) basato su più di 3 tabelle che siano collegate tra loro.
Non c'è nulla da fare, ci ho provato in tutti i modi fino a che mi
sono scontrato con l'Help in linea che mi ha rivelato questa cosa.
Quindi, l'unica soluzione è la DLOOKUP che uso in una maschera FATTURE
(a visualizzazione maschera singola) che uso per inserire le fatture
fatte dai Fornitori ai Clienti.
Ho un controllo non associato che, all'inserimento di Fornitore e di
Cliente, restituisce tramite la DLOOKUP il CODFOR.
Vorrei che questa cosa fosse possibile in una maschera a
visualizzazione continua in cui mi vengono elencate tutte le fatture
(ad esempio non ancora pagate) con il cliente ed accanto il CODFOR
assegnatogli dal fornitore..
Tu mi suggerisci:
>penso che tu non abbia altra scelta che crearti una query, nella quale
>effettui anche i tuoi calcoli, quindi adoperi questa query come "Origine
>record" della tua maschera.
però non ho capito come posso far rientrare la questione del DLOOKUP
nella query dal momento che tale funzione va applicata per forza ad un
controllo non associato, che in quanto tale non si riferisce ad un
campo da far rientrare nella query.
O forse no nho compreso bene il tuo suggerimento.
Se hai tempo da buttare via, quando vuoi, mi farebbe piacere un
approfondimento su questo.
Grazie mille e buon lavoro!
Ciao
Ciao Andrea,
Ho notato con soddisfazione che hai imparato e visto che mi inviti ad
approfondire il tuo problema, lo faccio volentieri.
Per prima cosa puntualizziamo una tua affermazione: quando tu scrivi:
."...per un limite di Access non è possibile creare una maschera (o un
report) basato su più di 3 tabelle che siano collegate tra loro. "
immagino che tu voglia dire che Access non permette di adoperare più di due
livelli di sottomaschere o sottoreport; è vero ma mi sembra di capire che,
almeno per il momento, tu non hai né intenzione né necessità di adoperare
sottomaschere.
Per seconda cosa ti dico come organizzerei la struttura delle tue quattro
tabelle:
La tabella Fornitori contiene i campi CodiceFornitore (che ne è la chiave
primaria), NomeFornitore ecc. ecc.
La tabella Clienti contiene i campi CodiceCliente (che ne è la chiave
primaria), NomeCliente ecc. ecc.
La tabella Fatture contiene i campi Fattura (che ne è la chiave primaria),
CodiceFornitore, CodiceCliente, Importo, Data, Pagamento, ecc. ecc.
La tabella FornitoriVsClienti contiene i campi CodiceFornitore,
CodiceCliente (l'insieme di questi due campi rappresentano la chiave
primaria) CodFor.
Quando crei la tabella Fatture, tramite l' "Autocomposizione Ricerca..."
dichiarati sia CodiceFornitore che CodiceCliente come caselle combinate
Facendo riferimento rispettivamente alla tabella Fornitori e alla tabella
Clienti. Per questi due campi fai la stessa cosa quando crei la tabella
FornitoriVsClienti.
Così facendo aumenti notevolmente la facilità dell'immissione dei dati nelle
tabelle Fatture e FornitoriVsClienti, inoltre Access ti crea automaticamente
le relazioni fra le quattro tabelle (lo puoi verificare selezionando il
comando Relazioni... dal menu Strumenti).
A questo punto dividerei il problema del caricamento delle fatture dalla
loro visualizzazione.
Pertanto prima creerei una maschera (Maschera1) a visualizzazione "Maschera
singola" e che abbia come "Origine record" la tabella Fatture e la
adopererei per caricare le fatture; in questa fase non mi preoccuperei
ancora di CodFor.
Mi creerei poi una query basata su tutte e quattro le tabelle (come potrai
notare Access indica da solo la relazione tra le tabelle); in questa query
metterei tutti i campi della tabella Fatture ed in più CodFor, trascinandolo
dalla tabella FornitoriVsClienti.
Ora creerei una seconda maschera (Maschera2) a visualizzazione "Maschere
continue" e che abbia come "Origine record" la query e la adopererei per
vedere tutti i campi della query compreso il famigerato CodFor. Inoltre,
utilizzando i "Criteri:" della query puoi anche selezionare solamente alcune
fatture da vedere (ad esempio non ancora pagate).
Aprendo Maschera2 dovresti vedere quello che ti serve. Spero :-))
Questa soluzione ti dà un'altra possibilità: se crei una terza maschera
(Maschera3) che abbia come "Origine record" la tabella Clienti ed inserisci
in Maschera3, come sottomaschera, Maschera2 collegandole tramite
CodiceCliente,
Aprendo Maschera3 vedrai tra l'altro solo le fatture relative al cliente
corrente.
Lo stesso giochino lo puoi fare con i fornitori, assegnando come "Origine
record" di Maschera3 la tabella Fornitori.
Alla prossima, Roberto
>Avete per favore una soluzione a questo problema?
Basa la form su una query.
--
Lorenzo Coronati
--
<<Il materiale sul NG non è di particolare
qualità... cioè siti... magari in inglese in
cui si possono trovare maggiori informazioni...>>
(Matteo Testoni, 24/05/2000)
--
Quasi vero.
Se il DLookUp e` posto dentro la proprieta` Origine controllo di un
controllo
in maschera modalita` continua, funziona.
Paolo
Verissimo, mi accorgo di aver fatto un'affermazione gratuita, ed aver
trovato una soluzione macchinosa.
Comunque ho tribolato un pò a farlo funzionare, sino a quando non ho
scoperto che in questo caso, come separatore dei parametri all'interno della
parantesi, non va adoperata la virgola, ma il punto e virgola.
Roberto
E' come per le query!!
--
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------
Paolo
Grazie a tutti per il preziosissimo aiuto.
Mi auguro un giorno di essere in grado di dare il mio contributo.
Buon weekend a tutti!
dirai che sono instupidito dalla vita.
Forse è così, ma per un motivo a me ignoto non riesco ad implementare
in un'espressione quello che in codice funziona.
In poche parole, nel benedetto controllo associato vorrei mettere
un'espressione DLOOKUP= che equivalga a quanto trovi qua sotto:
Private Sub CodiceInterno_AfterUpdate()
Dim strFiltro As String
Dim strFiltro1 As String
strFiltro = "CodFor = '" & Me!CodFor & "'"
strFiltro1 = "CodInt = " & Me!CodiceInterno
Me!CF = DLookup("CodiceIntFor", "Fornitori Vs Clienti", strFiltro1 & "
AND " & strFiltro)
Exit Sub
End Sub
Al di là delle virgole che devono diventare dei punti-e-virgola, hai
modo per favore di aiutarmi a risolvere questo enigma?
Grazie tante
Ciao!
Andrea
Scusami ma il messaggio precedente mi è partito inavvertitamente.
Fermo restando che anche per me i criteri della LookUp sono stati sempre un
tormentone, forse perché adopero di rado la clausola WHERE, ipotizzando che
la maschera in cui stai lavorando si chiami MASCHERA1, prova a scrive così
nell'origine controllo del tuo campo calcolato:
= LookUp("CodiceIntFor" ; "Fornitori Vs Clienti" ; "[CodFor] =
[Forms]![MASCHERA1]![CodFor] AND [CodInt]=
[Forms]![MASCHERA1]![CodiceInterno]")
sempre che [CodFor] e [CodInt] siano i nomi di due campi della tabella
Fornitori Vs Clienti.
Ti anticipo che non l'ho provato.
Roberto
Scusate, ma non e' proprio cosi', bensi':
=DLookUp("[CodiceIntFor]"; "Fornitori Vs Clienti"; "[CodFor]=" & [CodFor] & "
AND [CodInt]=" & [CodiceInterno])
Bye
>
> Scusate, ma non e' proprio cosi', bensi':
> =DLookUp("[CodiceIntFor]"; "Fornitori Vs Clienti"; "[CodFor]=" & [CodFor]
& "
> AND [CodInt]=" & [CodiceInterno])
>
> Bye
> --
> Federico
>
[CUT]
L'avevo detto ad Andrea che con i criteri della LookUp non ci azzecco!!!
E poi se lo dice Federico.......
Contro la forza la ragion non vale. :-))))
Roberto
Ragazzi,
grazie per l'aiuto, ma non va.
L'espressione suggerita da Roberto l'avevo provata anch'io ma mi dava
#Nome?
nel controllo non associato.
Quella di Federico mi dà invece
#Errore?
Ho pensato che forse devo chiarire di più le cose.
Il CodFor è un campo TESTO, mentre il CodInt ed il CodiceInterno sono
campi NUMERICI.
Scusate, son di coccio!
Ciao
Allora e' cosi':
=DLookUp("[CodiceIntFor]"; "Fornitori Vs Clienti"; "[CodFor]=" & chr$(34) &
[CodFor] & chr$(34) & " AND [CodInt]=" & [CodiceInterno])
grazie mille. La soluzione funziona perfettamente.
Ti sono molto grato per l'aiuto.
Buona serata!