Newsgroup: it.comp.appl.access
Titolo: Ricerca real time per vari usi e aggiornamento nominativi

Continuo il post delle 15.11.
Nella applicazione che voglio realizzare, la ricerca real time voglio 
utilizzarla sia per fare una ricerca sui nominativi dei clienti per stampare 
dei documenti, sia per la modifica e l'aggiornamento dell'anagrafica di 
questi clienti.
Per la ricerca clienti e per passare i dati ai documenti da stampare ho le 
idee abbastanza chiare e non dovrei avere grossi problemi, ho qualche dubbio 
per quanto riguarda l'aggiornamento dell'anagrafica dei nominativi.
Allora, ho una casella di testo dove inserisco il nominativo e una casella 
di riepilogo dove vedo i risultati. Seleziono il risultato e con la 
pressione di un pulsante "Comando8" e con la routine sotto prendo i valori 
che mi interessano e li metto in altre caselle di testo o in variabili 
stringa e tutto funziona. Ho pensato che mettendo una serie di caselle di 
testo posso riempirle con i dati del nominativo selezionato in automatico 
pigiando il pulsante, modificare nelle caselle di testo i dati che voglio 
cambiare e tramite un'altro pulsante aggiornare il la tabella che contiene i 
nominativi.
Penso che per le caselle di testo devo impostare i campi della tabella come 
origine del controllo, giusto?
Una volta modificati i valori nelle caselle di testo, come faccio a prendere 
tutti i valori dell'insieme delle caselle di testo e ad aggiornare il 
database esattamente nella riga che mi interessa? Che tipo di routine devo 
scrivere per il pulsante "Aggiorna dati" ?
Grazie a tutti per le risposte.
Private Sub Comando8_Enter()
    Dim varItem As Variant
    Dim st1 As String
    Dim st2 As String
    For Each varItem In Me!ElencoNominativi.ItemsSelected
        txtSel.Value = Me!ElencoNominativi.Column(0, varItem)
        txtSel2.Value = Me!ElencoNominativi.Column(1, varItem)
        st1 = Me!ElencoNominativi.Column(0, varItem)
        st2 = Me!ElencoNominativi.Column(1, varItem)
    Next varItem
 End Sub
Private Sub txtRicerca_Change()
Dim strR As String
Dim strSQL As String
strR = Me!txtRicerca.Text
If Not IsNull(Me!txtRicerca.Text) Then
    strSQL = "SELECT ID, Nominativi " & _
    "FROM [Archivio nominativi] " & _
    "WHERE (Nominativi Like " & Chr$(34) & _
    strR & "*" & Chr$(34) & ");"
    Me!ElencoNominativi.RowSource = strSQL
    If "" & Me!txtRicerca.Text = "" Then
    Me!ElencoNominativi.RowSource = ""
    End If
    Me!ElencoNominativi.Requery
    Me!txtRicerca = strR
    Me!txtRicerca.SetFocus
    Me!txtRicerca.SelStart = 255
End If
End Sub 

 scrivere per il pulsante "Aggiorna dati" ?
Nulla. Da quanto dici hai un form associato. I dati che scrivi sul form 
vengono "automaticamente" riportati sulla tabella.
Diverso discorso se il form non e' associato. In questo caso avrai 
bisogno di un bottone di "Salva" per aggiornare la tabella.
Un form e' associato quando sulla origine dati c'e' il nome di una 
tabella o di una query e l'origine dei controlli fa riferimento ad un 
campo presente nella origine dati.
I dati sono altresi' modificabili se il form permette modifiche e 
l'origine dati e' una tabella o una query "aggiornabile"
--
a.cara

 l'origine dati e' una tabella o una query "aggiornabile"
Quindi semplicemente impostando la proprietà Origine Record della maschera, 
e la proprietà origine controllo di ogni casella di testo al campo della 
tabella corrispondente, ogni modifica nella form viene automaticamente 
passata sulla tabella? Non ho ancora provato perchè è ora di mangiare 
qualcosa... 

 di mangiare qualcosa...
