Newsgroup: it.comp.appl.access
Titolo: stesso record dopo requery

Ciao,
Ho una maschera con le caratteristiche di prodotti ( di nome Inventario)
ed una sotto maschera in formato foglio dati con i movimenti di magazzino
(ordini, carico,scarico). La maschera principale dipende da una query che
calcola quanto prodotto mi serve etc...
Il problema č questo:
Per aggiornare la maschera principale ho inserito nelle caselle (ordini,
carico e scarico) dopo aggiornamento il codice Forms![inventario].Requery.
La maschera Inventario viene aggiornata ma non mi mostr piů il record che
ho aggiornato ma il primo record del database. Come si fa per far rimanere
il record sul quale stavo lavorando?
Grazie a tutti e scusate l'ignoranza.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie a tutti e scusate l'ignoranza.
Invece di usare i campi calcolati della query metti le formule
direttamente nelle caselle della maschera, che vengono aggiornate in
automatico, cosě eviti il problema.
Namor
-- 
namor at inwind punto it


 Namor
A me i campi calcolati della query servono in altre sezioni del database. 
Ciao
-- 


 Ciao
Puoi tenere comunque la query cosě com'č, perň invece che usare i campi
calcolati della query riscrivi le formule per ricalcolare i dati
direttamente nella maschera (se non sono formule troppo complesse).
Sennň prima di fare il requery devi salvare in una variabile il valore
della chiave primaria del record corrente, e dopo il requery con i metodi
Find e .Bookmark ti riposizioni su quel record.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
Si sospettavo che il metodo giusto č quello di Find e .Bookmark ma non
conosco la sintassi dei comandi. Ho fatto delle prove ma va in errore.
Alfo 
-- 


 Alfo 
Per la ricerca di un record da vba: vai nella maschera, costruisci con
l'autocomposizione una combo di ricerca, vai a guardare come funziona il
codice e modificalo a tuo piacimento. Confronta i comandi scritti
dall'autocomposizione con le pagine dell'help in linea per capire come
usare i vari parametri.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 calcola quanto prodotto mi serve etc...
.......

 molto piů semplice!
Per non farti cazziare c'č un metodo ancora piů semplice assai di piů: basta
scrivere correttamente DOPO il quoting!!!
Antonio

 Antonio
Cazziami pure, ma non so da dove cominciare.
Alfo


 Cazziami pure, ma non so da dove cominciare.
Riposta la tua replica scrivendo DOPO il quoting e poi se ne riparla...
Antonio

 Antonio
cos'č il quoting?? 


 ciao
Ciao Stefy,
ho provato:
Forms![inventario].[Giacenza].Requery non da errore ma non funziona;
Forms![inventario]."Giacenza".Requery errore di sintassi
Forms![inventario].Giacenza.Requery non da errore ma non funziona
Ciao


 Namor
Ho provato ma mi da un sacco di errori.
Alfo
-- 


 Alfo
Il testo del messaggio a cui stai rispondendo, che viene riportato nella
tua risposta. Per chiarezza e per poter seguire il filo del discorso è
logico scrivere le risposte sempre DOPO alle domande.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Alfo
Allora posta tutto il codice che hai provato e la descrizione degli
errori, che li sistemiamo.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
Ho scritto (o meglio copia/incolla):
Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Nome Prodotto] = '" & Me![CasellaCombinata106] & "'"
    Me.Bookmark = rs.Bookmark
    Forms![inventario].Requery
mi da errore di Run Time 2465. Impossibile trovare il campo 'casella
combinata 106' a cui s fa riferimento nell'espressione.
Ciao, Alfo
-- 


 Ciao, Alfo
Scusa la domanda banale, ma nella maschera esiste un controllo che si
chiama "CasellaCombinata106" (che dovrebbe essere il nome della combo di
ricerca)? Forse gli hai cambiato nome dopo averla creata?
Il requery è superfluo, puoi toglierlo.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
No lasciata tale e quale l nome della combo. Volevo ricordarti che
l'azione parte dalla sottomaschera.
-- 


 l'azione parte dalla sottomaschera.
aaahhhh
e allora non puoi usare Me, perchè in quel caso me è la sottomaschera, non
la form principale
Usa quindi il riferimento assoluto
forms("Main").casellacombinata106
Antonio

 Antonio
Uhm, mi sono perso qualcosa...
La combo di ricerca sta nella sottomaschera e deve ricercare un record
nella maschera principale? E allora fai come dice Antonio e usa
Forms("nome_form") o me.parent.
Ma perchè non metti la combo nella maschera principale, visto che è lì che
devi ricercare il record?
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 [cut]





La combo è nella maschera principale, il comando dopo aggiornamento che
effettua il requery si trova nella sottomaschera
Alfo
-- 


Alfo ha scritto:
[cut]






Il codice di ricerca, essendo un codice che viene eseguito al verificarsi
di un'evento della combo, deve necessariamente trovarsi nella stessa
maschera in cui si trova la combo. Mettilo là, nella routine evento "Dopo
aggiornamento" della combo. Lascia pure tutto il resto del codice, se c'è,
nella sottomaschera.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 [cut]







Ho fatto questo, le tue dritte mi hanno illuminato:
Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Nome Prodotto] = '" & Me![Nome Prodotto] & "'"
    Me.Bookmark = rs.Bookmark
    Forms![inventario].Requery
però mi ritrovo sempre al primo record del database. Se la riga del
requery la metto in testa alla routine fa uguale a prima. Se la pongo
nella penultima riga prima del Bookmark mi dice Nessun record corrente.
Secondo me bisogna impostare la variabile prima del requery.
-- 


 Secondo me bisogna impostare la variabile prima del requery.
