Errore 94 invalid use of null

Anonimo
2020-08-30T18:53:39+00:00

Buongiorno, non riesco a trovare la soluzione all'errore Invalid use of null. 

Ho una sottomaschera sulla quale c'è un pulsante che esegue (DoCmd.RunCommand (acCmdRecordsGoToNew)) per creare un nuovo record ed un evento su record corrente ( nella stessa sottomaschera). L'evento su record corrente  serve a disabilitare i pulsanti che uso per spostarmi avanti e indietro nei record ( ho eliminato il navigation button).

L'errore compare quando voglio creare il nuovo record. Penso sia legato alla sequenza degli eventi ed quindi al fatto che l'evento su record corrente sia "più veloce" del gotonewrecord . Ho provato con il requery ma non funziona

Il collegamento tra maschera e sottomaschera è di tipo uno a molti.   IdF centrale  è la chiave per il collegamento alla chiave primaria della maschera

Questo è l'evento su record corrente che da l'errore

Private Sub Form_Current()

Dim val As Integer

val = Me.IdFcentrale

Btncentraleforw.Enabled = Not (CurrentRecord = DCount("*", "centrale", "[idfcentrale] = " & val))

Btncentraleback.Enabled = Not (CurrentRecord = 1)

End Sub

Grazie per l' aiuto

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

6 risposte

Ordina per: Più utili
  1. Anonimo
    2020-09-15T17:42:15+00:00

    Ciao Sandro,

    scusa il ritardo nella risposta, ma non ho ancora avuto modo di fare le verifiche. 

    I pulsanti però dovrei mantenerli nella subform. Proverò a modificare il tutto in modo da poter adattare il codice che mi hai fornito.

    Grazie a presto .

    Manuele

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2020-09-09T14:06:45+00:00

    ciao Manuele,

    di consigliavo di impostare i command buttons nella main form e non nella subForm riprova...e facci sapere.

    una volta che sei a regime vediamo di capire assieme che cosa fa il codice passo passo, post tuo studio autonomo ovviamente.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-09-02T15:13:24+00:00

    Buongiorno Sandro, ho inserito la routine (però senza la parte relativa all'evento su corrente) i tasti avanti e indietro funzionano lo stesso. Volevo quindi capire a cosa serve l'istruzione caricata  Su corrente (è necessaria forse per altri scopi? Considera che ho i pulsanti avanti e indietro direttamente sulla subfrm ).

    A parte questo, ho un altro errore che non riesco a risolvere.

    Sulla subfrm ho anche un pulsante per generare un nuovo record.

    Quando lo attivo mi si genera l' errore  "run time 2046 the command or action recordsgotonew isn't available now" .

    Questa è la subroutine (l'errore mi viene generato dalla riga Docmd.runcomman...)

    Private Sub Btnnewcentrale_DblClick(Cancel As Integer)

    Select Case MsgBox("Vuoi aggiungere una nuova centrale?", vbYesNo, "AVVISO")

     Case vbYes

     -->DoCmd.RunCommand (acCmdRecordsGoToNew)<--

     Me.Requery

     Case vbNo

     Exit Sub

    End Select

    End Sub 

    Grazie per l'aiuto

    Manuele

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-08-31T23:01:24+00:00

    Ciao Sandro,

    grazie per la risposta. 

    Appena ho un po' di tempo me lo studio e provo ad applicarlo.

    grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2020-08-31T12:49:29+00:00

    ciao ManuelePD,

    ho estratto il codice che segue da una classe specifica realizzata per la gestione customizzata di pulsanti.

    Prova a vedere se riesci a adattarla al tuo scenario....servono solo minime modifiche.

    imposta i command buttons nella mail form e personalizza i nomi dei controlli e della sottomaschera con quelli reali, vedi parti in grassetto.

    Option Compare Database

    Option Explicit

    Private Sub cmdForw_Click()

    On Error Resume Next

    With Me.tuaSottomaschera.Form.RecordsetClone

        .Bookmark = Me.tuaSottomaschera.Form.Bookmark

        .MoveNext

        Me.tuaSottomaschera.Form.Bookmark = .Bookmark

    End With

    With Me

        .cmdPrev.Enabled = Not isEOF_BOF(frm:=Me.tuaSottomaschera.Form, boolMove:=0)

        .cmdForw.Enabled = Not isEOF_BOF(frm:=Me.tuaSottomaschera.Form, boolMove:=-1)

    End With

    End Sub

    Private Sub cmdPrev_Click()

    On Error Resume Next

    With Me.tuaSottomaschera.Form.RecordsetClone

        .Bookmark = Me.tuaSottomaschera.Form.Bookmark

        .MovePrevious

        Me.tuaSottomaschera.Form.Bookmark = .Bookmark

    End With

    With Me

        .cmdPrev.Enabled = Not isEOF_BOF(frm:=Me.tuaSottomaschera.Form, boolMove:=0)

        .cmdForw.Enabled = Not isEOF_BOF(frm:=Me.tuaSottomaschera.Form, boolMove:=-1)

    End With

    End Sub

    Private Sub Form_Current()

    With Me

        .cmdPrev.Enabled = Not isEOF_BOF(frm:=Me.tuaSottomaschera.Form, boolMove:=0)

        .cmdForw.Enabled = Not isEOF_BOF(frm:=Me.tuaSottomaschera.Form, boolMove:=-1)

    End With

    End Sub

    Private Function isEOF_BOF(ByVal frm As Access.Form, _

                              ByVal boolMove As Boolean) As Boolean

    Dim bool As Boolean

    Dim rst  As DAO.Recordset

    Set rst = frm.RecordsetClone

    With rst

       .Bookmark = frm.Bookmark

        Select Case boolMove

           Case 0

               .MovePrevious

               bool = .BOF

            Case -1

                .MoveNext

                 bool = .EOF

        End Select

        .Bookmark = frm.Bookmark

    End With

    isEOF_BOF = bool

    End Function

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento