Condividi tramite

Query Access: error 3704 l'operazione non è consentita se l'oggetto è chiuso

Anonimo
2010-09-27T12:06:56+00:00

Salve a tutti,

questo è il messaggio che mi comprare quando eseguo una qry di aggiornamento, ma non capisco proprio perché!!! la qry seleziona i dati corretti, ma al momento di aggiornare ma da l'errore

Qualche suggerimento?

Grazie anticipato

Private Sub cmdInserisci_Click()

Dim cn As ADODB.Connection

Dim rs As ADODB.Recordset

Dim cmd As ADODB.Command

Dim strSql As String

Set cn = CurrentProject.AccessConnection

Set rs = New ADODB.Recordset

Set rs.ActiveConnection = cn

Set cmd = New ADODB.Command

Set cmd.ActiveConnection = cn

strSql = "UPDATE tblProvaCampione " & _

          "SET tblProvaCampione.Metodica ='" & Me.txtMetodica & "', tblProvaCampione.UM ='" & Me.txtUM & "', tblProvaCampione.Valore ='" & Me.txtLimite & "', tblProvaCampione.LoD ='" & Me.txtLoD & "', tblProvaCampione.LoQ ='" & Me.txtLoQ & "', tblProvaCampione.R ='" & Me.txtR & "' " & _

         "where tblProvaCampione.IDCampione=" & [Forms]![frmRisposte]![txtIDCampione] & " AND tblProvaCampione.IDEsame=" & Me.IDEsame & ";"

MsgBox strSql

cmd.CommandText = strSql

cmd.Execute

rs.MoveNext

rs.Close

Set rs = Nothing

Set cmd = Nothing

cn.Close

Set cn = Nothing

End Sub

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-09-27T13:54:42+00:00

Ciao Elena,

il messaggio di conflitto viene notificato perchè la maschera è in stato di edit e la query di aggiornamento modifica il record corrente della maschera.

prima di eseguire la query di aggiornamento salva il record della maschera, poi esegui la query di aggiornamento e poi il requery della maschera.

per essere più preciso ho bisogno di conoscere lo scenario: Quali e quante maschere aperte (penso più di una) da quale maschera esegui la query e su che maschera vengono aggiornati i valori.

ps. l'errore lo da anche se esegui una query di access, probabilmente quando hai provato la maschera non era in stato di edit.

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-09-28T08:37:03+00:00

    Risolutivo come al solito

    effettivamente le maschere aperte sono 2 con la prima (A) visualizzo i record che devo modificare, con la seconda (B) visualizzo i valori da inserire al record selezionato della maschera A. Grazie al tuo suggerimento ho risolto salvando il record corrente della maschera A prima di aprire la maschera B.

    Grazie grazie grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-09-27T13:27:03+00:00

    ti ringrazio avevi ragione come sempre, grazie ho usato l'ultimo metodo iper-risparmio.

    Se posso ancora disturbarti ora succede un altro comportamento strano...

    dopo aver fatto la qry di aggiornamento, se faccio il requery della maschera che contiene

    i dati che ho aggiornato (maschera che resta aperta anche durante la qry di aggiornamento) mi compare un messaggio:

    durante la corrente sessione di modifica il record è stato modificato da un altro utente.

    Quindi devo scegliere tra salva il record, copia negli appunti, non salvare modifiche

    Se scelgo non salvare le modifiche, va tutto liscio: visualizzo i dati correttamente, 

    se scelgo la prima succede un casino (caratteri incomprensibili) e l'unica è riuscire ad eliminare il record.

    Perché si comporta in questo modo?

    Come posso evitarlo?

    Se faccio le stessa operazioni con le qry di access invece che con il vba, tutto ciò non succede...

    grazie ancora

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-09-27T12:52:40+00:00

    Ciao Elena,

    l'errore si presenta nella riga rs.Movenext perchè l'oggetto rs non è aperto.

    Visto che nel tuo codice rs non serve a niente, toglilo

    Così funziona.


    Dim cn As ADODB.Connection

    Dim cmd As ADODB.Command

    Dim strSql As String

    Set cn = CurrentProject.AccessConnection

    Set cmd = New ADODB.Command

    Set cmd.ActiveConnection = cn

    strSql = "UPDATE tblProvaCampione " & _

              "SET tblProvaCampione.Metodica ='" & Me.txtMetodica & "', tblProvaCampione.UM ='" & Me.txtUM & "', tblProvaCampione.Valore ='" & Me.txtLimite & "', tblProvaCampione.LoD ='" & Me.txtLoD & "', tblProvaCampione.LoQ ='" & Me.txtLoQ & "', tblProvaCampione.R ='" & Me.txtR & "' " & _

             "where tblProvaCampione.IDCampione=" & [Forms]![frmRisposte]![txtIDCampione] & " AND tblProvaCampione.IDEsame=" & Me.IDEsame & ";"

    MsgBox strSql

    cmd.CommandText = strSql

    cmd.Execute

    Set cmd = Nothing

    cn.Close

    Set cn = Nothing


    Se vuoi ridurre togliendo l'oggetto Connection:


    Dim cmd As ADODB.Command

    Dim strSql As String

    Set cmd = New ADODB.Command

    Set cmd.ActiveConnection = CurrentProject.Connection

    strSql = "UPDATE tblProvaCampione " & _

              "SET tblProvaCampione.Metodica ='" & Me.txtMetodica & "', tblProvaCampione.UM ='" & Me.txtUM & "', tblProvaCampione.Valore ='" & Me.txtLimite & "', tblProvaCampione.LoD ='" & Me.txtLoD & "', tblProvaCampione.LoQ ='" & Me.txtLoQ & "', tblProvaCampione.R ='" & Me.txtR & "' " & _

             "where tblProvaCampione.IDCampione=" & [Forms]![frmRisposte]![txtIDCampione] & " AND tblProvaCampione.IDEsame=" & Me.IDEsame & ";"

    MsgBox strSql

    cmd.CommandText = strSql

    cmd.Execute

    Set cmd = Nothing


    Se vuoi ridurre ulteriormente


    Dim strSql As String

    strSql = "UPDATE tblProvaCampione " & _

              "SET tblProvaCampione.Metodica ='" & Me.txtMetodica & "', tblProvaCampione.UM ='" & Me.txtUM & "', tblProvaCampione.Valore ='" & Me.txtLimite & "', tblProvaCampione.LoD ='" & Me.txtLoD & "', tblProvaCampione.LoQ ='" & Me.txtLoQ & "', tblProvaCampione.R ='" & Me.txtR & "' " & _

             "where tblProvaCampione.IDCampione=" & [Forms]![frmRisposte]![txtIDCampione] & " AND tblProvaCampione.IDEsame=" & Me.IDEsame & ";"

    MsgBox strSql

    CurrentProject.Connection.Execute strSql


    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento