[Risolto] Errore di run-time 3075 con DCount

di il
4 risposte

[Risolto] Errore di run-time 3075 con DCount

Ciao a tutti!!!
Sono nuovo del Forum e dei forum di programmatori in genere. Questo perché non sono un programmatore, ma solo un autodidatta che a volte ha la necessità di sviluppare database Access per il facilitarsi il proprio lavoro di amministrativo.
Finora mi sono arrangiato solo con le Macro in quanto i miei "lavori" precedenti necessitavano solo di eseguire query attraverso maschere e/o costruire stampe a mezzo reports.
Ora mi sono imbarcato in un'impresa alquanto ardua perché il progetto prevede anche l'inserimento di dati e le sole macro non bastano più e quindi ho bisogno di usare codice VBA, cercando di essere moooolto minimale.
Finora per problemi vari ho risolto interrogando il vostro e altri siti di programmatori, riuscendo sempre a cavarmela.
Ora però ho un problema alquanto banale, perché si tratta di una funzione che ho utilizzato centinaia di volte, che però non riesco a risolvere.

Spiego:
in un pulsante, che mi deve cancellare un record in una maschera con sottomaschera (si tratta di testata preventivo con righe), all'evento Click ho inserito questo codice:
Private Sub Pulsante_Elimina_Click()
        
        If (DCount("[ANNO_NUMERO_CONTRATTO]", "ANAGRAFICA_CONTRATTI", "[ANNO_NUMERO_CONTRATTO] = " & Me.ANNO_NUMERO_CONTRATTO)) > 0 Then
            Beep
            MsgBox "Il Preventivo che si è tentato di eliminare" & Chr(13) & vbLf _
            & "è stato abbinato ad un Contratto!!!" & Chr(13) & vbLf _
            & "Se sei sicuro, devi prima disabbinare o eliminare il Contratto.", vbExclamation, "IMPOSSIBILE CANCELLARE IL PREVENTIVO!!!"
            Exit Sub
        End If

        If (DCount("[Cod_Unico_Numero_Prev]", "PREVENTIVI_Righe", "[Cod_Unico_Numero_Prev] = '" & Me.Cod_Unico_Numero_Prev & "'")) > 0 Then
            Beep
            MsgBox "Il Preventivo che si è tentato di eliminare" & Chr(13) & vbLf _
            & "contiene delle Righe!!!" & Chr(13) & vbLf _
            & "Se sei sicuro, devi prima eliminarle tutte e riprovare.", vbExclamation, "IMPOSSIBILE CANCELLARE IL PREVENTIVO!!!"
            Exit Sub
        End If

        Continua....

End Sub
Sulla prima If mi dà <Errore di run-time '3075'> con il seguente testo di dettaglio:
Errore di sintassi (operatore mancante) nell'espressione della query '[ANNO_NUMERO_CONTRATTO] = '.

Eseguendo il Debug, si posiziona sulla riga della prima If.
Il campo ANNO_NUMERO_CONTRATTO nella tabella ANAGRAFICA_CONTRATTI è un campo calcolato di tipo intero lungo mentre il campo che si trova all'interno del controllo Me.ANNO_NUMERO_CONTRATTO è un campo numerico di tipo intero lungo.
La sintassi mi sembra giusta, anche se non ci metterei la mano sul fuoco.

Se escludo la prima If, la seconda funziona perfettamente.

Dove sbaglio?

Grazie per eventuali risposte.

Alex66

4 Risposte

  • Re: [Risolto] Errore di run-time 3075 con DCount

    alex66 ha scritto:


    un pulsante, ...mi deve cancellare un record in una maschera con sottomaschera
    Ho evidenziato appositamente solo questa parte di testo. Per me, prima di analizzare il codice VBA, se devi cancellare un record da maschera principale...cosa devi controllare prima? Vuoi fare dei controlli prima per non fare pasticci? Puoi spiegare meglio?
  • Re: [Risolto] Errore di run-time 3075 con DCount

    L'errore 3075 indica che non viene risolto il numero da assegnare al confronto con ANNO_NUMERO_CONTRATTO (quando viene effettuata la prima funzione Dcount).
    Controlla che tale valore sia accessibile alla Sub.
  • Re: [Risolto] Errore di run-time 3075 con DCount

    OsvaldoLaviosa ha scritto:


    alex66 ha scritto:


    un pulsante, ...mi deve cancellare un record in una maschera con sottomaschera
    Ho evidenziato appositamente solo questa parte di testo. Per me, prima di analizzare il codice VBA, se devi cancellare un record da maschera principale...cosa devi controllare prima? Vuoi fare dei controlli prima per non fare pasticci? Puoi spiegare meglio?
    Esattamente. Poiché dopo l'accettazione del preventivo deve essere emesso un contratto formale, nell'anagrafica contratti abbino il contratto al preventivo reciprocamente, ossia inserisco il numero del preventivo nel contratto e il numero del contratto nel preventivo.
    Onde evitare di cancellare un preventivo con contratto abbinato, vorrei controllare che non si verifichi questa evenienza ed impedire la cancellazione.

    Alex66
  • Re: [Risolto] Errore di run-time 3075 con DCount

    willy55 ha scritto:


    L'errore 3075 indica che non viene risolto il numero da assegnare al confronto con ANNO_NUMERO_CONTRATTO (quando viene effettuata la prima funzione Dcount).
    Controlla che tale valore sia accessibile alla Sub.
    Hai ragione tu. L'errore me lo da solo quando non c'è il numero di contratto e quindi valore "Null".

    Ho modificato così la If:
            If Not IsNull(Me.ANNO_NUMERO_CONTRATTO) Then
                If (DCount("[ANNO_NUMERO_CONTRATTO]", "ANAGRAFICA_CONTRATTI", "[ANNO_NUMERO_CONTRATTO] = " & Me.ANNO_NUMERO_CONTRATTO)) > 0 Then
                Beep
                MsgBox "Il Preventivo che si è tentato di eliminare" & Chr(13) & vbLf _
                & "è stato abbinato ad un Contratto!!!" & Chr(13) & vbLf _
                & "Se sei sicuro, devi prima disabbinare o eliminare il Contratto.", vbExclamation, "IMPOSSIBILE CANCELLARE IL PREVENTIVO!!!"
                Exit Sub
                End If
            End If
    
    Adesso funziona alla grande.

    Problema risolto!

    Grazie a tutti!!!

    Alex66
Devi accedere o registrarti per scrivere nel forum
4 risposte