Newsgroup: it.comp.appl.access
Titolo: proprietà AllowEdits e GoToRecord

Ciao a tutti.
Sto realizzando un applicativo gestionale con database desktop in Access 2003.
Ho una maschera principale, per introdurre i dati relativi alle anagrafiche dei clienti, che al suo interno contiene una seconda istanza della stessa, sincronizzate tramite la seguente istruzione:
 
Private Sub Form_Open(Cancel As Integer)
 
    Set Me.Figlio1.Form.Recordset = Me.Recordset
 
End Sub
 
La sottomaschera Figlio1, in visualizzazione maschere continue, contiene solo il campo [RagioneSociale], così da visualizzare l'elenco di tutti i clienti.
Una serie di pulsanti attiva le attività:
- Nuovo Record
- Modifica Record
- Elimina Record
- Chiudi maschera
 
Le proprietà della maschera principale sono settate a:
Consenti modifiche = No
Consenti Eliminazioni = No
Consenti aggiunte = Si
Immissione Dati = No
 
I record sono ordinati in ordine alfabetico secondo il campo [RagioneSociale]. 
All'apertura della maschera, il focus viene indirizzato alla prima riga della sottomaschera Figlio1 e tutti i campi della maschera principale sono ovviamente disabilitati (Consenti Modifiche = No).
 
Con l'immissione di un nuovo record funziona tutto perfettamente e quando confermo l'immissione del nuovo record, il focus mi si sposta nella sottomaschera Figlio1 nella riga corrispondente al nuovo record immesso, già riordinato alfabeticamente e nella maschera principale i campi sono di nuovo bloccati.
 
Scusate questa lunga premessa, ma vorrei che il problema fosse ben comprensibile.
 
Quando premo il pulsante modifica, nella relativa routine sub, includo l'istruzione:
 
Me.AllowEdits = True
 
che mi permette perciò di modificare i campi della maschera principale.
Nella Routine di Conferma/Annulla modifiche includo anche l'istruzione:
 
Me.AllowEdits = False
 
Su Conferma, le modifiche si riflettono immediatamente anche in Figlio1;
persino se ho variato il campo [RagioneSociale], la posizione in Figlio1 è riordinata alfabeticamente, ma, a dispetto di qualunque istruzione io utilizzi per impostare il focus nella riga corrispondente al record modificato, il focus va alla prima riga e nella maschera principale viene coerentemente mostrato il primo record del Recordset.
 
Se però elimino l'istruzione:
 
Me.AllowEdits = False
 
il focus in Figlio1 va correttamente alla riga del record modificato e nella maschera principale è mostrato il record completo, perfettamente sincronizzato.
 
Ho provato a spostare l'istruzione AllowEdits in punti diversi della subroutine Conferma/Annulla Modifiche, ma non ho ottenuto alcun risultato.
Ho anche provato a metterla come ultima istruzione.
Ho impostato un punto d'arresto nella subroutine, nella riga immediatamente precedente.
In esecuzione, sullo stop, sono andato a verificare la visualizzazione maschera:
Il focus era nella posizione corretta, circa a metà elenco, e nella maschera principale il record era correttamente sincronizzato.
Ho fatto proseguire l'esecuzione e il focus è schizzato alla prima riga.
 
Spero di essere stato sufficientemente chiaro.
 
Potete suggerirmi cause e rimedi?
 
Grazie anticipatamente
 
Stefano Vanoli


Alle volte non si capisce niente per difetto di informazioni
In questo caso invece capisco poco per eccesso di informazioni  
 
Se il tuo problema è quello di tornare al record appena modificato
( premesso che di suo "Me.AllowEdits = False" non mi risulta che ti manda al 1° record )   ma accettiamolo come dato di fatto
 
Prova a fare cosi
 
 
[code]
' Memorizzo in una variabile il ID univoco del record
Dim xyz As Integer
xyz = Me.CampoId.Value
 
' Faccio quello che mi pare e di conseguenza il Focus si sposta al 1° record
 
' mi sposto al campo ID dove poi dovrò cercare  ( diversamente dovrei cercare in tutti i campi )
Me!CampoId.SetFocus
 
' cerco la mia variabile precedentemente memorizzata
DoCmd.FindRecord xyz
[/code]
 
Facci sapere
 
.