Nuovo record e Cancellazione record da maschera e sottomaschera

Anonimo
2015-07-30T12:47:46+00:00

Buonasera a tutta la community,

nell'attesa di ricevere una risposta alla mia precedente domanda,

vi chiedo cortesemente se potete attenzionare questo problemino.

Nel db ho creato una maschera con all'interno una sottomaschera. Nella maschera

inserisco i dati generici di una campagna promozionale, nella sottomaschera

inserisco i tabelloni pubblicitari che affitto (quindi la relazione è 1: molti).

Nel piè di pagina della maschera ho inserito 2 pulsanti: "Nuovo Record" e "Elimina Record".

Vorrei che clikkando sul pulsante "Nuovo Record" sia la maschera che la sottomaschera si

predisponessero per ricevere nuovi dati. Stessa cosa per l'eliminazione. Clikkando il

pulsante "Elimina Record" vorrei che venisse eliminato il record della maschera con tutti

i record della sottomaschera ad esso relazionati.

Spero di essere stato chiaro nella spiegazione

Ringrazio sin d'ora tutti per l'aiuto.

fausto

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
Risposta accettata dall'autore della domanda
Anonimo
2015-07-30T17:43:36+00:00

ciao Fausto,

consiglio...

imposta sempre l'option explicit nei moduli, che siano moduli standard, di classe, o i moduli delle forms, che sono comunque di classe pure quelli, è un'aiuto al debug notevolissimo.

Non sei distantissimo dalla corretta impostazione....però lanci una currentDb execute e cancelli il record e poi una cancellazione del record con runcommand...forse ridondante come approccio, a meno che la seconda cancellazione non sia del record parent.

ti posto un esempio :  http://1drv.ms/1JynaWm fausto.accbd, basato sul fatto di NON avere impostato la cancellazione a catena.

il codice è il seguente.

A cancellazione avvenuta il recorset si sposta sul record corrente pre-cancellazione, ho inserito la gestione errori ed il controllo sul newRecord.

HTH.

ciao, Sandro.

Option Compare Database

Option Explicit

Private Sub cmdElimina_Click()

On Error GoTo errorHandler

Dim intId As Integer

If Not Me.NewRecord Then

    If MsgBox("vuoi cancellare il fornitore :" & Me.NomeSocietà & vbNewLine _

             & " e tutti i records ad esso correlati?", vbCritical + vbYesNo, "Attenzione") = vbYes Then

         intId = Me.CurrentRecord

         DBEngine(0)(0).Execute "delete * from prodotti where idfornitore=" & Me.IDFornitore

         DBEngine(0)(0).Execute "delete * from fornitori where idfornitore=" & Me.IDFornitore

         Me.Requery

         Me.Recordset.Move intId - 1

    End If

Else

    MsgBox "ti trovi su un nuovo record, non ci sono dati da cancellare", vbInformation, "avviso£"

End If

ext_errorHandler:

    Exit Sub

errorHandler:

   With Err

       MsgBox "ERR#" & .Number _

            & vbNewLine & .Description _

            , vbOKOnly Or vbCritical

     End With

End Sub

Private Sub cmdNewRecord_Click()

DoCmd.GoToRecord acDataForm, Me.Name, acNewRec

End Sub

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-07-31T07:19:09+00:00

    Buongiorno Sandro, il tuo esempio è stato illuminante!! Adesso funziona tutto alla perfezione.

    Ho aggiunto anche "option explicit" all'inizio del modulo del form come mi hai detto.

    Se posso approfittare della tua bontà e delle tue conoscenze volevo chiederti la seguente:

    facendo delle prove mi sono accorto che mi occorre anche un tasto all'interno della sottomaschera

    per la cancellazione dei record della sottomaschera senza però intaccare il record della maschera principale.

    Nel tuo esempio, se volessi cancellare solo qualche prodotto senza cancellare il fornitore...

    Mi daresti qualche suggerimento in merito?

    Grazie sempre per il tuo aiuto!!!

    fausto

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-07-30T15:55:03+00:00

    Buonasera Sandro,

    intanto ti ringrazio per la risposta. Il problema è che non ci ho capito niente...

    Non sono così bravo con access. Sto imparando ora qualcosina facendo prove e leggendo quà e là..

    Ti dico quello che ho scopiazzato io e tu mi dici cosa c'è di sbagliato o cosa va aggiunto, che ne dici?

    Option Compare Database

    Private Sub CmdDelete_Click()

        Dim intAnswer As Integer

    On Error Resume Next

        intAnswer = MsgBox("Sei sicuro di vole eliminare questo Record?", _

            vbQuestion + vbYesNo, "Elimina Record")

        If intAnswer = vbYes Then

            CurrentDb.Execute ("DELETE FROM tblAffissioni WHERE IDAffissione = " _

                & cboQuickSearch.Value)

            RunCommand acCmdSelectRecord

            DoCmd.RunCommand acCmdDeleteRecord

        End If

    End Sub

    Riguardo il nuovo record ho utilizzato il tuo suggerimento e funziona. Grazie!!

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-07-30T14:30:39+00:00

    .....se hai impostato l'eliminazione records a catena non serve la prima execute....

    Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-07-30T13:16:08+00:00

    ciao Fausto.

    anche cos' :

    cancellazione, dalla form principale :

    DBEngine(0)(0).Execute "delete * from tuaTabella where idFK=" & Me.idFK, dbFailOnError

    DBEngine(0)(0).Execute "delete * from tuaTabella1 where idPK=" & Me.IDPK, dbFailOnError

    Me.Requery

    tuaTabella è la la tabella di origine della form child, tuaTabella1 la tabella di origine nella parent.

    idPK, idPF sono la chiave primaria ed esterna che regolano la relazione.

    per aggiungere un record :

    DoCmd.GoToRecord , , acNewRec

    gestisci gli errori (cosa succede se aggiungi un record e tenti di cancellarlo...?) e,....ovviamente ci sono considerazione qualore le tabella siano relazionate con altre per quanto alla cancellazione.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento