Newsgroup: it.comp.appl.access
Titolo: Filosofia di approccio.

Salve a tutti.
Ho un problema che non capisco se sia tale per un approccio non
corretto. Sono un novizio che sta tentando di sviluppare un applicativo
con Access2002:
ho 1 maschera che deve essere riempita a seconda di una scelta da farsi
in una maschera terza, io vorrei:
-Click sulla maschera terza
-si scatena l'Evento
-recupero la chiave (non so' come) dell item scelto
-faccio una query con la chiave rilevata e riempo i campi della maschera
1 con il risultato ottenuto, tutto tramite codice VBA.
La domanda e': sto' ragionando correttamente o complico le cose?, il mio
e' un approccio mutuato dalla programmazione ad eventi per Motif, ma
forse non e' la piu' indicata...
Grazie
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 forse non e' la piu' indicata...
Può essere corretto, ma puoi evitare di usare la QUERY in questo caso.
Utilizzando la proprietà di DOCMD.OPENFORM :
DoCmd.OpenForm nomemaschera, , , "[IdCampo]=" me.ControlloItem
Questa soluzione non è sempre la più valida, ma in questo caso potrebbe
esserlo....!
Alessandro.


 wrote in message
news:2e4487efcd6809323b...@mygate.mailgate.org...

Grazie per l'aiuto, ma temo di non essermi spiegato bene, 
il mio problema non e' recuperare un item esistente, 
ma crearne uno nuovo con alcuni campi preimpostati dalla 
scelta fatta sulla maschera terza.
io ho una maschera che prevede i dati <a, b, c, d>, apro 
una maschera riepilogativa con duple <a, b>. Quello che 
vorrei e' che la dupla selezionata mi venga inserita 
nella maschera chiamante.
La logica che vorrei usare una volta aperta la maschera riepilogativa:
Evento Click:
- recset = recordSet selezionato da lista
- formChiamante.nome = recset.nome
- formChiamante.numero = recset.numero.
Sara' sicuramente una sciocchezza ma non so' come esplicitare il cmd:
recset = recordSet selezionato da lista
Grazie


 wrote in message

Grazie per l'aiuto, ma temo di non essermi spiegato bene, 
il mio problema non e' recuperare un item esistente, 
ma crearne uno nuovo con alcuni campi preimpostati dalla 
scelta fatta sulla maschera terza.
io ho una maschera che prevede i dati <a, b, c, d>, apro 
una maschera riepilogativa con duple <a, b>. Quello che 
vorrei e' che la dupla selezionata mi venga inserita 
nella maschera chiamante.
La logica che vorrei usare una volta aperta la maschera riepilogativa:
Evento Click:
- recset = recordSet selezionato da lista
- formChiamante.nome = recset.nome
- formChiamante.numero = recset.numero.
Sara' sicuramente una sciocchezza ma non so' come esplicitare il cmd:
recset = recordSet selezionato da lista
Grazie


 
Giuro che se prima avevo capito male ora proprio non ho capito
nulla....!
Porta pazienza è l'età......!
Prova ad essere più chiaro, con cosa fai le selezioni che criteri usi.
Sembra che usi una ListBox a selezione Multipla dalla spiegazione, ma
sicuramente ho capito male........!!!


Sicuramente sono io che non uso i termini adeguati, riprovo...
Partiamo da quello che vorri fare:
Si tratta di interagire tra 2 tabelle 'ordini' e 'fatture'
Ho inserito un po' di ordini devo emettere una fattura
Essendo alcuni dati della fattura gia presenti nella tabella 'ordini', 
vorrei avere la possibilita' sulla form 'crea fattura' di aprireon un
tasto
una (form? subform?) dalla quale scegliere un ordine ed in base a 
questa scelta impostare nella form fattura tutti i campi presenti 
nell'ordine (che sono la societa', il valore, la divisa di riferimento)
Quello che ho tentato di costruire e' una finestra di dialogo che
contiene
una casella di riepilogo legata alla tabella 'ordini'.
Praticamente cerco di estrarre un sottoinsieme della tabella ordini
ed inserirlo in una nuova occorrenza della tabella fatture
Spero di essermi spiegato un po' meglio.
Ciao e Grazie
Alessandro


 
Si dovrei aver capito....!!
Ti dico come farei io per gestire una situazione simile....!
Poichè la fattura va stampata, non sempre è necessario avere i dati
in una Form, quindi secondo me dovresti crearti una Form non associata
a nessuna Tabella origine, contenente però alcuni controlli che utilizzi
per filtrare i dati in una QUERY che sarà l'origine del Report e/o
Form se necessario:
sostanzialmente hai 2 imposizioni da fare, l'Azienda e l'Ordine.
Scegliendo l'azienda(tra l'elenco Aziende in una Casella Combinata)
la Query viene filtrata e restituisce i soli ordini relativi.
La seconda imposizione(sempre in Casella Combinata con origine dati
la Query e in particolare il campo Ordini) sarà l'ordine che desideri
fatturare.
In questo modo le due Caselle Combinate in cascata filtreranno
solo l'ordine che ne deriva che OVVIAMENTE è unico.
A questo punto puoi o aprire una Form basata sulla QRY, oppure
direttamente il REPORT di stampa in Anteprima......!!
Spero di essermi spiegato bene.
Se hai dubbi ricominciamo passo passo.....!!
Alessandro.
di quest'ultima, nella seconda


Ci sono quasi, ti tedio con un ulteriore domanda:
Adesso sono al punto che apro la Form e ho
un Combo con tutti i Fornitori
Scelgo il fornitore la Combo associata agli ordini contiene tutti gli
ordini legati al fornitore scelto
Dopo la selezione nella seconda combo ho tutti i valori necesari, ma per
riempire i campi successivi devo operare di VBA o posso associare il
valore risultante in maniera piu' semplice?
Quello che mi accingo a fare e':
sull evento AfterUpdate della combo degli ordini vado ad interrogare il
db con una query del tipo:
recordSet1 = SELECT Importo FROM Ordini WHERE IDordine =
ComboNumeroOrdine.Value
e finalmente il campo txt: Valore.Value = recordSet1.Importo.Value.
Mi sembra pero' un po' macchinoso, non e' che mi sto' reinventando
qualcosa di piu' semplice?
Grazie Mille
Alessandro.


 wrote in message
news:3121cf311ab4478a07b...@mygate.mailgate.org...

Hai fatto sicuramente un buon lavoro.....!
Se non vado errato, dipende dal tuo DB, la QUERY che hai come
riferimento
delle 2 Combo è già quello che cerchi, infatti dovrebbe contenere
1 solo record in cui il Campo NumeroOrdine è quellop che devi
recuperare.
Quindi puoi aprire il Recordset così:
set rst=Currentdb.OpenRecordset("NomeQuery")
Valore.Value=rst.Fields("CampoNumeroOrdine")
Oppure usa la Funzione Dlookup(Vedi Help...) io preferisco il
PRECEDENTE.


 Alessandro.
Oppsss!!
ora sono io che non capisco!!
La query che ho usato per arrivare al recordset unico e' direttamente
nelle proprieta' della combo, dove per Row Source ho Select
[ordini].[numero] From [Ordini] WHERE [ordini].[IDfornitore] =
combo.value, ma tu mi dici di usarla nel codice VBA con il nome!!
cosi' facendo servirebbe una funzione che dalla combo risalga al
recordset, ma esiste??


 Alessandro.
Scoperto l'inghippo, hai utilizzato un'istruzione SQL diretta, quindi
come ti dicevo non va bene, a meno che non inserisci anche la colonna
NumeroOrdine nella colonna2 della Combo, ma come dimensione imposti a 0.
In questo modo non la vedi, quindi esteticamente rimane come ora, ma
puoi
leggere la proprietą NumeroOrdine=Me.Combo2.Column(1).
Prova cosģ.....!


 Alessandro.
Grande!!!!
Direi che adesso ci siamo
Ti ringrazio infinitamente per la pazienza che hai avuto.
Ma ancora una domanda, sarebbe stato piu' corretto se avessi costruito
una query esterna, oppure e' una scelta personale?
Alessandro Sciutti


 Alessandro Sciutti
Direi che se il numero di RECORDS fosse elevato una QUERY compliata
e non SQL come hai fatto sarebbe più veloce, ma si parla di oltre 10000
dati.....!!!
Del resto è uguale.....!!
Alessandro.
