Comando non disponibile

di il
6 risposte

Comando non disponibile

Carissimi un saluto a tutti, mi sono appena iscritto e penso che qualcuno di voi mi potrà aiutare.
In un programa realizzato con Access 2010 ho questo problema:
Cerco di cancellare un record da un file di database con questo comando DoCmd.RunCommand acCmdDeleteRecord.
La risposta è "Comando di 'Elimina Record' attualmente non disponibile". Errore 2046.
Ho cercato di scoprire se per caso avevo ereditato con un copia/incolla qualche formato di altre maschere, ho fatto molti altri tentativi ma non sono riuscito a scoprire il perché non funzione.
Un grazie grande a chi mi aiuterà.
Ciao

6 Risposte

  • Re: Comando non disponibile

    Fabrizio.don ha scritto:


    Carissimi un saluto a tutti, mi sono appena iscritto
    Benvenuto nel forum.

    Fabrizio.don ha scritto:


    Cerco di cancellare un record da un file di database con questo comando DoCmd.RunCommand acCmdDeleteRecord.
    Vediamo di usare un linguaggio più appropriato. Non si cancella "un record da un file", ma "un record da tabella o maschera".
    Dove hai questo comando?
    Se non c'è la "stessa maschera" che punta su un record, non puoi cancellare nulla.
    Potresti contestualizzare più ampiamente il tuo scenario?
    Non è che per caso in quel momento la maschera è in modalità di "sola lettura"?
  • Re: Comando non disponibile

    Fabrizio.don ha scritto:


    ..
    Cerco di cancellare un record da un file di database con questo comando DoCmd.RunCommand acCmdDeleteRecord.
    La risposta è "Comando di 'Elimina Record' attualmente non disponibile". Errore 2046.
    ...
    I motivi possono essere tantissimi e detto così è un po' difficile rispondere. Potresti fornire qualche indicazione in più, ad esempio se c'è altro codice, come funziona "quella maschera"? a volte quell'errore si verifica perché la maschera perde il focus ma... è uno dei tantissimi motivi e non me la sento di puntare già su questo.
  • Re: Comando non disponibile

    Grazie del benvenuto.
    Ok per il linguaggio più appropriato. Ebbene questo problema l’ho avuto in molti punti del programma, ho risolto in altro modo, ma non accetto che un comando non funzioni. La maschera non è in sola lettura, tant’è che inserisco dei record.
    Ecco la routine, in mezzo a tante altre, nella quale il comando è inserito:

    Private Sub Excluir_Registro_Click()
    EliminaRec 'Messaggio di eliminazione di un record

    VMinStrDelete = DCount("[Numero]", "ElencoMinistriStrComunioneCons")

    If VEliminaRec = True Then
    DoCmd.SetWarnings False
    If VMinStrDelete = 1 Then 'Qualora ci sia solo un record per cancellare il primo record (questo è il modo con cui ho risolto un altro
    problema)
    NoDeletePrimoRecord
    If Me.Numero <> 1 Then 'Per mettere il numero 1 al primo record
    RiscriviNumero
    End If
    Me.MinCognome.SetFocus
    Else
    DoCmd.RunCommand acCmdDeleteRecord
    RiscriviNumero 'Routine se il record cancellato era in mezzo interrompendo la serie progressiva
    End If
    DoCmd.SetWarnings True
    End If
    End Sub

    La maschera punta, attraverso una query alla tabella interessata. La routine di cancellazione si attiva premendo in bottone ad hoc.
    Mi sembra il tutto molto semplice, per questo sono perplesso. Ho creato la maschera modificandone un’altra, la quale non aveva questo problema, quindi non ho ereditato nulla dalla precedente.
    Se il codice inserito non è sufficiente posso scrivere il codice presente per la maschera in oggetto.
    Grazie dell’aiuto.
  • Re: Comando non disponibile

    Il tuo codice presenta molti dubbi e forse errori concettuali, nonchè possibili errori di base.... non si comprende ad esempio se sei in Form singola o Continua... e se i controlli che usi come [Numero] sono associati o meno... ed a cosa servono o da chi sono valorizzati...
    Riassumendo, io non capisco cosa devi fare nel concreto...!
    Quale RECORD devi cancellare...?
    Se è il record Corrente:
    Io farei un tentativo più tecnico che usare il Menù... hai 2 Opzioni entrambe, al contrario dei comandi da menù che sono da dimenticare come le macro, supportano TRANSAZIONI(leggere cosa sono se interessato):
    1) Query DELETE
    
    DbEngine(0)(0) "DELETE FROM TuaTabella WHEREID_PK =" & Me!Id_PK, DbFailOnerror

    Chiaramente devi eseguire un Requery successivo.

    2)Leggi questo codice che è abbastanza elementare, ma il Link è più comodo:
    http://access.mvps.org/access/forms/frm0021.ht

    Se non è il record Corrente, beh meglio ripensare a cosa devi fare... perchè serve un Criterio per cancellare un Record...!

    Errori di Base da valutare:
    Dove dichiari le variabili che USI...?
    [VMinStrDelete]
    [VEliminaRec]
  • Re: Comando non disponibile

    Buona sera Alex, grazie per il consiglio.
    Purtroppo la tua riga non funziona infatti DbEngine non ha DELETE FROM né come metodo né come proprietà. L'altro consiglio non l'ho preso in considerazione perché aveva troppe righe di codice. Il comando cancella record l'uso in molti punti del programma e quindi ho preferito usare un'altra via: una query di eliminazione che individua il record attraverso una variabile che trasferisce il suo valore ad una funzione personale.
    Speravo di risolvere il tutto con una riga di codice ma, a quanto pare, non è possibile. Grazie lo stesso.
    Il Begin transaction lo usavo quando programmavo in dBase, ma ora non mi necessita più; le variabili sono dichiarate in un modulo a parte, quelle pubbliche; le altre, Dim, Private o Static, sono dichiarate nel modulo o routine di lavoro a seconda di dove mi servono.
    Seguirò il tuo consiglio, non userò più, per quanto possibile, comandi che puntano ai comandi del menù.
    Grazie alla prossima.
  • Re: Comando non disponibile

    Fabrizio.don ha scritto:


    Buona sera Alex, grazie per il consiglio.
    Purtroppo la tua riga non funziona infatti DbEngine non ha DELETE FROM né come metodo né come proprietà.
    Di cosa stai parlando...?
    Sei certo di aver capito cosa sia quel suggerimento...?
    DELETE FROM è un comando SQL che chiaramente non può apparire come Metodo/Proprietà di alcunchè... hai detto una cosa su cui ti invito a rivedere qualche cosa...

    Fabrizio.don ha scritto:


    L'altro consiglio non l'ho preso in considerazione perché aveva troppe righe di codice. Il comando cancella record l'uso in molti punti del programma e quindi ho preferito usare un'altra via: una query di eliminazione che individua il record attraverso una variabile che trasferisce il suo valore ad una funzione personale.
    Hai fatto bene.

    Fabrizio.don ha scritto:


    Speravo di risolvere il tutto con una riga di codice ma, a quanto pare, non è possibile. Grazie lo stesso.
    Il Begin transaction lo usavo quando programmavo in dBase, ma ora non mi necessita più; le variabili sono dichiarate in un modulo a parte, quelle pubbliche; le altre, Dim, Private o Static, sono dichiarate nel modulo o routine di lavoro a seconda di dove mi servono.
    Seguirò il tuo consiglio, non userò più, per quanto possibile, comandi che puntano ai comandi del menù.
    Grazie alla prossima.
    Non ho altro da aggiungere, mi pare abbia già detto tutto tu...
Devi accedere o registrarti per scrivere nel forum
6 risposte