Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

problema con il comando dlookup

94 views
Skip to first unread message

dinojay

unread,
Mar 2, 2004, 7:24:19 PM3/2/04
to
salve a tutti.
sono un utente di autodidatta di access ed uso la versione access 97: sto
elaborando un programma che partendo da un listino prezzi inserito in una
tabella sia in grado di elaborare un preventivo. alcune voci devono essere
prelevate dal listino altra devono essere aggiunte a mano: ho creato una
maschera ed una sottomaschera per intestazione e corpo del preventivo; sono
in grado di visualizzare gli articoli per descrizione nella casella
combinata insieme al prezzo ma mi servirebbe che il prezzo venisse inserito
automaticamente. Con la funzione DLookup sono riuscito ad aggiornare
automaticamente la casella prezzo ma non mi inserisce il prezzo esatto, me
ne inserisce uno a caso. Ho quindi un problema nella parte della colonna
criteri e non riesco a venirne fuori.
per favore mi aiutate a capire cosa non va nella seguente routine che ho
copiato da northwind e poi adattato al caso?

-cod_art e' la casella combinata che mi permette di visualizzare codice
articolo, descrizione e prezzo;
-[query1] è la query che mi visualizza le colonne codice-descrizione-prezzo
della tabella listino a cui è collegata la cesella combinata cod_art;
-descrizione e prezzo sono i campi che devono essere aggiornati
--------
Private Sub codice_AfterUpdate()
On Error GoTo Err_codice_AfterUpdate

Dim strFiltro As String

' Valuta il filtro prima di passarlo alla funzione DLookup.
strFiltro = "cod_art =" & codice

' Cerca la descrizione del prodotto e lo assegna al controllo
descrizione.
Me!descrizione = DLookup("desc_art_cam_gr", "Query1", strFiltro)

' Cerca il prezzo unitario del prodotto e lo assegna al controllo
PrezzoUnitario.
Me!prezzo = DLookup("Prezzo_prod", "Query1", strFiltro)

Esci_codice_AfterUpdate:
Exit Sub

Err_codice_AfterUpdate:
MsgBox Err.Description
Resume Esci_codice_AfterUpdate

End Sub
--------------
Vi ringrazio in anticipo ed in ogni caso e' stato utile leggere le altre
vostre risposte che mi hanno gia risolto qualche altro piccolo problemuccio.
:-)
--
dino Carrozzo
di...@tiscali.it
ICQ 81037259


Francesco G. Rizzoni

unread,
Mar 3, 2004, 12:24:20 AM3/3/04
to
"dinojay" <leonardo...@virgilio.it> ha scritto nel messaggio
news:TA91c.6337$36.1...@news4.tin.it...
[CUT]

>: ho creato una maschera ed una sottomaschera per intestazione e corpo del
preventivo; sono
> in grado di visualizzare gli articoli per descrizione nella casella
> combinata insieme al prezzo ma mi servirebbe che il prezzo venisse
inserito
> automaticamente.

Intanto, se hai una casella combinata che ti visualizza già il prezzo
dell'articolo, puoi usarne la proprietà Column() (Vedi help) per farti
restituire il valore contenuto nella colonna desiderata e corrispodente
all'articolo selezionato.

>Con la funzione DLookup sono riuscito ad aggiornare
> automaticamente la casella prezzo ma non mi inserisce il prezzo esatto, me
> ne inserisce uno a caso. Ho quindi un problema nella parte della colonna
> criteri e non riesco a venirne fuori.
> per favore mi aiutate a capire cosa non va nella seguente routine che ho
> copiato da northwind e poi adattato al caso?
>
> -cod_art e' la casella combinata che mi permette di visualizzare codice
> articolo, descrizione e prezzo;
> -[query1] è la query che mi visualizza le colonne
codice-descrizione-prezzo
> della tabella listino a cui è collegata la cesella combinata cod_art;
> -descrizione e prezzo sono i campi che devono essere aggiornati
> --------

[CUT]

> Dim strFiltro As String
strFiltro = "cod_art =" & Me!cod_art 'Se il codice è numerico
strFiltro = "cod_art ='" & Me!cod_art & "'" 'Se il codice è
alfanumerico


>
> ' Cerca la descrizione del prodotto e lo assegna al controllo
> descrizione.
> Me!descrizione = DLookup("desc_art_cam_gr", "Query1", strFiltro)
>
> ' Cerca il prezzo unitario del prodotto e lo assegna al controllo
> PrezzoUnitario.
> Me!prezzo = DLookup("Prezzo_prod", "Query1", strFiltro)
>

[CUT]

E' comunque + pratico e veloce usare la proprietà Column della casella
combinata.

Però...

Credo che stai facendo una cosa inutile e soprattutto dannosa, infatti quasi
sicuramente stai duplicando la descrizione dell'articolo nella tabella corpo
preventivo, senza giustificato motivo. (4 mesi con la condizionale, però
puoi essere affidato ai servizi sociali).

Se non mi stò sbagliando, dovresti strutturare le tue tabelle con uno schema
simile:

Tabella Articoli:
Cod_Art (chiave)
Descrizione
Prezzo

Tabella Clienti:
Cod_Cli
Nominativo

Tabella Preventivi:
Num_Prev (Chiave)
Data
Cod_Cli (in relazione molti a 1 con Cod_Cli tabella Clienti)

Tabella PrevenCorpo
Num_Prev (in relazione molti a 1 con la tabella Preventivi)
Num_Riga (Questo campo insieme al precedente sono la chiave primaria)
Cod_Art (in relazione molti a 1 con Con Cod_Art tabella Articoli)
Quantità
PrezzoPrev (Necessario xchè potrebbe essere diverso da quello in magazzino)

Le relazioni le crei quando sei in visualizzazione degli oggetti "Tabelle",
dal menu strumenti, Relazioni. Devi applicare l'integrità referenziale (vedi
help e storico post del NG).

Poi crei una query con le tabelle Preventivi e Clienti come origine dei dati
per la maschera principale, ed una con le tabelle PrevenCorpo ed articoli
per la sottomaschera.

Nella routine Dopo Aggiornamento della casella combinata in cui scegli
l'articolo, metti il prezzo dell'articolo nel controllo associato al prezzo
nel preventivo.
A questo punto non ti occorrono + nè DlookUp, nè Column, in quanto i campi
descrizione associati al cliente ed all'articolo vengono già
individuati/visualizzati dalle query.

Spero non averti fatto troppa confusione.
Ciao.

--
Francesco G. Rizzoni


Roberto da casa

unread,
Mar 3, 2004, 11:07:24 AM3/3/04
to

"dinojay" <leonardo...@virgilio.it> ha scritto nel messaggio
news:TA91c.6337$36.1...@news4.tin.it...

Ammesso e non concesso che abbia ben capito il tuo problema, visto che la
sottomaschera penso sia a visualizzazione maschera continia o a
visualizzazione folglio dati, non puoi usare il codice VBA per popolare la
casella di testo del prezzo (tutte le caselle di testo prezzo visualizzate
nella sottomaschera verrebbero aggiornate contemporaneamente e con lo stesso
valore: a mio avviso la stessa cosa dovrebbe accadere anche con la casella
di testo descrizione).
Visto che la casella di testo prezzo è calcolata dovrebbe essere non
associata, quindi nella sua origine controllo prova a scrivere:

= DLookup ("Prezzo_prod"; "Query1"; "cod_art =" & codice)

questo se il campo cod_art è di tipo Numerico, se invece fosse di tipo testo
prova a scrivere:

= DLookup ("Prezzo_prod"; "Query1"; "cod_art ='" & codice & "'")

--
Roberto

---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


dinojoy

unread,
Mar 7, 2004, 6:42:39 PM3/7/04
to
come se non bastasse mi è pure partito il pc ed ho dovuto ricominciare parte
del lavoro da capo
scusate se non hopotuto leggere subito le vostre risposte... non mi sono
dimenticato di ringraziare...
proverò subito e vi faro' sapere

grazie ancora
dino

Francesco G. Rizzoni <rfrance...@infinito.it> wrote in message
8_d1c.6505$36.2...@news4.tin.it...

dinojoy

unread,
Mar 7, 2004, 6:44:21 PM3/7/04
to
anche a te, grazie per la risposta, spero di riuscire a mettere a frutto i
consigli...
Vi ringrazio in ritardo solo perche ho avuto problemi col pc
dino
Roberto da casa <r.ma...@libero.it> wrote in message
0pn1c.48477$FJ6.1...@twister1.libero.it...

Roberto da casa

unread,
Mar 8, 2004, 6:19:23 AM3/8/04
to

"dinojoy" <di...@tiscali.it> ha scritto nel messaggio
news:ptO2c.12434$z23.5...@news3.tin.it...
[CUT]

Quando rispondi scrivi DOPO e non prima del testo dei messaggi precedenti.

dinojay

unread,
Mar 11, 2004, 5:36:07 PM3/11/04
to

Roberto da casa <r.ma...@libero.it> wrote in message
%EY2c.58121$FJ6.2...@twister1.libero.it...
ok grazie ho risolto il problema
alcune relazioni erano da perfezionare (grazie a Francesco per i consigli)
il comando Dlookup mi serviva
per aggiornare la tabella preventivi ed avere memoria dei vecchi preventivi
(dopo una macro lancia una query
di aggiornamento che mi flagga il campo "stampato"). Fatto questo il campo
era di tipo testo quindi la mia
stringafiltro non funzionava (grazie Robertodacasa). Per ora credo di poter
andare avanti da solo. Se ho bisogno
posso disturbare ancora?
ancora grazie
dino


Roberto da casa

unread,
Mar 12, 2004, 5:58:32 AM3/12/04
to

"dinojay" <di...@tiscali.it> ha scritto nel messaggio
news:rR54c.32221$z23.1...@news3.tin.it...
[CUT]
> posso disturbare ancora?

Tu provaci, cosě poi ti risponderai da solo a questa dimanda. ;-)

> ancora grazie
> dino

0 new messages