Newsgroup: it.comp.appl.access
Titolo: DLOOKUP

Ho form principale con  i campi
    -articolo
    -data di validita'
All'interno di questo un subform con i seguenti campi
   - articolo (nascosto e key di legame con il form principale)
   - componente (articolo materiali componenti per fare l'articolo
principale)
   - qta (quantita' del  componente)
Una tabella Listino_Acquisto con i campi
- Componente
- Data_Validita
Nella subform ho messo un campo Prezzo_Unit che viene valorizzato con una
DLOOKUP .
Pero' non riesco a ottenere quello che vorrei.
Cioč per ogni Componente prendere il giusto prezzo
Se non metto la selezione per data funziona ma mi posiziona il valore
indipendentemente dal codice Componente cioč utilizza come key il codice
Componente che ho in edit nella subform
La dteData_Listino mi si valorizza correttamente pero' chiedo si puo' fare
una Dlookup con un filtro multiplo "...AND..."
Accetto anche altre soluzioni
grazie
Claudio
************************************************************
Dim strFiltro As String
Dim dteData_validita As Date
Dim dteData_Listino As Date
dteData_validita = Forms![Distinta_base_Header]!Data_validita_listino
dteData_Listino = DMax("[data_validita]", "Listino_acquisti", _
    "[data_validita] <= #" & dteData_validita & "#")
   strFiltro = "[Codice_Articolo] = '" & Me!Componente & "'" & " AND
[data_validita] = #" & dteData_Listino & "#" & ""
 Me!prezzo_unitario = DLookup("[Prezzo_Vendita]", "listino_acquisti",
strFiltro)
*********************************************************************

 ha scritto nel messaggio
news:cQb6e.38299$IN.7...@twister2.libero.it...

Ciao Claudio,
le AND si possono usare nel filtro della Dlookup.
Credo che il problema sia dovuto al formato della data.
In Sql le date vanno passate nel formato anglosassone mm/dd/yyyy o meglio
ancora ne formato yyyy/mm/dd
Prova a modificare la tua StrFiltro in questo modo
---------
strFiltro = "[Codice_Articolo] = '" & Me!Componente & "'" & " AND
[data_validita] = #" & Format(dteData_Listino,"yyyy/mm/dd") & "#"
--------
Ciao Giorgio

 wrote in message 
news:42594d1e$0$8074$5fc...@news.tiscali.it...

C'č ancora qualche cosa che non va pero' non sembra la strada giusta.
Mi sapresti indicare come fare a risolvere l'altro problema e cioč
La subform č tipo tabella
 Componente   Descrizione    Qta        Prz.Unit (quello da recuperare)
   Cod0001      tavolo            3             30,00
   Cod0009     cassetto         3             30,00  ERRORE deve darmi il 
suo prezzo
grazie Claudio 

 suo prezzo
bisognerebbe sapere se il prezzo lo devi memorizzare nella tabella o se lo
devi solo visualizzare (credo sia la seconda, Prezzo_Unit è un controllo non
associato giusto ?) e da che evento esegui il tuo codice.
Ciao Giorgio

 wrote in message 
news:42595b11$0$8085$5fc...@news.tiscali.it...

Per le date tutto ok ho modificato in tutte le parti il formato come mi hai 
detto tu
Grazie 1000000
Esatto il campo Prezzo_unit è controllo non associato a tabella.
Il codice lo faccio eseguire al ON CHANGE del campo QTA
Pero' adesso che mi dici cosi' mi potrebbe servire piazzarlo anche in una 
tabella cosi' lo avrei a disposizione per report ecc ecc
Risolviamo una cosa alla volta, il subform che funzioni e che mi mantenga 
per ogni componente il suo giusto prezzo, poi se non ti è di disturbo e mi 
dai 2 dritte per posizionarlo in una tabella
grazie ancora
ciao

 wrote in message 
news:24d6e.57409$zZ1.1...@twister1.libero.it...

 Dimenticavo Ogni volta che esco e entro nel form il dato si cancella, 
vorrei che restasse sempre visualizzato, perche' poi su quello faro' dei 
totali cioè moltiplichero' la qta X prez.unit e alla fine faro' il totale di 
tutti i componenti.
ricioao


certamente, è un controllo non associato.
Dunque... bisogna far eseguire il calcolo in modo automatico......
Inserisci il tuo codice sottoforma di funzione nel  modulo di classe della
maschera.
------------------
Function LeggiPrezzo(Byval varComponente as Variant) AS Variant
Dim strFiltro As String
Dim dteData_validita As Date
Dim dteData_Listino As Date
If IsNull(varComponente)=True Then
   LeggiPrezzo=0
   Exit Function
End if
dteData_validita = Forms![Distinta_base_Header]!Data_validita_listino
dteData_Listino = DMax("[data_validita]", "Listino_acquisti", _
    "[data_validita] <= #" & Format(dteData_validita,"yyyy/mm/dd") & "#")
   strFiltro = "[Codice_Articolo] = '" & Me!Componente & "'" & _
" AND [data_validita] = #" & Format(dteData_Listino,"yyyy/mm/dd") & "#"
LeggiPrezzo=DLookup("[Prezzo_Vendita]", "listino_acquisti",strFiltro)
End Function
--------------------
(non l'ho testata ma dovrebbe andare)
poi come origine controllo di prezzo_unitario metti
----------
=LeggiPrezzo([Componente])
----------
se invece vuoi memorizzare il prezzo in tabella non serve la funzione, va
bene il tuo codice così com'è, solo cheio  lo eseguirei dall'evento dopo
aggiornamento di Componente.
Ciao Giorgio

 wrote in message 
news:425962a5$0$31962$5fc...@news.tiscali.it...

Grazie Giorgi oadesso ho usato una tabella per registrare le info.
Ultima chicca è per il "refresh"
Cioè come ti dicevo c'e' un form principale dove ho l'articolo e
Forms![Distinta_base_Header]!Data_validita_listino
Come posso fare che al variare di quest'ultima mi si aggiornano tutti i 
records del sub-form e piu' precisamente il suo campo data (ho riportato 
sulla tabella del sunform un campo data e un campo prezzo)
 Me!data_validita = dteData_validita
Questa istruzione l'ho messa nel codice che mi va a prendere il 
prezzo_unitario; quindi con il "refresh" oltre che a portare l'aggiornamento 
dei campi data servirebbe anche il refresh del prezzo
ciao 


Ciao Claudio,
dipende da come e quando vuoi aggiornare i prezzi,
ad ogni cambio data della maschera principale e solo per il prodotto
selezionato ?
ad ogni cambio codice della maschera principale ?
valuta la possibilità di farlo con una query di aggiornamento, poi fai il
requery della sottomaschera.
Ciao Giorgio

 wrote in message 
news:425b82df$0$8089$5fc...@news.tiscali.it...

Ciao Giorgio
Ma la dritta che mi hai dato con la DLOOKUP va bene
l'ho sistemata che mi prende il valore di esatta competenza in funzione 
dell'articolo e della data
L'unico problema è che :
1)ho inserito nella tabella legata al subform il campo data e il campo 
valore
2)per non stare a scrivere a manina per ogni record del subform la data di 
validita' articolo ho cercato di fare in modo che al variare della data nel 
form principale questa mi cambiasse il campo data di TUTTI i record presenti 
nel subform pero' mi aggiorna solo il primo (credo quello attivo)
Private Sub calend_sped_Click()
     Form!Distinta_Base_Componente!Data_validita = Data_validita_listino
End Sub
Se si potesse fare in modo ch emi aggiorna tutti i record in un solo click 
sono a cavallo
Alternativa fare un UPDATE che tramite la variabile key codice_articolo mi 
aggiorna la data
Ho provato ma cannoin pieno la sintassi per eseguire l'istruzione sql 
(tenendo conto dell'articolo come campo nella where e la data nel set...)
ciao 

sono a cavallo
Non č una soluzione molto bella,  in ambiente di rete rallenta molto.
Comunque prova cosě
-------------
Private Sub calend_sped_Click()
    Form!Distinta_Base_Componente.Recordset.Movefirst
    While Not Form!Distinta_Base_Componente.Recordset.EOF
          Form!Distinta_Base_Componente!Data_validita =
Data_validita_listino
          Form!Distinta_Base_Componente.Recordset.Movenext
    Wend
End Sub
---------------
Ciao Giorgio

 wrote in message 
news:425c4f02$0$22807$5fc...@news.tiscali.it...

Il campo Data_validita_listino  lo valorizzo con un bottoncino che mi fa
aprire un calendario
*********************************************
                       Private Sub calend_sped_Click()
                                Data_validita_listino =
bafCalendar(Data_validita_listino)
                      End Sub
*********************************************
 e selezione il giorno (oppure scrivo a mano la data)
Poi ho messo l'evento after update del campo Data_validita_listino
***************************************************************
Private Sub Data_validita_listino_AfterUpdate()
   Form!Distinta_Base_Componente.Recordset.MoveFirst
    While Not Form!Distinta_Base_Componente.Recordset.EOF
       Form!Distinta_Base_Componente!Data_validita = Data_validita_listino
        Form!Distinta_Base_Componente.Recordset.MoveNext
    Wend
End Sub
************************************************************
Ma ottengo il seguente errore
Run-Time error '438'
Object doesn't support this property or method
il debug
me segnala l'errore di prima su questa istruzione
          Form!Distinta_Base_Componente.Recordset.MoveFirst
Ciao


Può essere :-)
ho buttato giù il codice non sapendo bene cosa fosse
*Distinta_Base_Componente*
se [Distinta_Base_Componente] è il nome dell'oggietto che contiene la
sottomaschera prova così
------------
Form!Distinta_Base_Componente.Form.Recordset.MoveFirst
------------
Ciao Giorgio

"giorgio rancati"
Bene Giorgio: il fatto che tu posti a quest'ora significa che non te ne
frega nulla del calcio in TV (Juventus stasera).
Un punto in più per te!     :-))
Ciao.


Perfetto
se mi consenti la battuta, spero non troppo blasfema visto il periodo
"... avemus Papa ..."
grazie 1000


;-)
Buona serata
Giorgio

 ha scritto nel messaggio
news:1ff7e.44427$IN.7...@twister2.libero.it...

LOL :-)
Ecco perchè c'è poco movimento negli Ng.
ps. guardo solo l'Italia ai mondiali o agli europei
Buona serata
Giorgio

Scusa la rottura Giorgio
Pensavo di aver finito con sta form, ma ho ancora un prob.
Qui sotto ti invio il codice che ho legato al cambio del campo qta e 
funziona e va bene che resti
Pero' vorrei far eseguire il calcolo del totale anche al famoso cambio data, 
ho provato a metterlo nel sub form al cambio di dati, refresh vari ma niente
grazie ciao
Private Sub Qta_AfterUpdate()
Dim strFiltro As String
Dim dteData_validita As Date
Dim dteData_Listino As Date
    (Queste 2 righe possiamo eliminarle con il fatto che adesso 
l'aggiornamento funziona)
 dteData_validita = 
Format(Forms![Distinta_Base_Header]!Data_validita_listino, "yyyy/mm/dd")
 Me!data_validita = dteData_validita
  dteData_Listino = DMax("[data_validita]", "Listino_acquisti", _
    "[data_validita] <= #" & Format(dteData_validita, "yyyy/mm/dd") & "#" & 
" AND
     [Codice_Articolo] = '" & Me!Componente & "'")
  dteData_Listino = Format(dteData_Listino, "yyyy/mm/dd")
  strFiltro = "[Codice_Articolo] = '" & Me!Componente & "'" & " AND 
[data_validita] = #" &
                  Format(dteData_Listino, "yyyy/mm/dd") & "#" & ""
 Me!Prezzo_Vendita = DLookup("[Prezzo_Vendita]", "listino_acquisti", 
strFiltro)
 Me!Totale = Me!Qta * Me!Prezzo_Vendita
  Me.Refresh
End Sub 

 ha scritto nel messaggio
news:vvg7e.63706$zZ1.1...@twister1.libero.it...

Ciao Claudio,
ricordi la sub per aggiornare la data ?
modificala così
-----------
Private Sub calend_sped_Click()
    Form!Distinta_Base_Componente.SetFocus
    Form!Distinta_Base_Componente!Qta.SetFocus
    Form!Distinta_Base_Componente.Recordset.Movefirst
    While Not Form!Distinta_Base_Componente.Recordset.EOF
          Form!Distinta_Base_Componente!Data_validita =Data_validita_listino
Form!Distinta_Base_Componente!Qta.Text=Form!Distinta_Base_Componente!Qta.Val
ue
          Form!Distinta_Base_Componente.Recordset.Movenext
    Wend
End Sub
----------
La modifica della proprietà Text di un controllo scatena l'evento
AfterUpdate()
Ciao Giorgio