Newsgroup: it.comp.appl.access
Titolo: Copiare un record senza o con variazioni

Ciao ragazzi
un aiutino per favore...sto diventando pazza
Dovrei fare una cosa semplicissima.Da una maschera avvio un recordset e
..vbYes...duplico il record modificando solo il campo Attività (da Proposta a Chiusura)in automatico
..vbNo...duplico il record modificando oltre al campo Attività, ma a manina, i campi da modificare.
In entrambi i casi mi deve aggiornare la maschera col record aggiunto.
Ora, nel primo caso duplica perfettamente il record con la correzione in automatico, mi fa vedere l'aggiunta del
nuovo record nella maschera, ma mi da errore "l'operazione richiesta non è supportata dall'oggetto o dal provider"
nell'istruzione: Set Forms("Proposte").Recordset = Rst.Proposte
E' molto strano perchè è come riportato esattamente nella guida in linea.
Nel secondo caso , invece non mi duplica il record, ma va ad aggiornare con i cambiamenti che faccio a manina
il record di origine. Eppure dovrebbe funzionare.
E perchè nel primo caso duplica e nel secondo no?
Dove sbaglio ? Ho provato in tanti modi ma non riesco ad uscirne
Un aiutino per favore...vi posto il codice incriminato.
Private Sub Contratto_AfterUpdate()
Dim Con As ADODB.Connection
         Dim Rst As ADODB.Recordset
         Set Con = CurrentProject.Connection
         Set Rst = New ADODB.Recordset
         Rst.Open "SELECT Proposte.* FROM Proposte", Con, adOpenKeyset, adLockOptimistic, adCmdTableDirect
         'salva una copia del record modificando solo Attività (da Proposta a Chiusura)
             With Rst
             If MsgBox("Il contratto è uguale alla proposta ?", vbYesNo, "Avviso") = vbYes Then
             .AddNew
             !Cliente = Me.Cliente.Value
             !Attività = "Chiusura"
             !Proposta = Me.Proposta.Value
             !Gennaio = Me.Gennaio.Value
             !Febbraio = Me.Febbraio.Value
             !Marzo = Me.Marzo.Value
             !Aprile = Me.Aprile.Value
             !Maggio = Me.Maggio.Value
             !Giugno = Me.Giugno.Value
             !Luglio = Me.Luglio.Value
             !Agosto = Me.Agosto.Value
             !Settembre = Me.Settembre.Value
             !Ottobre = Me.Ottobre.Value
             !Novembre = Me.Novembre.Value
             !Dicembre = Me.Dicembre.Value
             DoCmd.RunCommand acCmdSaveRecord
             .Update
              Set Forms("Proposte").Recordset = Rst.Proposte
             .Close
           Else
         With Rst
             .AddNew
             'salva una copia del record modificando Attività e valori mensili
             Me.Cliente.Value = Me.Cliente
             Me.Attività.Value = "Chiusura"
             Me.Proposta.Value = Me.Proposta
             Me.Gennaio.Value = Null
             Me.Febbraio.Value = Null
             Me.Marzo.Value = Null
             Me.Aprile.Value = Null
             Me.Maggio.Value = Null
             Me.Giugno.Value = Null
             Me.Luglio.Value = Null
             Me.Agosto.Value = Null
             Me.Settembre.Value = Null
             Me.Ottobre.Value = Null
             Me.Novembre.Value = Null
             Me.Dicembre.Value = Null
             .Update
              DoCmd.RunCommand acCmdSaveRecord
             .Close
     Con.Close
End With
End If
End With
End Sub

 End With
-- 
Cinzia [Office Access MVP]
_______________________
 
www.riolab.org
http://accessdaziacin.live.spaces.com
---------------------------------------- 

Cinzia ha scritto:

Ciao Cinzia,
innanzitutto grazie per l'intervento e per la cortesia.
Ti diro'; il sospetto mi è venuto ed ho provato come hai suggerito tu , facendo una prova su un solo campo.Ma
nulla sembrava cambiato..forse non ho corretto come dovevo.
Riprovo e ti faccio sapere.
Una curiosità..cos'è[Office Access MVP]..sei una professionista in Microsoft?
Cristina
PS. Tanti anni fa facevo dei piccoli gestionali in Access 2000 ed ho ripreso da poco con A2003 più
per passione che per esigenza (devo confessare però che mi semplifico e di molto, il lavoro :-))).
Praticamente è come ricominciare dall'inizio!!!
Ho una strana sensazione; mentre con A2000 tutto filava liscio, con A2003 spesso mi succede che
faccio una variazione, SEMBRA non funzionare ( e quindi ti danni l'anima con continue prove) , chiudi A03 , riapri e....
..voilà...magicamente funziona tutto. E' un po' angosciante ..tu ne sai qualcosa di eventuali bug?
Office 2003 Sp3 + ultima patch segnalata

 Office 2003 Sp3 + ultima patch segnalata
No devo dire che uso Access 2003 ormai da tanti anni e non mi pare 
soffrire di grossi bachi, non più della versione 2000 almeno,  forse i 
problemi che hai dipendono dal fatto che le variabili globali, ogni 
volta che interrompi il codice vengono resettate ed è per questo che 
chiudendo e riaprendo tutto ritorna a funzionare.
PS. Che bello ogni tanto trovare una collega con la stessa passione 
per Access.


 
Ciao Cinzia,
grazie ai tuoi suggerimenti ho risolto tutto. Avevi ragione; facevo riferimento
alla maschera e non ai campi della tabella!
Ora tutto funziona alla grande e, con una piccola aggiunta di codice (una intuizione venuta da non so dove)
che mi ha permesso di capire come mai nel caso del record da aggiornare, in realtï¿œ andavo ad aggiornare
il record primario e non quello duplicato.
Al di la dell'errore che tu mi hai permesso di correggere,occorreva che nella maschera venisse visualizzato
come corrente il record clone dove modificare i valori.
Quindi nel secondo caso, dopo il Me.Requery ho inserito "Docmd.GoToRecord, , AcNext". Solo allora sei effettivamente
nel record dove modificare i campi interessati. Altrimenti non vedi altro che il record primario.
Allego il codice funzionante per qualsiasi necessitï¿œ del ng.
Ti ringrazio (anche per avermi fatto conoscere [Office Access MVP])e fa molto piacere anche a me trovare una collega
con la stessa passione;una volta avevo il supporto della ex di mio fratello (capo progetto in DHL)..adesso col nuovo
fidanzato ha aperto un ristorante :-))
Ciao, Cristina
Private Sub Contratto_AfterUpdate()
Dim Con As ADODB.Connection
         Dim Rst As ADODB.Recordset
         Set Con = CurrentProject.Connection
         Set Rst = New ADODB.Recordset
         Rst.Open "SELECT Proposte.* FROM Proposte", Con, adOpenKeyset, adLockOptimistic, adCmdTableDirect
         'salva una copia del record modificando solo Attivitï¿œ (da Proposta a Chiusura)
             With Rst
             If MsgBox("Il contratto ï¿œ uguale alla proposta ?", vbYesNo, "Avviso") = vbYes Then
             .AddNew
             !Cliente = Me.Cliente.Value
             !Attivitï¿œ = "Chiusura"
             !Campagna = Me.Campagna.Value
             !Gennaio = Me.Gennaio.Value
             !Febbraio = Me.Febbraio.Value
             !Marzo = Me.Marzo.Value
             !Aprile = Me.Aprile.Value
             !Maggio = Me.Maggio.Value
             !Giugno = Me.Giugno.Value
             !Luglio = Me.Luglio.Value
             !Agosto = Me.Agosto.Value
             !Settembre = Me.Settembre.Value
             !Ottobre = Me.Ottobre.Value
             !Novembre = Me.Novembre.Value
             !Dicembre = Me.Dicembre.Value
             DoCmd.RunCommand acCmdSaveRecord
             .Update
             Me.Requery
             DoCmd.GoToRecord , , acNext
             .Close
           Else
         With Rst
             .AddNew
             'salva una copia del record modificando Attivitï¿œ e valori mensili
             !Cliente = Me.Cliente.Value
             !Attivitï¿œ = "Chiusura"
             !Campagna = Me.Campagna.Value
             !Gennaio = Null
             !Febbraio = Null
             !Marzo = Null
             !Aprile = Null
             !Maggio = Null
             !Giugno = Null
             !Luglio = Null
             !Agosto = Null
             !Settembre = Null
             !Ottobre = Null
             !Novembre = Null
             !Dicembre = Null
              .Update
              Me.Requery
              DoCmd.GoToRecord , , acNext
             .Close
     Con.Close
End With
End If
End With
End Sub
'Ovviamente, dopo l'aggiornamento dei dati , occorre fare un bel acSaveRecord