2010-10-22 11 views
6

che sto quering le MSysObjects tavolo per fare un elenco degli oggetti nel mio database:Significato MSysObjects valori -32.758, -32.757 e 3 (Microsoft Access)

SELECT MsysObjects.Name, MsysObjects.Type 
FROM MsysObjects 
WHERE (((Left$([Name],1))<>'~') AND ((Left$([Name],4))<>'Msys')) 
ORDER BY MsysObjects.Name; 

io conosco il significato di questi valori :

-32768 = Form 
-32766 = Macro 
-32764 = Report 
-32761 = Module 
1 = Table 
5 = Query 
6 = Linked Table 

Ma che dire di -32758, -32757 e 3? Dove stanno per? Non riesci a trovarlo sul web.

risposta

11
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

+0

Grazie! Ma non dovrebbero esserci informazioni "ufficiali" da qualche parte in Microsoft? – waanders

+0

Per quanto mi ricordi, MS non vuole che ti curi nei tavoli di sistema, può fare cose davvero orribili al tuo DB se non sai cosa stai facendo. Non sono documentati e le persone usano sempre per inviare un avvertimento quando li menzionano. Tuttavia, sembra essersi fermato. – Fionnuala

+0

Beh, per uno, MS ha promesso (secondo Michael Kaplan) che una volta qualcosa in una tabella di sistema viene usato per qualcosa, sarà sempre supportato. Come sai la differenza tra oggetti usati e non usati, non ne ho idea, ma è così. –

3

avrei tendo ad evitare pasticciare in giro con le tabelle di sistema. Per uno, gli oggetti temporanei possono mostrarsi lì e confondere le cose. Per ottenere le stesse informazioni, è possibile utilizzare:

CurrentDB.TableDefs 
    CurrentDB.QueryDefs 
    CurrentProject.AllForms 
    CurrentProject.AllReports 
    CurrentProject.AllMacros 

Questo è il modo documentato per ottenere le informazioni. A seconda delle tabelle di sistema non documentate non è raccomandato.

+0

AFAIK, una macro essere accessibile solo da AllMacros se è aperto per primo, e non c'è alcun modo _reliable_ (* cough * SendKeys * cough *) per aprire una macro dal codice. – Pastymage

0

FWIW - IIF è un trascinamento e la soluzione di commutazione non sembra valida per SQL (potrebbe aver fatto qualcosa di sbagliato). Ho inserito i valori che Fionnuala offerto in una nuova tabella denominata 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 

poi utilizzato il seguente SQL per creare una lista di nomi di oggetti e dei loro punti di vista. Ovviamente si potrebbe includere ogni record se si voleva:

SELECT objectdesc, Count(*) AS Expr1 
FROM msysobjects, AccessObjectTypeXref where type = objecttype 
group by objectdesc order by objectdesc 
+0

jchad dovresti formattare i tuoi messaggi usando [questa sintassi] (https://stackoverflow.com/help/formatting) – asymmetric

1

Fase 1 Crea una tabella "AccessObjectType" Colonne:

  • TypeID autonumber
  • testo TypeStr
  • ShowUser Sì/No
  • ShowAdmin Sì/No

popolare il "AccessObjectType" tabella:

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 

Se si desidera, è possibile creare un'altra colonna denominata "SimpleType" per il raggruppamento di 1, 4 e 6 tipo semplice tabella.

Fase 2 Creare query "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; 

Fase 3 Creare una tabella "AccessObjectVisibility" Colonne:

  • ObjectID finché (creare una ricerca usando AccessObjectQ)
  • UserVisible come Sì/No
  • AdminVisible come Sì/No

È ora possibile aprire facilmente questo tavolo (o una query) e selezionare gli oggetti che si desidera che gli utenti e gli amministratori di vedere nelle liste popolate automaticamente forniti su forme.

Fase 4 Creare query "UserAccessObject"

Select * from AccessObjectVisibility where UserVisible = True 

Creare query "UserAccessForm"

Select * from AccessObjectVisibility where UserVisible = True and TypeID = -32768 

Creare query: "UserAccessReport", "UserAccessQuery", "UserAccessMacro", etc.

Passaggio 5 " Creare un menu di report personalizzati utilizzando la query "UserAccessReport" per compilare una casella di riepilogo o una casella combinata

+0

Ti preghiamo di indentare le parti del codice con quattro spazi (o semplicemente selezionarli e selezionare il pulsante "codice" nell'editor) , questo non è veramente leggibile. –

Problemi correlati