Newsgroup: it.comp.appl.access
Titolo: Spostamento e successivo aggiornamento record da maschera

Anzitutto buongiorno a tutti: è tantissimo che no scrivo qui, ma mi trovo in una empasse abbastanza particolare e non riesco a uscire. Una vocina mi dice che la soluzione non è così difficile ma non ci arrivo proprio.
La situazione è la seguente: cliccando su una sottomaschera viene aggiuto in record ad una tabella (all'inizio vuota) con un solo valore: IDPERS.
Se ne possono aggiungere tanti quanti sono quelli presenti nella tabella collegata alla sottomaschera (senza duplicarne nessuno).
Ora, quello che mi servirebbe è che, nella tabella in cui vengono aggiunti i record, venissero popolati di volta in volta gli altri campi (sono tanti, uno lo si evince dal SetFocus - "GGLAV") , potendo saltare da un record all'altro di quelli già inseriti, e aggiornado tale tabella di volta in volta. La tabella che deve venir aggiornata di volta in volta si chiama "INSCENTRICOSTIEQPRVV".
Sono arrivato ad identificare la presenza del valore "IDPERS" all'iterno della tabella, ma come faccio a dire a VBA di spostarsi su quel record e, semmai aggiornare quello ?
Qui il codice (le dim sono tutte a posto)
 
 
Set rcostiprvvcontrol = dbs.OpenRecordset("SELECT * FROM INSCENTRICOSTIEQPRVV WHERE IDPERS = " & Forms!INSCOSTIEQ!IDPERSLCT.Form!IDPERS)
 
    If rcostiprvvcontrol.EOF Then
 
    Set rcostiprvv = dbs.OpenRecordset("INSCENTRICOSTIEQPRVV")
    With rcostiprvv
        .AddNew
        !IDPERS = Forms!INSCOSTIEQ!IDPERSLCT.Form!IDPERS
        .Update
        .Bookmark = .LastModified
    End With
    Forms!INSCOSTIEQ!GGLAV.SetFocus
 
 
 
    Else
 
 
    rcostiprvvcontrol.FindFirst ("IDPERS = " & Forms!INSCOSTIEQ!IDPERSLCT.Form!IDPERS)
 
        If rcostiprvvcontrol.NoMatch = False Then
 
 
        End If
 
 
    End If
 
 
Ringrazio anticipatamente per chiunque possa darmi una mano !
A presto !


Non riesco a capire cosa intendi quando dici "inserire dati". Sembra che tu voglia aggiungere dei record alla tabella ma la domanda parla di reperire dei dati esistenti.
Se quest'ultima ipotesi è giusta, vuoi dire che la sottomaschera ti deve dare i dati di tutti gli IDPERS che hai inserito? Cioè, tu chiedi: dammi i dati di IDPERS 23456, 54732, 45577, e ti compaiono i tre record corrisponddenti?
 
Riccardo Baldinotti


Ciao Riccardo e grazie per la risposta:
Intanto ti metto una immagine della maschera
http://imgur.com/kP6Ujui
 
 
Quello che devo fare nella summa e (cercherò di essere schematico il più possibile):
 
1) Sull'evento click della sottomaschera Forms!INSCOSTIEQ!IDPERSLCT.Form!IDPERS si verifica il seguente if ... then ...:
viene cercato il valore IDPERS all'interno della tabella INSCENTRICOSTIEQPRVV (che consta di vari campi) nel campo corrispondente (nominato anch'esso IDPERS)
a) se il valore NON viene trovato, viene aggiunto un record contenente il valore IDPERS (e nessun altro valore per gli altri campi, quindi, sostanzialmente, il record, in questo caso, ha tutti i campi vuoti salvo quello)
b) se il valore viene trovato (ALLO STATO ATTUALE) non succede niente
 
Nella maschera, come vedrai ci sono numerosi altri campi (che sono quelli corrispondenti alla tabella INSCENTRICOSTIEQPRVV )
 
Ora, quello che mi serve è che, quando nella condizione if .. then il valore IDPERS venga trovato 8punto b della condizione sopracitata), mi sia possibile posizionarmi sul record della tabella corrispondente e implementare, scrivendo negli appositi campi della maschera, i restanti campi della tabella.
Questo, ovviamente, saltando da un IDPERS all'altro (evento click della sottomaschera), in  maniera del tutto arbitraria. 
 
Spero di essere stato il più chiaro possibile e, comunque grazie per l'aiuto !
Ciao
Pietro


Dunque devi inserire nuovi record. Io preferisco che l'ID sia un valore arbitrario, non "parlante", usato dal programma per riferirsi a un record in maniera del tutto trasparente.
Comunque potresti avere una maschera con campi non associati, compilarli e con un pulsante ordinare la scrittura del nuovo record, poi avrai semmai la sottomaschera che ti elenca i soli nuovi record inseriti.
Dimmi se ho capito.


Non è proprio così: all'evento click, se il record contenente IDPERS NON viene trovato, IN QUESTO CASO viene aggiunto un record alla tabella.
In caso invece, all'evento click, il valore IDPERS VENGA RILEVATO, in quel caso sarebbe necessario che fosse possibile posizionarsi sul record corrispondente per AGGIORNARE i campi dello stesso.


Non avevo capito l'ultima parte.
Penso a una casella combinata che riporti gli ID. Un evento DopoAggiornamento
può avere una cosa simile a quella che ho provato su una mia app:
Private Sub CasellaCombinata57_AfterUpdate()
    Set RST = CurrentDb.OpenRecordset("SELECT * FROM tAna1 WHERE cod=" & Me.CasellaCombinata57 & ";")
    If RST.RecordCount > 0 Then
        Me.cognome = RST!cognome
        Me.nome = RST!nome
        Me.TELEFONO = RST!cognome
        Me.cod = RST!cod
        Me.nuovo = 0
    Else
        Me.cod = Me.CasellaCombinata57
        Me.nuovo = -1
    End If
    Set RST = Nothing
    Me!cognome.SetFocus '
End Sub
 
La maschera non ha origine dati. Il pulsante Conferma avrà un codice tipo:
If Me.nuovo=0 then
    CurrentDb.Execute "INSERT INTO tAna1 ..."
Else
    CurrentDb.Execute "UPDATE tAna1 ... WHERE IDPERS = " & ME.cod & ";"
End If