Newsgroup: it.comp.appl.access
Titolo: problema refresh/requery

Ciao a tutti!
Come posso aggiornare solo il valore di un campo (o anche del solo
record, o del recordset), ma senza riapplicare un serverFilter?
Ho una maschera che contiene 3 controlli non associati e una
sottomaschera.
Nei controlli inserisco dei valori, applico serverFilter e filtro i
record della sottomaschera (che ha come origine una vista con
raggruppamenti).
Un campo della sottomaschera contiene valori S o N che possono essere
oggetto del filtro ma possono anche venire aggiornati con un bottone
S/N (che con una execute ado chiama una sp e aggiorna il valore del
campo).
Ora...
- filtro x vedere solo i valori N
- clicco sul bottone che lo trasforma in S
- devo comunque fare in modo di visualizzarlo con la sua S fino a
quando esco, riapro la maschera o riapplico il filtro.
Se sul bottone S/N faccio refresh o requery sulla sottomaschera mi fa
sparire il record (perchè riapplica il serverFilter = N), se faccio
me.nomeControllo.requery non aggiorna.
Sperando di essermi spiegata... Dove mi perdo?
Ciao e buona serata!!!
Manuela

 ha scritto nel messaggio 
news:1142959457.5...@t31g2000cwb.googlegroups.com...





[risposta]
Per aggiornare controlli non associati puoi utilizzare il Repaint della 
form...
Ciao.
-- 
Sergio MAZZA 

ciao sergio,
ti ringrazio molto per la pronta risposta, ma non mi sono spiegata...
ho una combo non associata, valori: S o N.
Scelgo N e clicco sul bottone Filtra che mi applica un serverFilter
sulla sottomaschera, che è una maschera continua e mi mostrerà tutti
i record che hanno come valore N in quel campo. Es:
id        dataDocumento    numeroDocumento   docAgg
xxx     gg/mm/aaa           xxx                         N
[BottoneN]   [BottoneS]
Adesso clicco un bottoneS della sottomaschera che per il record numero
3570 aggiorna il valore del campo docAgg a S.
Il mio problema è far rimanere lì visibile il record numero 3570
(nonostante il serverFilter), fargli visualizzare il valore di docAgg
aggiornato ad S, e lasciarlo visibile fino a quando non chiudo la
maschera. Se faccio requery non lo vedo più, perchè il valore del
campo docAgg non è più N e non soddisfa il serverFilter.
Spero di essermi spiegata, spesso non è facile...
Ciao!
manuela

 ha scritto nel messaggio 
news:1142966727.4...@z34g2000cwc.googlegroups.com...




