Bonjour,
Je suis connecté à une base Access via OLE DB 4.0 et je tente de lire la table Msysobjects.
J'ai l'erreur suivante :
pas d'autorisarion de lecture sur Msysobjects.
Comment peut-on faire pour contourner ce problème?
MErci d'avance
Bonjour,
Je suis connecté à une base Access via OLE DB 4.0 et je tente de lire la table Msysobjects.
J'ai l'erreur suivante :
pas d'autorisarion de lecture sur Msysobjects.
Comment peut-on faire pour contourner ce problème?
MErci d'avance
Arrives tu à lire la table depuis Access ?
Peut être une limitation du fournisseur OLEDB
Mais pourquoi veut tu lire cette table ? Ce n'est pas très conseillé
Je veux récupérer les liaisons entre les tables.
C'est effectivement peut être une limitation d'OLE DB qui ne permet pas de lire les tables systèmes.
ceci dit ça vient d'Access car sous Oracle, Sql server ou autre on y arrive.
Pour une telle manipulation, il est préférable de travailler avec les modèles objets correspondant plutot que de lire les données dans les tables systèmes (qui dépendent des versions d'Access). Avec ADOX par exemple, tu pourras consulter facilement les relations
Merci pour ton aide, il y a de la docu sur ADox sur le site?
ou alors c'est simple et tu peux m'indiquer rapidement?
Encore une fois merci, je vais regarder ça de plus près !!
Supprimer l'erreur "Impossible de lire les enregistrements; pas d'autorisation de lecture sur 'MSysObjects'"
IL faut modifier (ou créer) à partir d'access le fichier System.mdw présent normalement par défaut dans "C:\Documents and Settings\votre_compte\Application Data\Microsoft\Access\System.mdw"
Ce fichier contient les informations du groupe de travail gérant les droits d'accès des utilisateurs au différentes tables de la base.
Voir : Comprendre et mettre en oeuvre la sécurité sous Microsoft Access
-Ouvrir dans Access la base à accéder
-Faire Outils/Sécurité/Administrateur du groupe de travail puis rejoindre
Si le fichier System.mdw existe :
-Sélectionner le fichier System.mdw
Sinon
-Créer le fichier System.mdw
-Faire Outils/Sécurité/Autorisations d'accès
-Dans la liste "type objet" sélectionner "tables"
-Dans la liste "Nom objet" sélectionner "'MSysObjects"
-Dans la partie "Autorisations d'accès", cliquer sur "Administrer"
Vous pouvez accéder au fichier.
Avec Windev, exemple de code pour lister les tables d'une base access :
Bonne prog !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 //Connection à la source de données b_result = SQLConnecte(c:\ma_base_access.mdb,"","passe","","OLEDB","Microsoft.Jet.OLEDB.4.0") SI b_result = 0 ALORS SQLInfoGene() Info("Code erreur : "+SQL.Erreur+RC+... SQL.MesErreur) RETOUR FIN //Exécution de la requête SI PAS SQLExec("SELECT MSysObjects.Name, MSysObjects.Type FROM MSysObjects WHERE MSysObjects.Type IN(6,1)","REQ" ALORS SQLInfoGene() Info("Code erreur : "+SQL.Erreur+RC+... SQL.MesErreur... ) SQLFerme("REQ") FIN i est un entier table_nom est une chaîne TANTQUE SQLAvance("REQ") = 0// Il y a encore une ligne à lire i++ table_nom = SQLLitCol("REQ", 1) tableAjouteLigne(ma_table,table_nom) FIN SQLFerme("REQ")
Alors ça c'est une bonne piste !!!!
Merci beaucoup ...
Bonjour,
Comment je fais la manip si MSysObject est invisible ? J'arrive à la trouver à partir d'une requête SELECT * mais elle n'apparaît ni dans la liste des tables, ni dans la fenêtre dans laquelle tu nous dis d'aller..
Merci
Outils/options/Affichage "objets système"Comment je fais la manip si MSysObject est invisible ? J'arrive à la trouver à partir d'une requête SELECT * mais elle n'apparaît ni dans la liste des tables, ni dans la fenêtre dans laquelle tu nous dis d'aller
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager