Condividi tramite

Routine per verificare la compilazione di alcuni campi in molte tabelle relazionate tra loro.

Anonimo
2023-01-16T14:24:41+00:00

Buon pomeriggio a tutti.

Ho un database molto complesso e con molti oggetti creati.

Ho molte tabelle in relazione tra loro con molti campi da compilare.

Chiedo a voi esperti di poter creare una routine da abbinare ad un pulsante di comando per poter verificare la compilazione di 2 campi per ogni maschera creata sulle molteplici tabelle del database.

Cioè, ad esempio, al lancio della funzione e/o routine VBA creare un elenco dei campi non compilati relativi alle tabelle processate.

Questo mi è necessario poichè le maschere in relazione con la prima (Anagrafica) sono una trentina e non sempre riesco a compilare i dati di mio interesse ( ad esempio se dovessi dimenticare di aprire una determinata maschera per inserire altri dati dello stesso dipendente).

Spero di essere stato chiaro.

Ciao, Nicola.

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

domenico laurenza 9,900 Punti di reputazione Moderatore volontario
2023-01-19T13:27:21+00:00

Ciao prova col seguente (in grassetto le modifiche)

Tabella = "tbl\_Sottoconti" 

**DoCmd.SetWarnings False** 

For Each myRel In CurrentDb.Relations 

    If myRel.Table = Tabella Then 

       Set myRs = CurrentDb.OpenRecordset("Select \* From [" & myRel.ForeignTable & "]") 

       Do While Not myRs.EOF 

          If DLookup("In\_Forza", "TblAnagrafica", "Id\_Anagrafica = " & myRs(0)) = -1 Then 

             For j = 0 To myRs.Fields.Count - 1 

                 If Len(myRs(j) & "") = 0 Then 

                    **DoCmd.RunSQL "INSERT INTO TblProva ( Testo\_Unico ) SELECT '" & myRel.ForeignTable & " - " & myRs(0).Name & ": " & myRs(0) & " - " & myRs(j).Name & "'"** 

                 End If 

             Next j 

          End If 

          myRs.MoveNext 

      Loop 

    End If 

Next 

Ciao Mimmo

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

14 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2023-01-19T09:14:24+00:00

    Ciao Sandro, buon giorno.

    Quello che mi consigli l'ho applicato nelle singole maschere in relazione con la tabella principale (tblAnagrafica) per quei campi che devono essere necessariamente compilati e tu mi hai insegnato a farlo.

    Nella realtà ho un dB con 35 maschere in relazione con la prima e che non sempre mi ricordo di aprire per compilarne i campi, cioè ad esempio quando censisco un dipendente, ho altre maschere ( tipo Titolo di studio; Residenza anagrafica, Trasferimenti precedenti, incarichi precedenti e altre informazioni necessarie per il mio lavoro).

    Se dovessi, per dimenticanza, non inserire i dati in una qualsiasi maschera, quei campi non saprei mai di averli omessi fino a circostanza opportuna.

    Ecco perchè ho voluto creare la possibilità di poterlo fare tramite funzione, cosi come ha fatto il nostro amico Mimmo.

    Spero di essere stato chiaro, Sandro.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-01-19T08:00:45+00:00

    ciao Nicola,

    non ti converrebbe semplicemente lavorare con l'evento beforeUpdate della form o del controllo/controlli per avviare l'utente in caso di mancata compilazione?

    potresti anche rendere maggiormente evidente il controllo non compilato cambiando il colore dello sfondo.

    HTH.

    ciao, Sandro

    ps. in passato sono certo che abbiamo trattato a più riprese questo argomento...

    La risposta è stata utile?

    0 commenti Nessun commento
  3. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2023-01-18T13:46:04+00:00

    Ciao Nicola,

    non puoi utilizzare la TransferSpreadsheet perchè non hai una tabella o una query da esportare in Excel.

    Come ti dicevo nel codice puoi creare una tabella dei vari dati che il debug.print produce e solo allora puoi effettuare una esportazione in Excel.

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-01-18T12:04:57+00:00

    Ciao Mimmo, funziona benissimo.

    Quanto all'esportazione dei dati in Excel. ho fatto in questo modo ed ottengo questo messaggio di errore:

    Function chk_TabelleRelazioni()

    Dim myRel As Relation 
    
    Dim myRs As Recordset 
    
    Dim j As Integer 
    
    Dim Tabella As String 
    
    Tabella = "TblAnagrafica" 
    

    For Each myRel In CurrentDb.Relations

        If myRel.Table = Tabella Then 
    
           Set myRs = CurrentDb.OpenRecordset("Select \* From [" & myRel.ForeignTable & "]") 
    
           Do While Not myRs.EOF 
    
              If DLookup("In\_Forza", "TblAnagrafica", "Id\_Anagrafica = " & myRs(0)) = -1 Then 
    
                 For j = 0 To myRs.Fields.Count - 1 
    
                     If Len(myRs(j) & "") = 0 Then 
    
                     **DoCmd.TransferSpreadsheet acExport, , myRel.ForeignTable & " - " & myRs(0).Name & ": " & myRs(0) & " - " & myRs(j).Name, "C:\Users\Desktop\prova.xlsx"** 
    

                        'Debug.Print myRel.ForeignTable & " - " & myRs(0).Name & ": " & myRs(0) & " - " & myRs(j).Name 
    
                     End If 
    
                 Next j 
    
              End If 
    
              myRs.MoveNext 
    
          Loop 
    
        End If 
    
    Next 
    

    End Function

    Cosa non va ancora.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento