Описание системной таблицы MS Access - MSysObjects
Автор NSA   
18.11.2001 г.
Поскольку, к сожалению, я нигде не смог найти описаний этих таблиц приведенная ниже информация была получена мной исключительно в процессе экспериментов над ними... (C сайта NSA)

Описание системных таблиц MS Access

В этой статье хочу рассказать о системных таблицах MS Access - для чего они нужны, что в них содержиться и какую (порой весьма интересную) информацию можно из них извлечь. Поскольку, к сожалению, я нигде не смог найти описаний этих таблиц приведенная ниже информация была получена мной исключительно в процессе экспериментов над ними. Так что не исключено, что есть какие-то неточности или ошибочные выводы. Ну и, естественно, ни в коем разе не претендую на полноту изложенной информации.

MS Access имеет семь ситемных таблиц: MSysACEs, MSysCmdbars, MSysModules, MSysModules2, MSysObjects, MSysQueries и MSysRelationships.

Таблица MSysObjects.

На мой взгляд - самая "важная" таблица. Содержит информацию об объектах базы данных.

Эта таблица имеет следующие поля:

Имя поля Тип поля
Connect Поле МЕМО
Database Поле МЕМО
DateCreate Дата/время
DateUpdate Дата/время
Flags Числовой
ForeignName Текстовый (255)
Id Числовой (Long Int)
Lv Поле объекта OLE
LvExtra Поле объекта OLE
LvModule Поле объекта OLE
LvProp Поле объекта OLE
Name Текстовый (255)
Owner Двоичный (255)
ParentId Числовой (Long Int) Prim.key
RmtInfoLong Поле объекта OLE
RmtInfoShort Двоичный (255)
Type Числовой (Integer)

Id - ключевое поле. Содержит уникальный идентификатор для каждого объекта БД.

ParentId - значение Id "родительского" объекта. Например если объект "Forms" имеет Id = -2147483648, то все формы будут иметь "-2147483648" в поле ParentId. Стоит заметить, что у всех запросов и таблиц БД один и тот же "родитель" - "Tables".

Type - тип объекта БД. Вот значения этого поля для некоторых типов объектов:

Тип объекта БД Значение поля Type
"Родные" таблицы (в том числе и системные) 1
Глобальные "семейства" объектов (Relationships, Databases, Tables, Modules, SysRel, Scripts, Forms, Reports) 3
Запросы (в том числе и те, которые на самом деле являются SQL-выражениями в источниках данных форм, отчетов, элементов управления и т.д.) 5
Прилинкованные таблицы 6
Формы -32768
Отчеты -32764
Макросы -32766
Модули (в том числе модули классов) -32761


Name - имя объекта. Для запросов, которые на самом деле являются SQL-выражениями источников записей это имя стоится по определенным правилам:

  • Источник записей формы (префикс ~sql_f): ~sql_fИмяФромы
    Для источника записей формы с именем Form1 это имя будет ~sql_fForm1
  • Источник записей отчета (префикс ~sql_r): ~sql_rИмяОтчета
    Для источника записей отчета с именем Report1 это имя будет ~sql_rReport1
  • Источник строк элемента управления (например списка) формы (префикс ~sql_c): ~sql_cИмяФормы~sql_cИмяЭлементаУправления
    Для элемента управления с именем MyListBox1 в форме с именем Form1 это имя будет ~sql_cForm1~sql_cMyListBox1
  • Источник строк элемента управления (например списка) отчета (префикс ~sql_d): ~sql_dИмяОтчета~sql_dИмяЭлементаУправления
    Для элемента управления с именем MyListBox1 в отчета с именем Report1 это имя будет ~sql_dReport1~sql_dMyListBox1

ForeignName - для прилинкованных таблиц в этом поле содержиться "реальное" имя таблицы. Например если талица с имем Table1 прилинкована с именем MyTable1, то в поле Name будет MyTable1, а в поле ForeignName - Table1. А для прилинкованного документа Excel в этом поле будет имя листа - например Лист1$.

Database - для прилинкованных таблиц в этом поле содержиться полный путь и имя файла, откуда была прилинкована таблица. Для прилинкованных Access-ных таблиц это будет, например, D:DBasesMyBase.mdb, а для Excel-еских - C:MyDocumentsRaspisanie.xls.

Connect - для прилинкованныз НЕ-Access-ных таблиц в этом поле содержиться значение свойства Connect. Например для Excel это будет Excel 5.0;HDR=NO;IMEX=2;

DateCreate - дата и время создания объекта.

DateUpdate - дата и время обновления объекта.

Для чего нужны остальные поля этой таблицы - не знаю.

А теперь посмотрим, какие данные мы можем получить из этой таблицы:

Что можем получить SQL
Список "родных" таблиц SELECT MSysObjects.Id, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((Left([Name],4))<>"MSys" And (Left([Name],4))<>"USys"));
Список присоединенных таблиц SELECT MSysObjects.Id, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Type)=6) AND ((Left([Name],4))<>"MSys" And (Left([Name],4))<>"USys"));
Список "родных" и присоединенных таблиц SELECT MSysObjects.Id, MSysObjects.Name, MSysObjects.Type
FROM MSysObjects
WHERE (((MSysObjects.Type)=1 Or (MSysObjects.Type)=6) AND ((Left([Name],4))<>"MSys" And (Left([Name],4))<>"USys"));
Список запросов SELECT MSysObjects.Id, MSysObjects.Name
FROM MSysObjects
WHERE (((Left([Name],4))<>"~sq_") AND ((MSysObjects.Type)=5));
Список форм SELECT MSysObjects.Id, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Type)=-32768));
Список отчетов SELECT MSysObjects.Id, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Type)=-32764));
Список макросов SELECT MSysObjects.Id, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Type)=-32766));
Список модулей SELECT MSysObjects.Id, MSysObjects.Name
FROM MSysObjects
WHERE (((MSysObjects.Type)=-32761));
Список форм, имеюших выражение SQL в источнике SELECT MSysObjects_1.Id AS [Id Форм], Right([MSysObjects]![Name],Len([MSysObjects]![Name])-5) AS [Имя формы], MSysObjects.Id AS [Id Запроса]
FROM MSysObjects, MSysObjects AS MSysObjects_1
WHERE (((Right([MSysObjects]![Name],Len([MSysObjects]![Name])-5))= [MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_f") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32768));
Список отчетов, имеюших выражение SQL в источнике SELECT MSysObjects_1.Id AS [Id Отчета], Right([MSysObjects]![Name],Len([MSysObjects]![Name])-5) AS [Имя отчета], MSysObjects.Id AS [Id Запроса]
FROM MSysObjects, MSysObjects AS MSysObjects_1
WHERE (((Right([MSysObjects]![Name], Len([MSysObjects]![Name])-5))=[MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_r") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32764));
Список элементов управления форм, имеюших выражение SQL в источнике SELECT MSysObjects_1.Id, Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name],"~sq_c")-6) AS [Имя формы], Mid([MSysObjects]![Name],InStr(2,[MSysObjects]![Name],"~sq_c")+5) AS [Имя элемента]
FROM MSysObjects AS MSysObjects_1, MSysObjects
WHERE (((Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name], "~sq_c")-6))=[MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_c") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32768));
Список элементов управления отчетов, имеюших выражение SQL в источнике SELECT MSysObjects_1.Id, Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name],"~sq_d")-6) AS [Имя отчета], Mid([MSysObjects]![Name],InStr(2,[MSysObjects]![Name],"~sq_d")+5) AS [Имя элемента]
FROM MSysObjects, MSysObjects AS MSysObjects_1
WHERE (((Mid([MSysObjects]![Name],6,InStr(2,[MSysObjects]![Name], "~sq_d")-6))=[MSysObjects_1]![Name]) AND ((Left([MSysObjects]![Name],5))="~sq_d") AND ((MSysObjects.Type)=5) AND ((MSysObjects_1.Type)=-32764));

Просмотров: 27900

  Коментарии (2)
 1 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 10:23 21.02.2008
С этим все понятно! 
А как изменять данные в системной таблице?! 
(Разобрался как залезть в конструктор, но данные не меняются) 
:sigh 

 
Никак
 2 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 18:00 21.02.2008
Плохие программисты раз "никак". Сам Access то данные туда вносит ;) 
Ну, а как связать таблицу с Excel'евским файлом, при условии что загружаться должна не вся область (или область печати), а определенный диапазон. Например Лист1!A3:D6 :p 

 
Ну Вы похоже то же не очень раз сами не знаете.
 
Про Excel - легко. Читаейте Help, там как минимум 2 способа описаны.
 
Здесь место для комментов к статьям.Вопросы нужно задавать в форум
 

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code