Signification des valeurs de MsysObjects -32758, -32757 et 3 (Microsoft Access))
je questionne la table MsysObjects pour faire une liste des objets dans ma base de données:
SELECT MsysObjects.Name, MsysObjects.Type
FROM MsysObjects
WHERE (((Left$([Name],1))<>'~') AND ((Left$([Name],4))<>'Msys'))
ORDER BY MsysObjects.Name;
je connais la signification de ces valeurs:
-32768 = Form
-32766 = Macro
-32764 = Report
-32761 = Module
1 = Table
5 = Query
6 = Linked Table
mais qu'en est-il de -32758, -32757 et 3? Où vont-ils? Impossible de le trouver sur le web.
5 réponses
Type TypeDesc -32768 Form -32766 Macro -32764 Reports -32761 Module -32758 Users -32757 Database Document -32756 Data Access Pages 1 Table - Local Access Tables 2 Access Object - Database 3 Access Object - Containers 4 Table - Linked ODBC Tables 5 Queries 6 Table - Linked Access Tables 8 SubDataSheets
-- http://www.access-programmers.co.uk/forums/showthread.php?t=103811
j'éviterais de me salir avec les tables du système. D'une part, les objets temporaires peuvent y apparaître et embrouiller les choses. Pour obtenir la même information, vous pouvez utiliser:
CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros
C'est la façon documentée d'obtenir l'information. Selon les tables de système non documentées n'est pas recommandé.
Étape 1 Créer la table " AccessObjectType" Colonnes:
- TypeID autonumber
- TypeStr text
- ShowUser Oui/Non
- ShowAdmin Oui /Non
remplir la table "AccessObjectType":
TypeID TypeStr ShowUser ShowAdmin
-32775 Module False True
-32772 Report True True
-32768 Form True True
-32766 Macro True True
-32764 Report True True
-32761 Module False True
-32758 User False False
-32757 Database Document False False
1 Table (local) True True
2 Access Object - Database False True
3 Access Object - Container False True
4 Table, linked ODB SQL True True
5 Query True True
6 Table, Linked Access Excel True True
7 Type 7 True True
8 SubDataSheet True True
si vous voulez, vous pouvez créer une autre colonne appelée "SimpleType" pour le groupement de 1, 4 et 6 comme simple type de Table.
l'Étape 2 Créer Une Requête " AccessObjectQ" SQL:
SELECT MSysObjects.Id,
MSysObjects.Name,
[Name] & " (" & [TypeStr] & ")" AS NameAndType,
[TypeStr] & ": " & [Name] AS TypeAndName,
Abs([Type]) AS ObjTypeID,
AccessObjectType.TypeStr,
AccessObjectType.ShowUser,
AccessObjectType.ShowAdmin
FROM MSysObjects LEFT JOIN AccessObjectType
ON MSysObjects.Type = AccessObjectType.TypeID
WHERE (((MSysObjects.Name) Not Like "msys*"
And (MSysObjects.Name) Not Like "*subform"
And (MSysObjects.Name) Not Like "*_*"
And (MSysObjects.Name) And (MSysObjects.Name) Not Like "*SF"
And (MSysObjects.Name) Not Like "*SQ"
And (MSysObjects.Name) Not Like "*~*")
AND (((AccessObjectType.ShowUser)=True) OR ((AccessObjectType.ShowAdmin)=True)))
ORDER BY MSysObjects.Name;
Étape 3 Créer une table " AccessObjectVisibility" Colonnes:
- ObjectID (créer une recherche à l'aide de AccessObjectQ)
- UserVisible que Oui/Non
- administrable as Yes /No
vous pouvez maintenant ouvrir facilement ce table (ou une requête) et sélectionnez les objets que vous voulez que les utilisateurs et les administrateurs voient dans les listes automatiquement remplies que vous fournissez sur les formulaires.
Étape 4 Créer Une Requête "UserAccessObject "
Select * from AccessObjectVisibility where UserVisible = True
Créer Une Requête "UserAccessForm"
Select * from AccessObjectVisibility where UserVisible = True and TypeID = -32768
créer des requêtes:" UserAccessReport"," UserAccessQuery"," UserAccessMacro", etc.
Étape 5 " Créer un personnalisé menu Rapports utilisant la requête "UserAccessReport" pour peupler une boîte de liste ou boîte de combo
FWIW-IIF est un drag, et la solution switch ne semble pas valide pour SQL (j'ai peut-être fait quelque chose de mal). J'ai entré les valeurs que Fionnuala offert dans une nouvelle table appelée AccessObjectXref:
ID ObjectType ObjectDesc
1 -32768 Form
2 -32766 Macro
3 -32764 Report
4 -32761 Module
5 -32758 Users
6 -32757 DB Document
7 1 Table
8 2 DB
9 3 Container
10 5 Query
11 8 Subdatasheet
a ensuite utilisé le SQL suivant pour créer une liste de noms d'objets et leurs comptes. Évidemment, vous pouvez inclure tous les enregistrements si vous voulait:
SELECT objectdesc, Count(*) AS Expr1
FROM msysobjects, AccessObjectTypeXref where type = objecttype
group by objectdesc order by objectdesc
Re David Fenton est la bonne réponse au-dessus , voici la documentation de ces techniques:
- modèle d'objet de base de données Access:
- objet de Base de données . TableDefs et QueryDefs sont des propriétés.
- Accès au modèle d'objet du projet:
- CurrentProject Object . Les propriétés comprennent toutes les formes, AllReports, AllMacros, et AllModules.
- il y a aussi un CurrentData Object avec propriétés AllTables et AllQueries. Ils ont des ensembles de propriétés différentes de Tablledefs et QueryDefs.
les distinctions sont intéressantes. Les Tables et les requêtes sont dans le modèle d'objet D'une base de données D'accès. Formulaires, états, macros et modules ne sont pas, mais sont, avec également des tables et des requêtes, dans le modèle d'objet d'un projet D'accès.