Apertura form su nuovo record

di il
4 risposte

Apertura form su nuovo record

Buongiorno,

ho il seguente problema: in una form “A” ho un controllo combobox da cui seleziono records presi da tabella “B”. Qualora il record non fosse presente nella lista della combo, su doppio click apro la form “B” per inserirlo. Se invece il record e' presente e voglio ispezionarlo apro la form “B” filtrata. Di seguito l'evento:

Private Sub frmOCcboNUMtabOCIDtabOFid_DblClick(Cancel As Integer)
On Error GoTo Err_frmOCcboNUMtabOCIDtabOFid_DblClick

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "frmOFoffertefornitori"
    
    If IsNull(Me.frmOCcboNUMtabOCIDtabOFid.Value) Then
        DoCmd.OpenForm stDocName, , , , acFormAdd
    Else
        stLinkCriteria = "[IDtabOFid]=" & Me![frmOCcboNUMtabOCIDtabOFid]
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    End If
    
Exit_frmOCcboNUMtabOCIDtabOFid_DblClick:
    Exit Sub

Err_frmOCcboNUMtabOCIDtabOFid_DblClick:
    MsgBox Err.Description
    Resume Exit_frmOCcboNUMtabOCIDtabOFid_DblClick
End Sub

il problema e' che la form “B” si apre in modalita' di solo inserimento nuovi records (acFormAdd), per cui una volta salvato il record appena inserito, non e' piu' editabile o interrogabile.

C'e' un modo per aprire la form “B” dalla form “A” passando il comando DoCmd.RunCommand acCmdRecordsGoToNew?

O in alternativa si puo' modificare il valore del data entry mode della form “B” da acFormAdd (0) ad acFormEdit(1) quando questa e' gia' aperta, in modo da associarlo al tasto “Salva”?

Grazie in anticipo

4 Risposte

  • Re: Apertura form su nuovo record

    Provo a semplificare… se il record è presente apri in Visualizzazione quindi passi una WHERE COND, altrimenti apri e vai a nuovo.

    Private Sub frmOCcboNUMtabOCIDtabOFid_DblClick(Cancel As Integer)
    On Error GoTo Err_frmOCcboNUMtabOCIDtabOFid_DblClick
    
        Dim stDocName As String
        Dim stLinkCriteria As String
    
        stDocName = "frmOFoffertefornitori"
        
        If Not IsNull(Me.frmOCcboNUMtabOCIDtabOFid.Value) Then
            stLinkCriteria = "[IDtabOFid]=" & Me![frmOCcboNUMtabOCIDtabOFid]
            DoCmd.OpenForm stDocName, , , stLinkCriteria
        End If
        
    Exit_frmOCcboNUMtabOCIDtabOFid_DblClick:
        Exit Sub
    
    Err_frmOCcboNUMtabOCIDtabOFid_DblClick:
        MsgBox Err.Description
        Resume Exit_frmOCcboNUMtabOCIDtabOFid_DblClick
    End Sub

    Su Evento Load della tua Form:

    Private Sub Form_Load()
        If Not Me.FilterOn Then
            DoCmd.RunCommand acCmdRecordsGoToNew
        End If
    End Sub

    Funziona in quanto quando passi una WHERE COND, la proprietà FilterOn=True, altrimenti è False.

    L'ho testato e secondo me va bene… ma verifica se soddisfa la tua operatività.

  • Re: Apertura form su nuovo record

    Grazie Alex per la sintesi del codice, ma nel modo da Te suggerito, nel caso che la combo abbia valore nullo, non apre la form. La apre solo se c'e' la WHERE CONDITION.

    Per cui manterrei l' Else:

    Private Sub frmOCcboNUMtabOCIDtabOFid_DblClick(Cancel As Integer)
    On Error GoTo Err_frmOCcboNUMtabOCIDtabOFid_DblClick
    
        Dim stDocName As String
        Dim stLinkCriteria As String
    
        stDocName = "frmOFoffertefornitori"
        
        If Not IsNull(Me.frmOCcboNUMtabOCIDtabOFid.Value) Then
            stLinkCriteria = "[IDtabOFid]=" & Me![frmOCcboNUMtabOCIDtabOFid]
            DoCmd.OpenForm stDocName, , , stLinkCriteria
        Else
        	DoCmd.OpenForm stDocName, , , , acFormAdd
        End If
        
    Exit_frmOCcboNUMtabOCIDtabOFid_DblClick:
        Exit Sub
    
    Err_frmOCcboNUMtabOCIDtabOFid_DblClick:
        MsgBox Err.Description
        Resume Exit_frmOCcboNUMtabOCIDtabOFid_DblClick
    End Sub

    Inoltre volevo evitare di inserire l'evento su Load perche' l'apertura della maschera e' accessibile anche da altre forms per consultazione, senza necessita' di filtro.

    Nel frattempo mi studio questo che forse mi puo' essere di aiuto:

    https://support.microsoft.com/en-us/office/dataentry-property-f4236759-27f6-4fcd-abb0-4aa4acd8fe87

  • Re: Apertura form su nuovo record

    So che la soluzione e' un “accrocchio” ma penso di aver risolto nel seguente modo: nella prima form mantengo il codice postato sopra, quando la form "B" si apre in modalita' di inserimento, inserisco il nuovo record e al comando salva, chiudo la form e la riapro in modalita' standard.

    Private Sub frmOFcmdsalva_Click()
    On Error GoTo Err_frmOFcmdsalva_Click
    
    
    Dim stDocName As String
    
        stDocName = "frmOFoffertefornitori"
        
        DoCmd.RunCommand acCmdSaveRecord
        
    
        DoCmd.Close
        DoCmd.OpenForm stDocName
     
        
    Exit_frmOFcmdsalva_Click:
        Exit Sub
    
    Err_frmOFcmdsalva_Click:
        MsgBox Err.Description
        Resume Exit_frmOFcmdsalva_Click
        
    End Sub
    
  • Re: Apertura form su nuovo record

    Si mi è scappato un pezzetto, ma non bastava fare così secondo te…?

    Private Sub frmOCcboNUMtabOCIDtabOFid_DblClick(Cancel As Integer)
    On Error GoTo Err_frmOCcboNUMtabOCIDtabOFid_DblClick
    
        Dim stDocName As String
        Dim stLinkCriteria As String
    
        stDocName = "frmOFoffertefornitori"
        
        If Not IsNull(Me.frmOCcboNUMtabOCIDtabOFid.Value) Then
            stLinkCriteria = "[IDtabOFid]=" & Me![frmOCcboNUMtabOCIDtabOFid]
            DoCmd.OpenForm stDocName, , , stLinkCriteria
        Else
        	DoCmd.OpenForm stDocName
        End If
        
    Exit_frmOCcboNUMtabOCIDtabOFid_DblClick:
        Exit Sub
    
    Err_frmOCcboNUMtabOCIDtabOFid_DblClick:
        MsgBox Err.Description
        Resume Exit_frmOCcboNUMtabOCIDtabOFid_DblClick
    End Sub

    Ed ovviamente tenere nel LOAD quello indicato….

Devi accedere o registrarti per scrivere nel forum
4 risposte