Newsgroup: it.comp.appl.access
Titolo: Qry Aggiornamento su stesso record ( scusate è lunghetto..solo se avete voglia di leggere)

Ciao ragazzi,
ho bisogno di una mano perchè non capisco dov'è l'errore.
Mi hanno chiesto di implementare una funzionalità che preveda la
possibilità di modificare
un contratto già finalizzato. ( prima era previsto solo la proposta e
il contratto, ma in effetti un contratto può per "enne" motivi subire
una modifica)
il db è strutturato così:
Tabelle: Portafoglio/Attività ( uno a molti)
Maschere: Attività/DettaglioAttività ( entrambe dalla sola tabella
Attività)
Operatività:
Inserisco una proposta_
per farla diventare contratto_attraverso un cmdbtn apro un
recordsetclone che, apportate le dovute modifiche rispetto alla
proposta (se ci sono) mi crea
un secondo record che è il contratto stesso.
Fatto questo una query " Qry_UpdatePortafoglio" si incarica di sommare
il contratto appena stipulato al totale contratti del cliente ( con
tutta una serie di WHERE per rendere univoco il contratto da
aggiungere)
______________________________________________
Function PropostaChiusura()
Dim con As ADODB.Connection
       bla bla
        rst.Open "SELECT Attività.* FROM Attività", con, adOpenKeyset,
adLockOptimistic, adCmdTableDirect
        LngStore = Me!ID
       'salva una copia del record modificando solo Attività (da
Proposta a Chiusura)
            With rst
                        .AddNew
            !Cliente = Me.Cliente.Value
            !Attività = "Chiusura"
            Bla Bla ..aggiornamento di valori
             Me.Ctrl_PC.Value = True
             .Update
             Me.RecordsetClone.FindFirst "ID= " & LngStore
             Me.Bookmark = Me.RecordsetClone.Bookmark
             Me.Requery
             DoCmd.GoToRecord , , acLast
             Bla Bla..una serie di valori che si auto-aggiornano nel
nuovo record "updatato"
             DoCmd.RunCommand acCmdSaveRecord
            .Close
    con.Close
stDocName1 = "Qry_UpdatePortafoglio"
    DoCmd.OpenQuery stDocName1, acNormal, acEdit        ' aggiorno i
valori nel portafoglio
DoCmd.OpenForm "Qry_CambioFatturato", acNormal
Forms!
Qry_CambioFatturato.Requery                                       '
verifico i valori attraverso questa maschera di controllo
-----------------------------------------------------------------------
E così aggiorno il portafoglio del nuovo valore.
Ora ho aggiunto un pulsante che dovrebbe modificarmi il
contratto ,sottrae il valore del contratto stesso, e predispone la
modifica
________________________________________
ModificaContratto
        Dim Con As ADODB.Connection
        bla bla
        rst.Open "SELECT Attività.* FROM Attività", Con,
adOpenKeyset,        adLockOptimistic, adCmdTableDirect
                     With rst
        stDocName1 = "Qry_RestoreUpdatePortafoglio" (sottrae nella
tabella Portafoglio il valore del contratto al totale contratti)
    DoCmd.OpenQuery stDocName1, acNormal, acEdit
DoCmd.OpenForm "Qry_CambioFatturato", acNormal ( apre la maschera di
controlo della query che cambia il fatturato)
Forms!Qry_CambioFatturato.Requery
             stDocName = "DettagliMese"
             stlinkcriteria = "[CodCampagnaChiusa]=" & "'" & Me!
[CodCampagnaChiusa] & "'"
             DoCmd.OpenForm stDocName, , , stlinkcriteria
            !Cliente = Me.Cliente.value
            etcetera
            etcetera
            !CodCampagna = Me.CodCampagna.value
            !PercChiusura.value = "100"
            !DataOra = Now
         DoCmd.RunCommand acCmdSaveRecord
         DoCmd.Close acForm, "Attività"
    Con.Close
End With
End If
End With
------------------------------------------------------
Fin qui tutto bene. Qualsiasi, anzi Da qualsiasi record (contratto
dello stesso cliente ) io parta, la routine elimina l'importo esatto
relativo , MA
quando vado a salvare i cambiamenti, con " Function SaveRecord" se lo
faccio dall'ultimo record si aggiorna correttamente, se prendo un
record precedente
(sto parlando sempre dello stesso cliente) , mi aggiorna con il valore
dell'ultimo contratto chiuso.
Questa è la funzione:
________________________________________
Function Saverecord()
DoCmd.RunCommand acCmdSaveRecord
DoCmd.OpenForm "Attività"
Dim stDocName As String
stDocName = "Qry_UpdatePortafoglio"
DoCmd.OpenQuery stDocName, acNormal, acEdit
Forms!Qry_CambioFatturato.Requery
Forms!Qry_CambioFatturato.Requery
DoCmd.OpenForm "DettagliMese", acNormal, "", "", , acHidden
DoCmd.OpenForm "Attività", acNormal
DoCmd.GoToRecord , , acLast
End Function
----------------------------------------------------
Ho trovato una soluzione che risolve il problema, ma mi sembra più un
escamotage piuttosto che una soluzione concreta.
1) Lascio aperta, invece di chiuderla, la mascherà Attività
2) Evito che su qualsiasi Requery il focus vada sull'ultimo record
( anche se dovrebbe e potrebbe farlo)
3) Ho modificato l'ordine del  codice della funzione "SaveRecord"
invertendo  l'ordine di esecuzione tra la maschera e l'update della
query:
DoCmd.RunCommand acCmdSaveRecord
DoCmd.OpenForm "DettagliMese", acNormal, "", "", , acHidden
DoCmd.OpenForm "Attività", acNormal
Dim stDocName As String
stDocName = "Qry_UpdatePortafoglio"
DoCmd.OpenQuery stDocName, acNormal, acEdit
'stDocName1 = "Qry_CambioFatturato"
'stlinkcriteria = "[Cliente]=" & "'" & Me![Cliente] & "'"
'DoCmd.OpenForm stDocName1, , , stlinkcriteria
Forms!Qry_CambioFatturato.Requery
DoCmd.OpenForm "DettagliMese", acNormal, "", "", , acHidden
DoCmd.OpenForm "Attività", acNormal
Ma in realtà dov'è il vero errore e come posso fare su "SaveRecord" a
mantenere l'ID dell'ordine (record) che sto modificando?
Devo anche li agganciarmi con il LngStore?
Grazie a chi ha letto ed alla pazienza di voi tutti. Se nno avessi
raccontato in questo modo , mi sarebbe stato difficile spiegare :-)
Eddie

 ha scritto nel messaggio 
news:c439798c-5c99-42e1...@t11g2000yqg.googlegroups.com...













Eddie
[risposta]
Se ho capito bene prima di aprire la form "DettagliMese" devi scrivere le 
modifiche sul record?
Prova con Refresh:
...
if Me.Dirty then
    Me.Refresh
end id
DoCmd.OpenForm "DettagliMese", acNormal, "", "", , acHidden
...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Ciao Sergio e grazie dell'interessamento, innanzitutto
No, le modifiche sul record le faccio dopo aver aperto la form
"dettaglimese" . Infatti le modifiche le
faccio proprio li. Ed è qui l'inghippo; per poter aggiornare
correttamente i valori updatati dalla query di aggiornamento
devo tornare nella mascherà "attività" esattamente a quel record.
Ciao
Ed