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 | Accesso | 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

  1. 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-17T11:29:42+00:00

    Ciao Mimo, buon giorno e grazie ancora per l'aiuto che mi dai.

    Ho fatto alcuni test sul mio database di copia e funziona bene.

    Ho la necessità di inserire nella funzione un'altra condizione che è quella di verificare le tabelle collegate alla principale ( tblAnagrafica) solo per quei dipendenti in servizio.

    Questa condizione è dettata dal campo chiamato (In_Forza) , settato a Vero/Falso ed inserito nella TblAnagrafica.

    Cioè, dovrei aggiungere nella tua funzione la verifica del campo In_Forza uguale a true.

    Spero di essere stato chiaro.

    P.S. Mimmo, sarebbe possibile esportare i dati in un file di Excel per poter verificare con calma i campi vuoti e poterli regolarizzare, anzichè vederli nella finestra immediata.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2023-01-16T21:51:15+00:00

    Ciao,

    prova la seguente sostituendo il nome della Tabella "tbl_Sottoconti" con la tua "Anagrafica", per ora ottieni solo l'elenco dei campi vuoti nelle tabelle in relazione con quella impostata.

    Option Compare Database

    Option Explicit

    Function chk_TabelleRelazioni()

    Dim myRel As Relation 
    
    Dim myRs As Recordset 
    
    Dim j As Integer 
    
    Dim Tabella As String 
    
    Tabella = "tbl\_Sottoconti" 
    
    For Each myRel In CurrentDb.Relations 
    
        If myRel.Table = Tabella Then 
    
           Set myRs = CurrentDb.OpenRecordset("Select \* From [" & myRel.ForeignTable & "]") 
    
           Do While Not myRs.EOF 
    
              For j = 0 To myRs.Fields.Count - 1 
    
                  If Len(myRs(j) & "") = 0 Then 
    
                     Debug.Print myRel.ForeignTable & " - " & myRs(0).Name & ": " & myRs(0) & " - " & myRs(j).Name 
    
                  End If 
    
              Next j 
    
              myRs.MoveNext 
    
           Loop 
    
        End If 
    
    Next 
    

    End Function

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-01-16T19:57:19+00:00

    Ciao Mimmo, buona sera. Grazie per il tuo cortese e puntuale riscontro.

    In realtà i campi da controllare non hanno lo stesso nome nelle varie tabelle.

    Il progetto sul quale eseguire il controllo dei vari campi è simile a quello che mi hai fornito tu tempo fa.

    Dove ad ogni ID_Anagrafica della tabella Anagrafica corrispondono vari ID_Angrafica delle tabelle (es. TblResidenza;TblTitoloStudio ecc)

    Quindi dovrei verificare i campi titolo di studio nella tblTitoloStudio e cosi via per altri.

    Cioè, se esiste un dipendente nella tabella Anagrafica devo verificare alcuni campi di alcune tabelle collegate a quest'ultima.

    Spero di essere stato chiaro.

    Fammi sapere se posso utilizzare la tua funzione per questo.

    Ciao, Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. domenico laurenza 9,900 Punti di reputazione Moderatore volontario
    2023-01-16T17:48:49+00:00

    Ciao Nicola,

    se ho capito bene la domanda, prova la seguente funzione.

    La funzione restituisce il nome della tabella, il nome e il valore del primo campo della tabella (che dovrebbe essere il campo Id della tabella) ed il nome del campo del record che risulta essere assente.

    Nel codice effettuo la ricerca per il campo "Codice" che dovrai personalizzare.

    Option Compare Database

    Option Explicit

    Function chk_Tabelle()

    Dim myTdf As TableDef 
    
    Dim myRs As Recordset 
    
    Dim i As Integer 
    
    Dim j As Integer 
    
    For i = 0 To CurrentDb.TableDefs.Count - 1 
    
        If Left(CurrentDb.TableDefs(i).Name, 4) <> "MSys" Then 
    
           Set myRs = CurrentDb.OpenRecordset("Select \* From [" & CurrentDb.TableDefs(i).Name & "]") 
    
           Do While Not myRs.EOF 
    
              For j = 0 To myRs.Fields.Count - 1 
    
                 If myRs(j).Name = "Codice" Then 
    
                    If Len(myRs(j) & "") = 0 Then 
    
                       Debug.Print CurrentDb.TableDefs(i).Name & " - " & myRs(0).Name & ": " & myRs(0) & " - " & myRs(j).Name 
    
                    End If 
    
                 End If 
    
              Next j 
    
              myRs.MoveNext 
    
           Loop 
    
        End If 
    
    Next i 
    

    End Function

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento