Newsgroup: it.comp.appl.access
Titolo: Filtrare subform da altra subform.

Buongiorno a tutti,
in Form Materiali ho Subform1 Misure (solo misure), Subform2 Colori (solo
colori) e Subform3 DiBa (sia misure che colori).
Materiali è unita a Subform1, Subform2 e Subform3 da IDMateriale (Master e
secondario).
Posso, cliccando su un record Misure o cliccando su uno dei Colori avere
solo i record di DiBa che soddisfano alla misura o al colore selezionati?
Grazie,
NEMO2K
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 NEMO2K
SubForm2 e 3 sono in relazione con SubForm1 entrambe tramite IDMateriale?
Ciao.
-- 
Sergio MAZZA

 Ciao.
Ciao, e grazie per l'attenzione.
La 2 e la 3 non sono in relazione con la 1, per il momento. Sono tutte e
tre in relazione alla form Materiali attraverso il campo IDMateriale. 


 NEMO2K
Dovresti gestire l'evento "su corrente" della subform2, ogni volta che cambi il record scrivi il valore dell'id in una casella di
testo sulla form Materiali.
La subform3 dovrà essere collegata alla casella di testo appena detta...
Ciao.
-- 
Sergio MAZZA

 Ciao.
Riepilogo:
Form Materiali: origine dati Materiali (IDMateriale);
Subform Misure: origine dati Misure (IDMateriale, DescrizioneMisura);
Subform Colori: origine dati COlori (IDMateriale, DescrizioneColore);
Subform DiBa: origine dati DiBa (IDMAteriale, Taglia, Colore, Quantità).
Legami: Materiali (1-n) Misure; Materiali (1-n) Colori; Materiali (1-n)
DiBa.
Obiettiv1: cliccando su recor Misure avere tutti i record DiBa con misura
selezionata; cliccando su recor Colori avere tutti i record DiBa con
colore selezionato; (eventualmente, ma non fondamentale, avere la scelta
composta).
Ho già inserito due controlli (Controllo1, Controllo2) non associati che,
alla scelta del record in una delle due subform Misure, Colori assumono
rispettivamente il valore del record selezionato.
Come rifiltro, a questo punto, la subform DiBa in base al valore dei due
controlli?



Premetto che non so cosa sia la DiBa ma in collega campi secondari/master puoi indicare più campi separandoli da virgola (o punto e
virgola, non ricordo..)...
Ciao.
-- 
Sergio MAZZA

 Ciao.
Ciao, DiBa sta per Distinta Base.
Ho provato il tuo suggerimento ed ho posto come campi Master: IDMateriale,
Controllo1 e Controllo2 mentre come campi secondari ho messo: IDMateriale,
TagliaDiBa e ColoreDiBa. Adesso, (un piccolo passo per l'uomo ma un grande
passo per l'umanità) se scelgo una misura dalla tabella subform Misure ed
un colore dalla subform Colori mi vengono proposti (sempre che esistano)
tutti i record che soddisfano i legami master/secondari.
E' possibile, però, ottenere anche selezioni parziali? Ovvero solo tutti i
record che soddisfano la selezione su misure o solo tutti i record che
soddisfano la selezione su colori? Devo utilizzare routine separate
sull'evento "Dopo aggiornamento" delle due caselle di controllo?
Grazie ancora per la pazienza e l'abnegazione,



Con quel metodo no; se ti serve questo devi filtrare la subform o cambiare i campi collegati/master con VBA...
Ciao.
-- 
Sergio MAZZA

 Ciao.
Buon pomeriggio,
ho provato a settare i due valori:
Me.DistintaBase.LinkChildFields = "IDMateriale;Taglia"
Me.DistintaBase.LinkMasterFields = "IDMateriale;Controllo1"
(all'apertura della maschera sono entrambi con lo stesso valore:
IDMateriale).
sull'evento dopo aggiornamento di Controllo1 ma mi viene restituito
l'errore "E' necessario utilizzare lo stesso numero di campi quando si
impostano le proprietà CollegaCampiSecondari e CollegaCampiMaster".
Mi sembra che abbiano entrambi due campi, o no?
Grazie,


 NEMO2K
Scusate l'aggiunta.
Questo errore dipende forse dal fatto che le proprietà Campi Master e
Campi Secondari si possono (come da HELP) modificare solo in
visualizzazione struttura o all'apertura della form principale? Se così
fosse, non potrei cambiarli con VBA dopo l'aggiornamento di un controllo!
In questo caso, quali altre strade si possono percorrere?
Grazie ancora,
NEMO2k



Ho effettuato delle prove e se cambio "al volo" un solo campo master/secondario funziona (contrariamente a cosa c'è scritto
nell'help), se sono due già impostati e li cambio "al volo" allora mi presenta un errore "run-time 2001 Operazione precedente
annullata" senza nessun help.
L'altra strada è crearsi un filtro e applicarlo al recordset della subform...
Ciao.
-- 
Sergio MAZZA

 Ciao.
Proprio così! Confermo che mi è successa la stessa cosa. Ho cercato nelle
news di microsoft.public.access.forms ed ho scoperto che l'errore "E'
necessario utilizzare lo stesso numero di campi quando si impostano le
proprietà CollegaCampiSecondari e CollegaCampiMaster" si può intercettare
e, pertanto, non visualizzare.
Ho quindi risolto in un altro modo:
2 controlli nascosti nella Form principale: CtrlMisure e CtrlColori;
2 routine sugli eventi Misura_Click e Colore_Click nelle subform Misure e
Colori con il seguente codice (ne posto uno, quello delle Misure; lìquello
dei colori va adattato in modo speculare):
Private Sub Misura_Click()
On Error GoTo error_Section
Forms!Materiali!CtrlMisura = Me!Misura
If Forms!Materiali!CtrlColore = "" Then
  Forms!Materiali!DiBa.LinkChildFields = "IDMateriale;Misura"
  Forms!Materiali!DiBa.LinkMasterFields = "IDMateriale; CtrlMisura"
Else
  Forms!Materiali!DiBa.LinkChildFields = "IDMateriale;Misura;Colore"
  Forms!Materiali!DiBa.LinkMasterFields = "IDMateriale; CtrlMisura;
CtrlColore"
End If
Forms!Materiali!DiBa.Requery
exit_Section:
Exit Sub
error_Section:
If Err = 2335 Then
Resume Next
Else
  MsgBox Err.Description
  Resume Next
End If
End Sub
Non sarà il massimo dell'eleganza, forse è ridondante ma con sole due
subform funge allo scopo.
Ciao,
NEMO2K



Ottimo...
Ciao.
-- 
Sergio MAZZA