Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Access Résolu - ACCESS 2016 Parcourir l'ensemble des tables de données

Polobe36

XLDnaute Occasionnel
Bonjour à tous,

N'ayant pas d'outils de requêtage autre qu'ACCESS, j'y ai importé les tables de la base de données GMAO que nous avons.

Je cherche à présent, par de la macro ou une rédaction SQL (dont malheureusement je ne maitrise pas le langage), à parcourir l'ensemble des tables "dont le nom commence par", et donc des champs de chacune des tables, pour y retrouver la valeur "maValeur".
J'imagine l'affichage du résultat par un tableau où je retrouverai la table concernée, le champ concerné ainsi qu'un autre champ de cette table nommé "ID".

Cela est-il possible ?
Si oui, pourriez-vous m'aider à mettre cela en application ?

Merci par avance, salutations
 
Solution
Bonjour,

Je pense que c'est le fait que dans la clause Where ("] = '" & strDonnee & "'") cela prend en compte les données de type texte, et il se peut que ton champ soit de type numérique.

Il faut donc intégrer la notion de données sur le type de champs et donc tester en amont sur la variable objFld le type, regarde dans l'aide tout ce qui concerne le type de l'objet Field.

Philippe

Polobe36

XLDnaute Occasionnel
Bonjour chris,

Oui en effet. Mais pour un souci de cohérence de données et plûtot que de passer un à un les objets à vérifier, j'espérais en une méthode qui pourrait m'aider à aller plus vite et à ne rien oublier.

Oui je connais le nom des tables de la GMAO et elles sont toutes liées.
Et la GMAO est sur Microsoft SQL Server

A ta disposition, cordialement
 

chris

XLDnaute Barbatruc
RE

Dans Access tu as bien les liens identiques entre les tables ?

Si tu sais où est l'info dans la GMAO tu devrais pouvoir cibler plus finement

Il y a combien de tables ?
 

Polobe36

XLDnaute Occasionnel
Bonjour,

La base est bien faite car je suis en mesure de connaitre les relations dans la plupart des cas par les références ID faite entre chaque table.

Mais mon problème est que en l'occurrence je cherche à connaitre quels sont tous les objets pères faisant référence à un objet fils. Et c'est là où il me faudrait parcourir un partie des tables pour le savoir, car je ne connais pas les dépendances d'un objet en simplement liant les tables dans ACCESS.

Et le top serait de faire une recherche d'un ID unique dans tout ou partie de la base, ce qui me donnerait tous les objets contenant cette valeur, pour ainsi créer les relations entre.

En tout, il y en a une bonne centaine je pense, mais elles sont réparties par module et on peut donc cibler par un "commence par".

Salutations
 

chris

XLDnaute Barbatruc
Re

Dans Access j'imagine mal comment procéder

Je tenterais d'attaquer cela via PowerQuery depuis Excel.

Tenter une union des tables et filtrer sur leur noms me parait faisable sauf si chaque nom de champ est préfixé avec un ID pour la table...
 

Philippe_JOCHMANS

XLDnaute Junior
Bonjour,

Voici un exemple de code qui pourrait le faire si j'ai bien compris.

VB:
Public Sub Recherche()
    ' Déclaration des variables
   
    Dim strCommeTable As String
    Dim strDonnee As String
    Dim objTDF As TableDef
    Dim objFld As Field
    Dim strSql As String
    Dim rst As DAO.Recordset
   
    ' Initialisation des variables
    strCommeTable = "2"                ' saisir par quoi doit commencer la table
    strDonnee = "C011019"             ' valeur que l'on recherche
   
    ' parcours des tables de la base qui correspondent à un critère
   
    For Each objTDF In CurrentDb.TableDefs
        If objTDF.Name Like strCommeTable & "*" Then
        ' maitenant on parcours les champs de la table
            For Each objFld In objTDF.Fields
                Debug.Print objFld.Name
                strSql = "SELECT [" & objFld.Name & "] FROM [" & objTDF.Name & "] WHERE [" & objFld.Name & "] = '" & strDonnee & "'"
                Set rst = CurrentDb.OpenRecordset(strSql)
                While Not rst.EOF
                    MsgBox objTDF.Name & "  -  " & objFld.Name
                rst.MoveNext
                Wend
   
           Next objFld
        End If
    Next objTDF
   
End Sub

Je ne l'ai pas optimisé, il y a sûrement plus rapide.

Philippe
 

Polobe36

XLDnaute Occasionnel
Bonjour Philippe,

Merci pour votre aide.
J'ai eu erreur au moment ou l'on se situe sur le premier champ d'une des tables recherchées:
"Erreur d'exécution '3464':
Type de données incompatible dans l'expression du critère."


Sauriez-vous pourquoi ?
 

Philippe_JOCHMANS

XLDnaute Junior
Bonjour,

Je pense que c'est le fait que dans la clause Where ("] = '" & strDonnee & "'") cela prend en compte les données de type texte, et il se peut que ton champ soit de type numérique.

Il faut donc intégrer la notion de données sur le type de champs et donc tester en amont sur la variable objFld le type, regarde dans l'aide tout ce qui concerne le type de l'objet Field.

Philippe
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…