Scusa, avevo dimenticato che non si trattava di una combo di ricerca ma di
riposizionarsi su un record dopo il requery.
Fare la ricerca prima del requery è inutile perchè poi il requery ti porta
sul primo record.
Fare la ricerca dopo in base al valore di un controllo della maschera è
inutile perchè sei già sul primo record e lì resti dato che il valore del
controllo che usi nel criterio è già cambiato.
Le operazioni che devi fare sono, nell'ordine:
1. salvare l'ID in una variabile
2. fare il requery
3. cercare il record che ha l'ID salvato nella variabile
  dim VecchioNome as string
  VecchioNome=Me![Nome Prodotto]
  me.requery
  me.recordsetclone.FindFirst "[Nome Prodotto]='" & VecchioNome & "'"
  Me.Bookmark = me.recordsetclone.Bookmark
Adattando il codice (usando Me. o Forms("nome_form").) a seconda che stia
nella maschera principale o nella sottomaschera.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 [cut]




Ho fatto così, non da errori ma non va allo stesso record ma sempre al
primo:
Dim VecchioNome As String
VecchioNome = Me![Nome Prodotto]
Forms![inventario].Requery
Me.RecordsetClone.FindFirst "[Nome Prodotto]='" & VecchioNome & "'"
Me.Bookmark = Me.RecordsetClone.Bookmark
Se scrivo Forms![inventario].[Nome Prodotto] nella riga del FindFirst mi
da l'errore che Forms![inventario].[Nome Prodotto] non è riconosciuto come
campo o espressione valida.
Ti ricordo che la maschera principale è Inventario ed li che il FindFirst
deve trovare il [Nome Prodotto] 
-- 



Scusate.. evidentemente le regole non mi entrano in testa!!! eh eh
Per alfo
per non far tornare la maschera sul primo record c'è un metodo
molto più semplice!


Alfo ha scritto:
[cut]



Ma da dove è eseguito questo codice? Fa il requery della form inventario e
la ricerca sulla maschera corrente (Me).
Ovviamente la ricerca deve essere fatta sulla stessa maschera sulla quale
fai il requery, perchè è su quella che che devi ritrovare il record.
Se il codice è nella form o subform dove devi cercare il record, usa
sempre Me e non Forms![inventario].
Se il codice non è nella form o subform dove devi cercare il record, usa
sempre Forms![inventario] e non Me.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 [cut]




Scusami, hai ragione ma non riuscivo a districarmi da Me e Forms..etc.etc.
Ci sono riuscito, ho fatto così:
 Dim VecchioNome As String
Nomeprodtemp = Me![Nome Prodotto]
Forms![inventario].Requery
Forms![inventario].RecordsetClone.FindFirst "[Nome Prodotto]='" &
Nomeprodtemp & "'"
Forms![inventario].Bookmark = Forms![inventario].RecordsetClone.Bookmark
Un'ultima cosa che ti chiedi è questa:
è possibile dopo tutta quella routine far andare il cursore alla casella
successiva invece di ritrovarmelo all'inizio? Tutto questo nella
sottomaschera. Ciao e mille Grazie 
-- 


 sottomaschera. Ciao e mille Grazie 
Allora tutto ciň sta nella maschera "inventario"? Sennň non funzionerebbe
perchč nella riga Nomeprodtemp=Me![Nome Prodotto] prendi il valore dalla
maschera corrente invece che da "inventario", a meno che Nomeprodtemp sia
il campo che collega la maschera e la sottomaschera.
Per spostare il cursore in una specifica casella usi il metodo setfocus:
Me.nomecasella.setfocus, o Forms("...")!nomecasella.setfocus se sta in
un'altra maschera.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 



ciao alfo
supponiamo che giacenza sia nella query il campo calcolato dalla differenza
tra la quantità iniziale e quella  prelevata per esempio
Giacenza=QtaIniziale-QtaPrelevata
Nella maschera tu inserisci QtaPrelevata nella corrispondente casella.  .
L'istruzione Forms![inventario].Giacenza.Requery va messa sull'evento
DopoAggiornamento (afterupdate) della casella QtaPrelevata.
Nell'espressione Forms![inventario].Giacenza.Requery le parentesi quadre su
giacenza sono facoltative si mettono solo se il nome del controllo ha degli
spazi per esempio [Giacenza Articolo].
Le virgolette invece.. sono proprio sbagliate nelle espressioni di questo
tipo.. access ha ragione eh eh
Ciao

 Namor
Ci sono riuscito anche con il setfocus, però essendo la mia sottomaschera
in vusualizzazione foglio dati il cursore va nel campo giusto ma sulla
prima riga. C'è un metodo per farlo andare sull'ultima riga, ossia la riga
sulla quale sto lavorando?
-- 


stefi ha scritto:

Giacenza è il controllo nella maschera Principale di nome inventario di
cui l'origine risiede nella query (li si chiama ResMag) quindi
Giacenza=ResMag.
Il comando di requery parte dalla sottomaschera dopo aggiornamento.
Io ho scritto:
Forms![inventario].Giacenza.Requery 
non da errore ma non funziona.


 sulla quale sto lavorando?
Dovresti eseguire un
DoCmd.GoToRecord , , acLast
Potresti metterlo nella form principale, sull'evento Invio del controllo
che contiene la sottomaschera.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 


 Namor
Namor sei mitico,
sono riuscito, grazie e te ed a questo newsgroup, a guidare access come
volevo.
Te ne sono grato. Passo e chiudo. 
Ciao, Alfo
-- 



ciao alfo
prova a scrivere
Forms![inventario].ResMag.Requery
a presto
stefi

stefi ha scritto:

Provato: dice errore di runtime 438-Proprietà o metodo non supportati
dall'oggetto.