Ciao!
manuela
[risposta]
Spero di aver capito.
Per prima cosa (se non l'hai fatto) dovresti inserire nell'evento "su clic" 
dei bottoni [BottoneN] e [BottoneS] il refresh della modifica del controllo 
[docAgg]:
Me.Refresh
Ora, se filtri la sottomaschera per [docAgg] = "N", poi premi [BottoneS] e 
[docAgg] viene aggiornato a "S".
Se fai un requery della sottomaschera, questa viene ri-filtrata per [docAgg] 
= "N"; se non lo fai il record rimane li.
Quindi bisogna vedere il codice che hai nei bottoni [BottoneS]/[BottoneN]...
Ciao.
-- 
Sergio MAZZA 

Ancora grazie, hai capito perfettamente. In effetti il problema sta nel
giusto modo di aggiornare solo quel controllo sul click del bottone.
Il codice che ho nei bottoni è questo:
Private Sub PagProvv(sino As String)
Dim Cmd As ADODB.Command
Set Cmd = New ADODB.Command
Cmd.CommandTimeout = 600
Cmd.CommandType = adCmdStoredProc
Cmd.CommandText = "spPagProvv"
Cmd.Parameters.Append Cmd.CreateParameter("@PagProvv", adChar,
adParamInput, 1)
...(appendo tutti i parametri)...
Cmd.ActiveConnection = Application.CurrentProject.Connection
        Cmd.Parameters("@PagProvv") = sino
        Cmd.Parameters("@CodiceCli") =
Form_fsubSituazProvvigioni.Codice
        ... (valorizzo tutti i parametri)...
        Cmd.Execute
Set Cmd = Nothing
Pag_Provv:  Me.Refresh
End Sub
Il problema è che anche facendo il refresh del campo in questo modo
(sintassi che non conoscevo, grazie! io cercavo di fare
Me.Pag_Provv.Refresh ma non gli piaceva) il record sparisce
all'istante!
Credo non cambi nulla, ma aggiungo che è un adp su msde.
Ciao, Manuela

 ha scritto nel messaggio 
news:1143021352.5...@t31g2000cwb.googlegroups.com...





Set Cmd = Nothing
Pag_Provv:  Me.Refresh
End Sub

Ciao, Manuela
[risposta]
Scusa ma nel bottone c'è tutto quel codice per impostare un valore in una 
casella di testo?
Non utilizzo progetti adp e msde ma se facevi un:
(bottone si)
Me!docAgg = "si" '<-- o -1 a secondo se l'hai impostato booelano
Me.Refresh
(bottone no)
Me!docAgg = "no" '<-- o 0 a secondo se l'hai impostato booelano
Me.Refresh
non funziona?
Ciao.
-- 
Sergio MAZZA 

Eh, magari!
Il recordsource della sottomaschera e una vista con join e GroupBy (se
serve la posto), e immagino che sia per questa ragione che in qualunque
altro modo (compreso quello che tu suggerisci) mi dice che il recordset
non è aggiornabile...
ciao, Manuela

 ha scritto nel messaggio 
news:1143026406.4...@z34g2000cwc.googlegroups.com...

ciao, Manuela
[risposta]
?!
Quindi non hai risolto?
Ciao.
-- 
Sergio MAZZA 

No... :o(
ciao, Manuela

 ciao, Manuela
[risposta]
Allora ti consiglio di inviare un nuovo messaggio, magari lo stesso 
indicando anche il mio suggerimento e il risultato negativo.
M'arendo...
Ciao.
-- 
Sergio MAZZA 

Accidenti... sei una delle persone che stimo di più in questo ng, se
ti arrendi tu non sono molto ottimista! :o)
Grazie comunque, farò come suggerisci.
Manuela

Ciao ng... rieccomi! Riposto il problema a distanza di un giorno come
mi è stato suggerito (leggere per credere! ;o) ).
Come posso aggiornare solo il valore di un campo (o anche del solo
record, o del recordset), ma senza riapplicare un serverFilter?
Ho una maschera che contiene una combo non associata, valori: S o N, un
bottone filtra e una sottomaschera.
Scelgo N e clicco sul bottone Filtra che mi applica un serverFilter
sulla sottomaschera, è una maschera continua e mi mostrerà tutti i
record che hanno come valore N in quel campo. Es:
id     dataDoc      numDoc docAgg
xxx  gg/mm/aaa  xxx        N        [BottoneN]   [BottoneS]
Adesso clicco un bottoneS della sottomaschera che per il record numero
3570 aggiorna il valore del campo docAgg a S. Il bottone assegna il
valore S con il metodo execute chiamando una sp, non può semplicemente
assegnare un valore con
Me.docAgg = "S"
Me.Refresh
come suggeriva Sergio Mazza (che ringrazio moltissimo!) perchè il
recordsource della sottomaschera è una vista con GroupBy e join (adp
su msde, ulteriori info nel post con stesso oggetto di ieri, 21-03, se
ci fosse un modo più semplice di quello che uso parliamone!).
Il mio problema è far rimanere lì visibile il record numero 3570
(nonostante il serverFilter), fargli visualizzare il valore di docAgg
aggiornato ad S, e lasciarlo visibile fino a quando non chiudo la
maschera. Se faccio requery/refresh (anche solo sul controllo con
docAgg:  Me.Refresh) non vedo più quel record, perchè il valore del
campo docAgg non è più N e non soddisfa il serverFilter.
Spero di essermi spiegata, spesso non è facile...
Ringrazio chiunque mi voglia dare un'indicazione...
Ciao! Manuela

