Condividi tramite

Errore Violazione di chiave in query di aggiornamento

Anonimo
2013-03-12T11:14:25+00:00

Buongiorno.

Ecco il mio problema.

La maschera [Inserimento Fatture] inserisce dei dati nella tabella Fatture;

tra questi dati c'è anche un record IDImpegno a cui la fattura si riferisce.

vorrei che questo valore IDImpegno venisse copiato nella tabella Fatture (in cui esiste già il campo IDImpegno, ma sino ad ora resta vuoto).

Creo una query di aggiornamento che lancio alla chiusura della maschera o al salvataggio.

UPDATE Fatture SET Fatture.IDImpegno = [Forms]![Inserimento Fatture]![IDImpegno]

WHERE ((([Forms]![Inserimento Fatture]![IDFattura]=[Fattue]![IDFattura]));

La query la traduco così:

Aggiorna la tabella Fatture, in particolare il campo IDImpegno con il valore IDImpegno della form [Inserimento Fatture] dove i due IDFattura sono uguali.

La query mi restituisce errore:

"Impossibile aggiornare tutti i record nella query di aggiornamento.

.......a causa di violazioni di chiave:1;......

Grazie a quanti vorranno aiutarmi.

Microsoft 365 e Office | Accesso | 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

  1. Anonimo
    2013-03-13T07:57:31+00:00

    Ok, fatto...grazie Giorgio del tuo prezioso supporto.

    ...ma mi, anzi ci spieghi perchè il comando è obsoleto?

    Grazie

    Ciao,

    è piu di 15 anni che DoMenuItem è stato sostituito da RunCommand, viene mantenuto solo per compatibilità con le vecchie versioni.

    Guarda questo documento ufficiale per Access 2000: DoMenuItem Method  vedi in particolare dove dice:

    Note   In Microsoft Access 97, the DoMenuItem method was replaced by the RunCommand method. The DoMenuItem method is included in this version of Microsoft Access only for compatibility with previous versions.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-03-13T06:59:21+00:00

    Ok, fatto...grazie Giorgio del tuo prezioso supporto.

    ...ma mi, anzi ci spieghi perchè il comando è obsoleto?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-03-12T22:01:47+00:00

    ok, consiglio, cambia il comando obsoleto

    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

    con

    DoCmd.RunCommand acCmdSaveRecord

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-03-12T20:48:27+00:00

    Confermo che non lo è, ma il problema era una relazione di troppo che avevo erroneamente impostato.

    La query funziona, ma a patto che avvenga prima il salvataggio dei dati inseriti nella maschera.

    Quindi mi tocca "accodare" i comandi:

    • salvo dati:

    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,       acMenuVer70

    • lancio la query:

    Dim stDocName As String

    stDocName = "aggiornamento"  'come da precedente post

    DoCmd.OpenQuery stDocName, acNormal, acEdit

    • Passo al record successivo:

    DoCmd.GoToRecord , , acNewRec

    Spero sia corretto, forse con un percorso tortuoso, ma funziona.

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-03-12T13:28:56+00:00

    No, non lo è.

    controlla meglio perchè se non è chiave univoca, la query


    UPDATE Fatture SET Fatture.IDImpegno = [Forms]![Inserimento Fatture]![IDImpegno]

    WHERE ((([Forms]![Inserimento Fatture]![IDFattura]=[Fattue]![IDFattura]));


    non può dare l'errore


    "Impossibile aggiornare tutti i record nella query di aggiornamento.

    .......a causa di violazioni di chiave:1;......


    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento