Newsgroup: it.comp.appl.access
Titolo: Casella Combinata

Salve ragazzi, volevo chiedervi alcune cose sulla casella combinata.
Ho una casella combinata, collegata tramite una quesry ad una tabella.
1) Volevo selezionare, all'interno di una maschera (dove sono presenti una 
casella combinata ed un paio di caselle di testo), una voce della casella e 
automaticamente far aggiornare tutte le altre.... come si fa? o meglio cosa 
devo scrivere nella routine evento "Dopo AGGIORNAMENTO"?
2) Il secono problema che ho è quello di far fare un Aggiornamento alla 
casella combinata....mi spiego meglio ho inserito nella voce DOPPIO CLICK la 
seguente istruzione:
Private Sub Codice_DblClick(Cancel As Integer)
  DoCmd.OpenForm "Prodotti", , , , , acDialog, "GotoNew"
End Sub
Il problema è che quando chiudo la finestra che si apre, la casella 
combinanta non si aggiorna......cosa devo fare??? c'è qualche comando che 
devo inserire e dove???? Grazie mille
 


Ciao, riguardo il primo quesito: immagino che, se tu hai 1 casella
combinata e vuoi aggiornare automaticamente i 2 campi testo, l'origine
della query che usi per la casella combinata ha questi 3 valori, dove
il primo sara' quello che ti popolera' la casella combinata, il
secondo magari la casella di testo1 e il terzo la casella di testo2.
Per farlo, sull'evento "dopo aggiornamento" della casella combinata
scrivi : me.casellatesto1 = me.casellacombinata.column(1) (aggiorna la
prima casella testo) e poi me.casellatesto2 =
me.casellacombinata.column(2). Non e' necessario visualizzare tutti e
3 i campi nell'origine della query della cesella combinata e lo puoi
fare semplicemente mettendo 0 (zero) nella proprieta' Larghezza
colonna della casella combinata per i due campi testo. Se viceversa
non hai tutti i campi all'origine della query (ma solo quello della
casella combinata) facci sapere con cosa vuoi aggiornare le caselle
testo della tua form (altra tabella, altra query).
Riguardo il secondo problema: ogni volta tu aggiorni qualcosa con una
form esterna, in questo caso attivata con un pulsante, al momento che
ritorni sulla form principale devi fare un refresh (o recalc) della
form principale (per lo meno io faccio sempre cosi). Questo lo puoi
fare al momento della chiusura della form che hai usato per inserire
un nuovo record scrivendo :
DoCmd.Close
Forms!tuaformprincipale.casellacombinata.Requery
In questa maniera dovrebbe aggiornare la tua lista nella casella
combinata con i nuovi valori inseriti.
Spero di essere stato chiaro. Buona giornata.

Forms!tuaformprincipale.casellacombinata.Requery
non avro dei problemi quando utilizzo il primo modo? ovvero quando 
all'apertura del DB c'è un menu di scelta che mi dice se inserire i prodotti 
nel DB oppure creare un'ORDINE e io scelgo di inserire i dati direttamente 
nel DB senza passare per la maschera ordine, quando chiudero la maschera 
dell'inserimento non mi darà un ERRORE???
Spero di eesere stato chiaro
Grazie a tutti

 - Show quoted text -
Allora il caso e' diverso certo; se tu inserisci i dati aprendo la
form da una voce di menu (quindi la tua form dove e' presente la
casella combinata non e' aperta) ovvio che ti restituisce errore
perche' non trova Forms!tuaformprincipale.casellacombinata; viceversa,
funziona nel secondo caso. Per ovviare a cio, al momento della
chiusura della maschera dove inserisci i dati che popoleranno la tua
casella combinata, dovresti verificare se la tua form (dove e'
presente la casella combinata) e' aperta oppure no. Per farlo copiati
questa funzione in un modulo (FormName sara' il parametro
corrispondente alla tua form dove e' presente la casella combinata che
gli passerai dopo):
Public Function FormIsOpen(FormName As String) As Boolean
      FormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, FormName)
And _
         acObjStateOpen) <> False
End Function
Poi alla chiusura della maschera di popolamento della tua casella
combinata, scrivi
X = FormIsOpen("FormName")    dove FormName e' appunto la form dove e'
presente la casella combinata.
Se il risultato di X sara' False, allora significa che la tua form
(dove e' presente la casella combinata) non e' aperta e tu stai
inserendo i dati con una voce di menu, se invece e' True significa che
stai inserendo usando il doppio click. Allora bastera' testare la X
cosi :
If X = false then
     Docmd.Close form......
else
     DoCmd.Close
     Forms!tuaformprincipale.casellacombinata.Requery
end if
In questo caso il requery della form lo avrai solo quando questa e'
effettivamente aperta ossia stai inserendo tramite doppio click.
Spero di essere stato chiaro, facci sapere.
Buona giornata