Ciao ng... rieccomi! Riposto il problema a distanza di un giorno come
mi è stato suggerito (leggere per credere! ;o) ).
Come posso aggiornare solo il valore di un campo (o anche del solo
record, o del recordset), ma senza riapplicare un serverFilter?
Ho una maschera che contiene una combo non associata, valori: S o N, un
bottone filtra e una sottomaschera.
Scelgo N e clicco sul bottone Filtra che mi applica un serverFilter
sulla sottomaschera, è una maschera continua e mi mostrerà tutti i
record che hanno come valore N in quel campo. Es:
id     dataDoc      numDoc docAgg
xxx  gg/mm/aaa  xxx        N        [BottoneN]   [BottoneS]
Adesso clicco un bottoneS della sottomaschera che per il record numero
3570 aggiorna il valore del campo docAgg a S. Il bottone assegna il
valore S con il metodo execute chiamando una sp, non può semplicemente
assegnare un valore con
Me.docAgg = "S"
Me.Refresh
come suggeriva Sergio Mazza (che ringrazio moltissimo!) perchè il
recordsource della sottomaschera è una vista con GroupBy e join (adp
su msde, ulteriori info nel post con oggetto "problema refresh/requery"


 ha scritto nel messaggio 
news:1143042125....@e56g2000cwe.googlegroups.com...






Il filtro fa il suo lavoro....
hai pensato dopo l'aggiornamento di levarlo e di riposizionarti
sul record che hai appena modificato usando RecordestClone e FindFirst?
una cosa tipo
        Forms!frmTua!.Form.RecordsetClone.FindFirst "IDRecord = " & 
intIDOldRecord
Chiaramente non hai più il filtro
Alterntiva è sfruttare un'altro campo per filtrare i record.
Morgan


 ha scritto nel messaggio news:1143040144.8...@t31g2000cwb.googlegroups.com...
Accidenti... sei una delle persone che stimo di più in questo ng, se
ti arrendi tu non sono molto ottimista! :o)
[risposta]
Che modo gentile di farmi sentire un verme!
Grazie comunque, farò come suggerisci.
Manuela
[risposta]
Avrai maggior visibilità...
Ciao.
-- 
Sergio MAZZA 

 Morgan
Ciao Morgan, e grazie per avermi risposto!
Non posso levare il filtro perchè non voglio vedere anche tutti i campi S,
voglio vedere solo i campi N più quelli che sono diventati S in questa
sessione di lavoro.
Però un'idea me l'hai data... pensi che sia possibile ottenere il risultato
che voglio clonando il recordset prima di applicare la modifica e poi
facendo requery su quel recordset? (nell'improbabile caso che si, mi daresti
anche un'idea molto vaga di come?)
Ciao!
manuela

 ha scritto nel messaggio 
news:1143041775.0...@i40g2000cwc.googlegroups.com...





[risposta]
Manuela; non so' perché ma con lo stesso oggetto questo messaggio si è 
accodato al tuo primo vecchio. Almeno io lo vedo così.
Modifica l'oggetto (magari inserendoci un [re-post]) e re invialo...
Ciao.
-- 
Sergio MAZZA 


???
Scusa, volevo dire il contrario! Ho letto molte tue risposte davvero
interessanti, sei uno dei guru del ng, e se tu non trovi una risposta mi
demoralizza un po'... (pensavo che fosse una sciocchezza per voi il mio
problema!)
grazie ancora, manuela
PS: in efetti l'altro messaggio s'era accodato perchè aveva lo stesso
subject, google groups mi fa vedere anche il nuovo 3D ("[rifo] problema
refresh/requery") accodato a questo, fortuna che ho aperto Outlook Exp prima
di ripostare un'altra volta!!! :o)

 di ripostare un'altra volta!!! :o)
Speriamo di arrivare ad Itaca...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:44227a1d$0$29114$5fc...@news.tiscali.it...

Non saprei.Cmq dato che da quello che ho capito hai la necessità di lavorare
su un set di record ,perchè non provi
a) a cambiare il campo che usi per il filtro
b)ti crei una tblTemporanea per alimentare la sottomaschera dove fai tutti i 
giochetti che vuoi e poi aggiorni la tbl vera?
non è più semplice?
Morgan 

 manuela
(M'appiccico qui) Con la proprietà Filter del recordset puoi ottenerne 
un'altro recordset filtrato:
es.
...
rstTemp.Filter = "Nome = 'Sergio'"
Set FilterField = rstTemp


 ...
non la conoscevo, provo a documentarmi per capire meglio come usarla in
questo caso...
ti ringrazio moltissimo,
manuela


Ciao!
Il campo che uso per il filtro non può essere cambiato (filtra anche su
altri campi per la verità, ma quello è il più importante), avevo provato a
crearmi una tbl temporanea dove scrivere i dati prima di aggiornarli nella
tabella vera, lo facevo nella sp che chiamavo con lo stesso metodo con cui
poi invece ho usato l'update, ma diceva che il recordset non era
aggiornabile (non ho capito il motivo).
Forse dovrei usare la tbl temporanea in modo diverso?
Grazie!
Ciao, manuela

 Speriamo di arrivare ad Itaca...
Penso aver capito la direzione: devo seguire le indicazioni recordset in
tutte le sue angolazioni...
Ciao e grazie ancora, Manuela

 Ciao e grazie ancora, Manuela
Buon lavoro...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA

 Set FilterField = rstTemp
forse quello che cerco è il metodo resync.
Domanda... come faccio dal bottone a riferirmi al recordset che access s'è
creato?
Se non sbaglio access per visualizzare i dati sulle maschere si apre un
recordset e lo associa alla form... c'è un modo per accedere via codice al
recordset che si è aperto? (io devo aggiornare quello, non posso aprirmene
uno nuovo...)
Grazie ancora, manuela

 Grazie ancora, manuela
Me.RecordSetClone; se in adp funzia...
Ciao.
-- 
Sergio MAZZA 


funzia, ma se faccio:
Dim rst as Recordset
Set rst = Me.RecordsetClone
rst.Resync 'così non gli piace il metodo resync e non mi fa compilare
Se faccio direttamente:
Me.Recordset.Resync
così compila ma poi se provo a cliccare sul bottone mi dà un errore strano:
le informazioni sulla colonna chiave non solo sufficienti per effettuare
l'aggiornamento.
non si capisce mai se la soluzione è dietro l'angolo o lontana anni luce...
ciao! manuela

 ciao! manuela
Come hai impostato CursorType e LockType?
Ciao.
-- 
Sergio MAZZA 

 Come hai impostato CursorType e LockType?
non l'ho impostato, non so come access si comporta... ho pensato che non
dovevo aprirne uno nuovo, ma riferirmi a quello che access s'era già aperto
per visualizzare i dati...
Sono su una sottomaschera filtrata, il recordset dovrebbe averlo già access
memorizzato in qc modo, no?
Grazie per la pazienza!
Manuela

 Manuela
Forse il suggerimento di Morgan, di salvare gli id della sottomaschera 
magari dopo aver applicato il filtro della casella combinata, ti 
permetterebbe di "ripristinare" il recordset con una istruzione del tipo: 
Select * From ... Where id In (Select id From tabTemporanea)...
Ciao.
-- 
Sergio MAZZA