Ho appena provato ma il risultato è che nelle 2 caselle di testo associate 
alla tabella Archivio Nominativi, innanzitutto di default non rimangono 
vuote ma riportano i valori corrispondenti del primo record della tabella.
In secondo luogo ho fatto una ricerca, ho selezionato il nominativo nella 
casella di riepilogo, ho premuto il pulsante e la casella di testo viene 
aggiornata con il nominativo selezionato, ho sovrascritto la casella di 
testo e ho chiuso la maschera per andare a vedere se la voce nella tabella 
sia stata modificata.
Ho notato nella tabella che qualsiasi nominativo seleziono, viene 
sovrascritto soltanto quello in prima posizione. Intanto provo a risolvere.
Possibili soluzioni ?!
Grazie

 Possibili soluzioni ?!
Cio' che scrivi non mi torna. Se a fronte della selzione sul cbx la 
sottomaschera ti mostra cio' che hai selezionato significa che e' stato 
eseguito correttamente il posizionamento  e quindi la variazione verra' 
effettuata su quel record e non sul primo.
Cmq. Riepilogando
Sul tuo form hai:
1) Casella di testo non associata con attivata routine per evento di 
Change (come da altro 3d). Attenzione qui dovrebbe essere impostata la 
replace poiche' lavori sul cognome che puo' contenere apici.
2) Casella riepilogo che viene popolata/ripopolata dalla routine al 
punto 1. Su questo controllo deve essere attivato l'evento di click che 
imposta il filtro per la sottomaschera
(i.e. nomecontrolllosubform.form.filter = "nomecampo = '" & 
replace(caselladiriepilogo,"'","''") & "'" )
3) Sottomaschera che riporta i dati del nominativo scelto e che va 
"filtrata" in funzione del valore scelto nella casella di riepilogo
--
a.c.

 "filtrata" in funzione del valore scelto nella casella di riepilogo
Allora, sotto ho riportato le 2 routine che ho scritto come da te 
consigliato. Vorrei passare alla sottomaschera il valore dell'ID in modo che 
nella sottomaschera venga fatto il filtraggio con l'ID. Questo per avere 
nella sottomaschera i valori di una sola riga della tabella.
Non mi è molto chiaro come fare a passare il valore alla sottomaschera, non 
so cosa impostare nella sottomaschera, inoltre la Sub ElencoNominativi 
AfterUpdate() da l'errore 2001 "Operazione precedente annullata", penso per 
via del campo ID.
Come potrei risolvere?
Private Sub Form_Open(Cancel As Integer)
Filter = "ID is null"
FilterOn = True
End Sub
Private Sub ElencoNominativi_AfterUpdate()
SMProva.Form.Filter = "ID = '" & Replace(ElencoNominativi, "'", "''") & "'"
End Sub
'ElencoNominativi è il nome della casella di riepilogo

 Come potrei risolvere?
Ho risolto scrivendo le routine che trovate in fondo a questo post.
Tutto funziona correttamente, al mio clic su un nominativo nella casella di 
riepilogo i campi della sottomaschera vengono impostati facendo la ricerca 
corretta.
L'unico bug che ho si verifica quando:
1-clicco su un nominativo nella casella di riepilogo
2-vado a posizionarmi con il cursore nel campo della sottomaschera che 
voglio modificare
3-clicco di nuovo su un nominativo nella casella di riepilogo, in questo 
caso i campi della sottomaschera non vengono aggiornati come dovrebbero
Funziona correttamente invece se riposiziono il cursore nel campo ID della 
sottomaschera.
Ho provato con qualche setfocus ma non sono riuscito a risolvere.
Qualche idea?
Ciao
Private Sub ElencoNominativi_AfterUpdate()
Me!SMProva.SetFocus
Dim Pluto As Integer
Pluto = Me!ElencoNominativi.Column(0)
DoCmd.FindRecord Pluto
End Sub


 'ElencoNominativi è il nome della casella di riepilogo
Es claro ;<)  ed immagino abbia 2 colonne (o 3)
--
a.cara