Newsgroup: it.comp.appl.access
Titolo: Apri maschera con parametri

Mi scuso innanzitutto per il 'pasticcio' successo con i messaggi "6 un mito!"
(nel caso avessero dato fastidio a qualcuno).
Sono alla prese con l'apertura della maschera DettagliOrdini  che
deve avvenire tramite la pressione di un pulsante della maschera Ordini.
Le tabelle associate alle due maschere sono così collegate:
    tblOrdini:                              tblDettagliOrdini:
    IDOrdine (key)  1------oo    IDOrdine (key )
                                                 IDProdotto(key)
    IDCliente           ----------    IDCliente (mi serve x sel. i prodotti)
L'apertura deve avvenire tramite un pulsante, quindi:
....
DoCmd.OpenForm stDocName, , , stLinkCriteria
su OnClick del pulsante.
Grazie a
stLinkCriteria = "[IDOrdine]=" & Me![IDOrdine] & "And [IDCliente]=" & Me![IDCliente]
riesco a visualizzare i records di tblDettagliProdotti
che mi interessano.....se sono già inseriti!
Infatti il problema nasce quando non ho corrispondenze
per questi parametri e quindi, nel tentativo di inserire il primo prodotto,
non ho un errore, giustamente visto che manca l'associazione
tra i campi IDOrdine e IDCliente delle due maschere,
e quindi la maschera DettagliOrdini ha
IDOrdine = 0 e IDCliente = 0.
Come posso fare per inizializzare questi due
valori con i valori passati tramite stLinkCriteria?
Oppure come posso creare delle associazioni?
Grazie anticipatamente a chiunque sa darmi qualche consiglio!
Leo
P.S.: ho già provato a passare i due valori con OpenArgs
        per associarli poi a IDOrdine e IDCliente ma non funziona!

 ha scritto nel messaggio
news:3b262...@news.dada.it...

Con una funzione DLookup (vedi help) vai a verificare se nella tabella
tblDettagliOrdini esistono record che soddisfano tali criteri; esegui la
DoCmd.OpenForm solo se la DLookup ti dà esito positivo, ovvero se ti
restituisce un valore diverso da Null.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:JKQV6.3131$7S1.1...@news.infostrada.it...

Grazie :)
Ora però mi rimane il problema di inserire un elemento
per la prima volta! Anche se apro la maschera in acFormAdd
non ci riesco perché comunque mancano i collegamenti
tra i campi delle due maschere e non posso assegnare
direttamente il valore agli indici!
Grazie di nuovo
        Leo

 ha scritto nel messaggio
news:3b286...@news.dada.it...

Calma e sangue freddo.
Un conto è visualizzare i dati di due tabelle in relazione uno-a-molti ed un
conto fare l'aggiornamento delle due tabelle.
Nel primo caso i record già esistono ed il problema da risolvere è quello di
sinronizzare le due maschere che hanno come origine record le due tabelle.
Per risolvere il problema dell'aggiornamento delle due tabelle è innegabile
che è bene che usi la tecnica della maschera/sotomaschera; non farlo è
crearsi una marea di inutili complicanze.
Se poi sei un masochista alla ricerca di inutili mal di pancia, prima di
inserire un record nella tabella sul lato molti, salva il relativo record
sulla tabella del lato uno.
Comunque ti sconsiglio vivamente di adottare una tecnica del genere; anzi ti
suggerisco di usare la tecnica maschera/sottomaschera anche per la sola
visualizzazione dei dati.



Sono d'accordo con te sul fatto di adottare una struttura
maschera-sottomaschera dato che le tabelle sono
in relazione 1 a molti (infatti così ho fatto nella prima
versione del mio programmino), ma i capi chiedono
di poter visualizzare tutta la lista degli ordini (maschere continue)
e per ognuno di questi un pulsante che mi apre una maschera
dove posso inserire/modificare i prodotti.
Ti chiedo una cortesia: ho riproposto questo stesso problema
nel thread "Maschere collegate. Help me, please :_((".
Qui, anche in risposta all'aiuto di Vincenzo, ho spiegato il
mio problema in modo (forse) un po' + chiaro.
Se ci dai un occhiata e mi dai qualche dritta (magari anche
un deciso continua ad usare "usa maschera-sottomaschera")
mi fai un enorme favore (sono 3 gg 3 che ci perdo la testa)!
Grazie
    Leo

     Leo
Ho visto che nell'altro thread hai avuto una soluzione al tuo problema anche
da Sergio Mazza, che spero tu abbia valutato e cercato di attuare.
Comunque vediamo di riepilogare cosa ti serve e cosa devi fare.
Diamo per scontato che le strutture delle due tabelle siano quelle da te
indicate e che le due tabelle siano in relazione uno-a-molti in base ai
campi IDOrdine.
Per essere pignolo non ho capito a cosa ti serve IDCliente nella
tblDettagliOrdini; quando ti serve puoi sempre ricavartelo dall'altra
tabella, visto che un ordine può appartenere ad un solo cliente.
Creati una maschera (chiamala MaskOrdini) con visualizzazione a Maschere
continue e che abbia come origine record tblOrdini.
In MaskOrdini inserisci anche un pulsante di comando.
Ipotizziamo che i controlli di MaskOrdini associati ai campi IDOrdine e
IDCliente di tblOrdini abbiano lo stesso nome dei relativi campi.
Creati una seconda maschera (chiamala MaskDetOrd) con visualizzazione a
Maschere continue e che abbia come origine record la tabella
tblDettaglioOrdini.
Ipotizziamo che i controlli di MaskDetOrd associati ai campi IDOrdine e
IDCliente di tblDettagliOrdini abbiano lo stesso nome dei relativi campi.
Diamoci come regola che la maschera MaskDetOrd possa essere aperta SOLAMENTE
pigiando il pulsante di comando che hai inserito in MaskOrdini, quindi
mentre questa maschera è già aperta.
Nella proprietà Valore predefinito del controllo IDOrdine della maschera
MaskDetOrd scrivi:
=[Forms]![MaskOrdini]![IDOrdine]
Nella proprietà Valore predefinito del controllo IDCliente della maschera
MaskDetOrd scrivi:
=[Forms]![MaskOrdini]![IDCliente]
Per questi due controlli di MaskDetOrd setta la proprietà Abilitato a No e
la proprietà Bloccato a Si.
A fronte dell'evento "Su clic" del pulsante di comando inserito in MakOrdini
genera il seguente codice VBA:
'Salva il record corrente di MaskOrdini
DoCmd.RunCommand acCmdSaveRecord
'Apri MakDetOrdini filtrandola con l'ordine corrente
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "MaskDetOrd"
stLinkCriteria = "[IDOrdine]=" & Me![IDOrdine]
DoCmd.OpenForm stDocName, , , stLinkCriteria
Dai criteri di filtro di MaskDetOrd ho tolto IDCliente in quanto inutile,
visto che un ordine può appartenere ad un solo cliente.
Ora apri MaskOrdini; pigiando il pulsante di comando dell'ordine su cui vuoi
lavorare, ti si aprirà MaskDetOrdini visualizzandoli (se ci sono) i record
di tblDettaglioOrdini relativi a quell'ordine. Naturalmente potrai a questo
punto aggiornare o cancellare i record visualizzati oppure inserirne di
nuovi.
Se invece non esistono già record per quell'ordine in tblDettaglioOrdini,
MaskDetOrd si aprirà vuota, pronta per inserire nuovi record.
Spero che era quello che volevi fare.


 ha scritto nel messaggio
news:p%6W6.469$T52....@news.infostrada.it...

:))))))) quando ho cominciato con Access (poco + di un mese fa)
non sapevo ancora che si poteva fare o meglio non sapevo come
si poteva fare, e quindi me lo portavo sempre dietro!!!.... ora l'ho tolto!:)

Esattamente questo era il problema!
Solo che anche in questo modo
(a meno che non abbia commesso errori
nella costruzione di maschere e/o tabelle)
quando mi posiziono nella casella di
inserimento nuovo prodotto mi da:
IDOrdine =  #Nome?
Ad ogni modo, ragionando anche sul fatto di
cercare di usare una struttura maschera-sottomaschera,
ho risolto aprendo,
anziché una maschera associata a DettagliOrdini
e filtrata con IDOrdine,
ma una maschera associata a OrdiniClienti
e filtrata con IDOrdine... con una sottomaschera
associata a DettagliOrdini e il campo IDOrdine
collegato a quello della prima!
In questo modo tutto funziona regolarmente :)
Ringrazio te e gli amici che mi hanno aiutato
nel thread "Maschere collegate. Help me, please :_(("
.... e spero di lasciarvi in pace per un bel pò :))))))
Grazie ancora
Leo_duca