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.

7
demandé sur waanders 2010-10-22 12:10:56

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

14
répondu Fionnuala 2014-02-01 09:58:35

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é.

3
répondu David-W-Fenton 2010-10-23 01:25:39

É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

1
répondu cadvena 2016-04-19 08:45:39

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
0
répondu jchad 2015-11-25 21:52:43

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:
  • 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.

0
répondu NewSites 2018-09-24 01:24:55