LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)




































Выпуск 27. Пароль Access 2000

Подписка: "Access 2000 - программирование и готовые решения"
Дата:         28.03.2001
Сайт:         http://www.leadersoft.ru
Слоган:     Если база Вам нужна, в LeaderSoft зайди сперва.
Комментарий: 
      Мы разрабатываем по заказам клиентов различные программы, используя Microsoft Access. Базы данных разрабатываются "с нуля" или, используя готовые решения (Склад, Касса, Банк и т.п.), что позволяет достаточно гибко решать финансовые вопросы по оплате услуг за разработку. Для регистрации заказа заполните форму: Регистрация заказа на разработку


Объявление из Гостевой книги
   Господа, помогите найти хорошего программиста на Access (DAO, SQL) для постоянной
работы (создание новых приложений и администрирование существующей БД). Условия работы: полный рабочий день (с 9.00 до 18.00 или с 10.00 до 19.00), два выходных (в основном суббота, воскресенье, но возможны при необходимости и плавающие), обед частично оплачивается фирмой (замечательный обед за 15 руб.), 2+2 недели отпуск. Зарплата 350 у.е на испытательный срок (1 месяц), далее 400. Есть перспектива роста по результатам работы. И ещё, у нас хороший коллектив.
   Обращаться к Гуляевой Марии, URL: http://www.acom.ru. Город: Москва.

Новости
   20.03.2001. Толмачева Галина  добавила новый ответ к вопросу 224 (Объединение-сортировка, 25 выпуск)
   13.03.2001. Андрей Беляков добавил дополнительные ответы на вопросы 264 (Стаж, 26 выпуск). 267 (Оптимизация, 26 выпуск).
   11.03.2001. Alexander Apazidi добавил свою точку зрения на вопросы 264 (Стаж, 26 выпуск). 269 (акции, 26 выпуск), а также по уроку (UDA, 21 выпуск).

Бесплатные коды для Access 2000
   • Файл la_prot.mdb. Новый пример 7 "Определяем пароль Access 2000" (27.03.2001)
   • Файл la_query.mdb. Добавлен пример по применению запроса "SELECT @@identity" (26.03.2001)
   • Файл la_ado.mdb. Добавлено 6 примеров по применению ADO и DAO. В том числе и с использованием файлов udl  (26.03.2001)
   • Файл la_menu.mdb. Улучшен пример 4 по созданию меню PopUp. Добавлен пример 5 "Получение информации по кодам меню" (12.03.2001)
   • Файл la_api.mdb. Смотрите пример 6 "Применение функции timeGetTime" (13.03.2001)

Ссылки на ресурсы Access
   VBStreets.ru - программирование на Visual Basic, VBScript и Active Server Pages

Ответы на вопросы
Вопрос 9. Как подключиться к БД MSDE, которая находится в сети на отдельном сервере (под WIN. 98, WIN. NT)
  Ответ. Вопросы подключения базы данных к разным провайдерам лучше всего изучать в графическом интерфейсе, т.е. создав файл udl. Так Вы сможете точно определить название параметров соединения и их значение через кнопку "Проверить подключение" (возьмите для исследований файл la_ado.udl). Как программно управлять соединением подробно описано в файле: la_ado.mdb (2 и 6 пример). Внимательно также прочитайте ответ на вопрос 10.
Вопрос 10. Где в проекте БД можно применять файлы строки подключения (Microsoft Data Link.udi). Как это реализовать в программном коде.
   Ответ. Возможно Вы имеете ввиду не файл *.udi, а файл *.udl. Он создается в проводнике Windows (правая клавиша - для Win98). Сама по себе его структура не очень сложная. Для просмотра внутренней части файла используйте пример 5 из la_prot.mdb. Далее дается пример байтов файла la_ado.udl с дополнительными пробелами, точка в некоторых случаях означает управляющие символы < chr(32). Вот весь файл.  яю[.o.l.e.d.b.].....;. .E.v.e.r.y.t.h.i.n.g. .a.f.t.e.r. .t.h.i.s. .l.i.n.e. .i.s. .a.n..O.L.E. .D.B..i.n.i.t.s.t.r.i.n.g..... P.r.o.v.i.d.e.r. = .M.i.c.r.o.s.o.f.t...J.e.t.. .O.L.E.D.B...4...0.; .M.o.d.e. = .R.e.a.d. |.W.r.i.t.e. |.S.h.a.r.e. .D.e.n.y. .N.o.n.e.;. P.e.r.s.i.s.t. .S.e.c.u.r.i.t.y. .I.n.f.o. = .F.a.l.s.e......
    После конвертации всего файла из Unicode в asci-строку Вы получите следующий пример:
chr(63) & "[oledb]" & vbCrLf & "; Everything after this line is an OLE DB initstring" & vbCrLf &
"Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read|Write|Share Deny None;Persist Security Info=False" & vbCrLf & vbNullChar
   В начале файла идет байт 63, далее идут строки, имеющие символы конца строки chr(13) и chr(10). Весь файл заканчивается нулевым байтом chr(0). Ну прямо как в С++. После такой информации можно самому научиться создавать файлы udl очень быстро. Естественно файл может иметь и другие параметры, поэтому нужна отладка его структуры. Для подключения dll к базе данных проверено два варианта.
' 1 вариант
cnn.Open
cnn.Properties("Extended Properties") = "File Name=" & CodeProject.Path & "\la_ado.udl"
' 2 вариант
cnn.Open "File Name=" & CodeProject.Path & "\la_ado.udl"
Можно также использовать и графический интерфейс для редактирования. Установите ссылку на oledb32.dll. Далее можно писать код:
  Dim myLinks As MSDASC.DataLinks ' Переменная
  Set myLinks = New MSDASC.DataLinks 'Создаем объект
  myLinks.hWnd = Application.hWndAccessApp ' Выбираем родительское окно
  If myLinks.PromptEdit(cnn) = True Then ' Обрабатываем кнопку OK
PS. Вообще все примеры рассмотрены в файле: (см. la_ado.mdb). Там есть разные варианты подключения. Функция чтения файла udl написана (6 пример), можно написать и функцию сохранения.
Вопрос 54. Подскажите, пожалуйста, как снять защиту с файла, созданного под ACCESS 2000.
  Ответ. Существует несколько программ, которые снимают пароль с файлов Access. Вот адреса сайтов. www.lostpassword.com, www.elcomsoft.com и другие. В основном они показывают пароль длиной от 2-16 символов (зависит от версии программы). Можно было ограничиться этим ответом, но так как мы занимаемся детально вопросами программирования и защиты базы данных рассмотрим его более серьезно.
   Описание алгоритма пароля для Access 2000 у меня нет, хотя кусочки информации по шифрованию Аccess 97 в англоязычном Интернете есть. Сущность информации в том, что пароль шифруется простейшим алгоритмом XOR и его смещение от начала файла = 67 байт. Но этих данных явно недостаточно для расшифровки. Поэтому, попробуем составить программу, которая сама проанализирует пароль. Сущность предложенного метода заключается в многократном сравнении файлов с паролями и без них, и поиске закономерностей. Все результаты эксперимента сохраняются в таблице и используются для анализа пароля. Примеры программ для определения пароля Access 2000 записаны в 7 примере файла: la_prot.mdb
    Таким образом, мы сможем определить а) длину пароля; б) смещение пароля от начала файла; в) позицию меняющихся байтов г) маску пароля (слово для расшифровки). Используя функцию  funAnalysisPassword, можно получить следующую информацию.
   1. Cмещение пароля от начала файла 67 байт.
   2. Маска пароля составляет 40 байт (длина пароля 20 символов)
   3. Байты маски:
 [67 - 69]       055 056 212 156 250 163 206
 040 230 118 038 138 096 049 004 123 054
 144 226 223 177 018 100 019 067 170 063
 177 051 081 241 121 091 247 037 124 042
 ...
 [115-117]
    Байты Маски [67-69] меняются в зависимости от даты, установленной на компьютере. Например, на 17.03.2001 = 228,107,236. Проверено, что 67 байт - меняется ежедневно, 68 байт - ежегодно, а 69 байт имеет еще более длительный период изменения. Байты [115-117] меняются при каждом создании базы данных. Отсюда можно сделать - что это байты, которые сохраняют некоторую информацию по дате создания базы данных.
   4. Алгоритм шифрования XOR.
Пример зашифровки: p XOR m = ?.
Пример расшифровки: ? XOR m = p. В примерах используются следующие обозначения: p-байт пароля базы данных, m - байт маски пароля, ? - зашифрованный байт.
   5. Символы хранятся в формате UNICODE, т.е 2 байта на символ, поэтому необходимо провести конвертацию строки пароля. Это делается так: password=StrConv(s, vbFromUnicode)
   Таким образом, для нахождения пароля достаточно определить байты 67-69, используя информацию из байтов 115-117. Задачка очень интересная и оригинальная, так что подумайте немного сами. В приводимых же примерах la_prot маска пароля определялась по другому, приблизительно. Для этого смотрите функцию funGetMaskPassword. Сущность метода. а) читаем дату создания файла FileDateTime(myDataBase), б) устанавливаем время  Time = timeDB, в) создаем незащищенную базу и читаем маску в массив, г) возвращаем текущее время и удаляем лишние файлы.
   После того как файл расшифровывался, запускалась программа для тестирования пароля. Используя эту программу, можно находить некоторые байты пароля обычным перебором символов. Код ее приведен ниже:
Public Function funTestPassword(strMdb As String, strPassword As String) As Boolean
Dim cnn As New ADODB.Connection
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMdb & ";Mode=Read;Jet OLEDB:Database Password=" & strPassword
cnn.Open
' Далее идет проверка на ошибку
   PS. В примере 7 (la_prot.mdb) Вы найдете и другие функции, работающие с паролем. Использование их необязательно, т.к. если Вы знаете пароль, то его можно удалить или изменить, используя Access, но для проверки разных алгоритмов могут пригодиться.
Вопрос 59 (14.11.2000). Вот столкнулся с такой проблемой. Как по Access 97 (из своей программы) вызвать - Диспетчер связанных таблиц? Как в Access 2.0 делается знаю, но в 97 это уже не проходит.
   Ответ. Варианты создания диспетчера таблиц есть на сайте, подойдут и для Access 97. Для Access 2000 можно запустить команду: Application.CommandBars("Menu Bar").FindControl(, 3996, , , True).Execute
   PS: Команда будет работать в том случае, если у Вас есть связанные таблицы, и Диспетчер связанных таблиц установлен при инсталляции Access.
Вопрос 216(06.02.2000) В Вашей рассылке я прочитал, что Вы боретесь со сложной проблемой ускорения загрузки форм при работе с большими таблицами. О каком замедлении загрузки формы идет речь? Я создал программным способом файл на 50000 записей. Его размер оказался равным примерно 17 мегабайт. Форма связанная с этим файлом загружалась практически  мгновенно, так же сразу отображались данные, а количество записей высвечивалось примерно через 1.5 - 2 секунды. Все работало достаточно быстро, причем у меня довольно средний компьютер( PII 433Mhz 64Mb Access2000)
   Ответ. В Microsoft умные специалисты работают. Открыть быстро базу данных размером в 17 или 100 мегабайт для них не проблема. Так, что эту задачу они хорошо решили. Таким образом, открывая базу в несколько мегабайт, происходит чтение лишь нескольких индексированных записей, а не всего файла (вспомните механизм заполнения запросов и значение счетчика rst.RecordCount после открытия). Но чтобы глубже понять проблему, с ней надо серьезно поработать и провести несколько экспериментов.
    Во первых, научитесь использовать api-функцию timeGetTime(), которая имеет более точный результат (измеряет время в миллисекундах с момента запуска Windows), чем Time() в Access.  Вставьте ее в ваш пример для событий формы Open, Activate и определите время загрузки. Оно и будет минимальным.
    Во вторых, создайте новую базу данных путем копирования старой и добавьте в главную форму подчиненную, а также несколько списков, которые будут базироваться на запросах из вашего 17 мегабайтного файла, например, select * from where [Фамилия]='Иванов'. Запустите тест, и определите время загрузки.
    Так вот, проводя эти эксперименты, и сохраняя в свойствах базы данных минимальное и максимальное время загрузки, можно сделать таймер, который будет показывать загрузку формы. Очень полезно для тех, кто работает с большими базами в сети. Так что, труд Ваш по проведению исследований будет не напрасен.
    P.S. Желательно (для чистоты эксперимента) перед запуском формы Access, перегружать Windows, чтобы не было кэширования данных. В примере 6 файла: la_api.mdb Вы найдете применение функции  timeGetTime() указанной в ответе.
Вопрос 252(26.02.2000)   Я пытаюсь создать кнопки с помощью мастера(Command Button Wizard) в ACCESS, иногда в самом начале он меня предупреждает что "Can`t find any library or object" или что "Visual Basic" не смог создать кнопку!!!
  Ответ. Проблема решается переустановкой офиса начисто, или смотрите частичную переустановку Access в вопросе 266. Конечно, можно повторно, под другим именем, зарегистрировать мастер, и посмотреть, как он сможет работать. Пример на эту тему будет дан позже.
Вопрос 258(27.02.2000) Допустим я вставляю запись в таблицу с помощью INSERT INTO  в таблице есть первичный ключ значение которого назначается самим Access как мне гарантированно узнать значение этого ключа после выполнения запроса для вставки данных в подчиненные таблицы (я не могу полагаться на max значение ключа поскольку кто-то еще мог выполнить подобный запрос, а делать дополнительное поле с уникальным значением  - как-то некрасиво)
  Ответ.  Вопрос не очень сложный, и решается через применение специального запроса: SELECT @@identity. Я добавил пример 3 на эту тему в файл: la_query.mdb. А можно ли определить значения счетчика новой записи, которая еще не добавлена в базу? Попробуйте решить этот вопрос.
PS. О счетчиках уже много говорили, почитайте на эту тему информацию в рассылках.
Вопрос 266(05.03.2000) Моя база в Access 97 - сетевая. Один из пользователей совершает некоторое действие (сам не знаю какое) и бах- в одной из таблиц появляется "зарезервированная ошибка-1601" и у записи появляется значок "закрыто". Такое уже было несколько раз. Сегодня я победил проблему, удалив таблицу и ее связи, в которой были ошибки и вернувшись к резервной копии. Однако, меня тревожит тот факт, что я не могу увидеть причину сбоя. В предыдущий раз я решил, что это нарушение условий блокировки. Тогда я установил пессимистическую блокировку на каждой копии интерфейса. Но видно это не помогло. Ошибка в другом. Сейчас у пользователя у которого появились ошибки переустанавливают "МС офис". Может причина сбоя некорректная работа самого Аccess'a?
  Ответ. Ошибку на логику поймать очень сложно, поэтому для определения проблемы надо в программах на Access всегда вести журнал событий, тогда можно будет восстановить историю ее возникновения. Во вторых, офис переустанавливать бессмысленно, т.к. реестр не восстанавливается к первоначальному состоянию (некоторые отсутствующие файлы hlp, dll, ocx офис восстанавливает сам). Самое лучшее - это установить начисто Windows, а потом Office и сохранить реестр (system.dat, user.dat). Если внешних программ много, то можно сохранять реестр после каждой установки ПО в отдельных папках. Когда начинаются сбои, и возможная причина - это неправильная работа Access или новой программы, просто перепишите файлы из архива в системную папку.
Вопрос 270(07.03.2000) В некоторых рассылках отвечающие пишут письма с позиции гуру, обучающего молодых наставников. Я думаю это не совсем правильно, тем более эти гуру иногда дают неправильные ответы (что особенно забавно читать профессионалу). BTW, я не разделяю Вашей уверенности насчет дефицита специалистов по Access. Надо понимать, что Access это довольно лимитированная СУБД, и более менее серьезные и устойчивые приложения создать в Access невозможно. Маркетинговая ниша Access - это БД начального уровня или хранилище данных для Excel, когда возможностей Excel уже не хватает. В подтверждение своих слов могу привести ряд случаем когда организации
заменяют свои старые Access DB на готовые решения типа 1C, etc. Если Вы не согласны, не могли бы Вы мне написать как Вы видите будущее специалиста по Access, как он может заработать себе на хлеб (мне кажется это постоянный путь freelancer'a , т.е. свободного художника, ходящего от фирмы к фирме).
   Ответ 1. "О замечаниях". Ваши замечания касаются в основном мелкого и среднего уровня проблем. Приведу пример. Если кто-то задает вопрос: "Как написать операцию деления?". То ему дадут ответ: A = B / C. Вы пытаетесь сказать, что это неправильно, так как С может быть равно нулю. Во первых, в вопросе это не уточняется, а с другой стороны это и так ясно, что нужна проверка на ошибку. Попробуйте решить элитную задачу: 1) Как отобразить отчет в подчиненной форме? 2) Как сбросить графический OLE объект из таблицы в jpg формат? 3) Как снять защиту с объектов базы данных? и т.п. Лишь только так можно себя причислить к профессионалам, а комментировать написанное любой может. У нас в стране много любителей поговорить, а способных дать оригинальное решение (и не только в программах ) - мало. Иначе мы бы жили давно уже в преуспевающей стране.
   Ответ 2. "О готовых решениях". Странно, с одной стороны Вы себя считаете профи, а с другой боитесь, что уже кто-то все разработал и делать ничего не придется. Уровень автоматизации в стране очень низкий, при этом всегда "готовое решение" надо настраивать, дорабатывать, изменять, исправлять ошибки, дополнять и развивать. После покупки большинство не знают, что делать с "готовыми решениями". Приглашать специалистов по ним - дорого (20$ час), дорабатывать их самим - сложно. Вот многие и останавливаются на Access, чтобы хоть как-то двигаться вперед, а не стоять на месте. (Смотрите информацию в разделе "Работа").
   Ответ 3. "О специалистах". Во первых, не надо никуда бегать. Если кому-то нужно разработать базу, он всегда найдет возможность связаться с вами. Во вторых, из разнообразных разговоров по Access можно сказать, что экономика у нас просыпается. Были интересные предложения не только со стороны торговых предприятий, но и производственных. В третьих, перспективным в Access я вижу создание универсальных баз данных так, чтобы можно было использовать их с минимальными изменениями в сети предприятия и в Интернете. Будущее также лежит за созданием различных приложений для экспорта/импорта данных в Outlook, Word, Excel и другие программы.
Вопрос 271(07.03.2000) У меня установлен ACCESS 2000 как часть MS OFFICEа. Есть база в dbf формате. Также установлен PARADOX 7. Так вот при установке связи с DBF файлом или при попытке импортировать файл в таблицу данные в ней предстают в виде непонятных символов, такое впечатление, что кодировка другая. Несколько дней назад все было ОК. EXEL читает нормально! Что делать???
  Ответ. На сайте есть раздел, посвященный этому вопросу, смотрите Подписка-Таблицы-dbase, настройка реестра. История возникновения этих проблем заключается в том, что текстовые переменные dbf файла могут храниться в разных кодировках ANSI и ОЕМ. При загрузке Access из реестра считывается информация о типе кодировки, после этого ядро Jet начинает отображать таблицу dbase в соответствии с данной настройкой. Отсюда можно сделать вывод, что возможно какая-то программа изменила информацию о кодах символов или появились проблемы с реестром. Таким образом,  надо попробовать восстановить/настроить реестр. Прочтите обязательно ответ к вопросу 266.
Вопрос 274(07.03.2000) Можно ли в выражениях SQL-запросов вводить переменные? И как?
  Ответ. Можно. Это легко почувствовать на примере 1 файла la_query.mdb. Откройте любой запрос на выборку и введите в квадратных скобках свою переменную. Каждый раз, после ввода символа Access анализирует запрос, и если найдет неизвестную переменную, то попросит ее ввести.
Вопрос 275(07.03.2000) Возможен ли в Access внешний ввод данных, например через input, или через специально созданную форму???
  Ответ. Данные можно ввести через встроенную форму InputBox. Она позволяет не только ввести данные, но и назначить строку ввода по умолчанию. Попробуйте вставить в программу следующий код, и Вам станет более понятно ее использование.
Dim strInput As String
strInput = InputBox("Надо читать справку?", "Сложный вопрос", "Ответ. Надо, но матушка Лень замучила")
MsgBox strInput
Вопрос 276(07.03.2000) Возможно ли создание макроса как в Word Excel?
   Макрос в Word или Excel - это подпрограмма на Бэйсике, сохраняющая информацию о некоторых действиях при редактировании документа. В Access макросом называют набор из одной или более известных макрокоманд, которые при желании можно записать в модуль. Таким образом, хотя и в офисных приложениях запись макросов осуществляется по разному, но сущность одна - составить быстро VBA программу, не вникая в азы программирования.
Вопрос 277(07.03.2000) Можно ли программно менять в запросе условие отбора записей?
  Ответ. Можно. В примере 1 файла la_query.mdb это делается после каждого ввода символа. Изучите его работу, а также в справке значение слова Recordset.
Вопрос 279(07.03.2000) Не могли ли вы прислать названия пунктов меню (команд) на языке VB и способ их вызова в программе.? Не подскажете где можно найти в Интернете русское описание и примеры кода по пред. вопросу?
   Ответ. Для того, чтобы определить некоторый пункт меню скачайте с сайта программу la_menu.mdb. Там Вы найдете пример 6, где подробно показано как получить код для каждой команды из меню. Вы выбираете панель из списка и программа рассчитает коды команд для нее. Запуск команды меню достаточно простой. Например, чтобы вызвать пункт меню "Сервис\Схема данных" достаточно запустить команду:
• CommandBars("Menu Bar").FindControl(, 523, , , True).Execute (общий случай) или
• CommandBars("Tools").Controls("С&хема данных...").Execute (частный случай)
Вопрос 281(12.03.2000) Можно ли из БД выдрать из всех таблиц, только те записи, которые изменились. Это необходимо для проведения резервного копирования БД. Есть ли варианты кроме тупого сравнения всех записей.
   Ответ. Если сохранение делаете один раз в день, то лучше ввести поле-флажок в сохраняемую таблицу. Например, после редактирования записи, это поле автоматически будет заполнятся временем или принимать значение True. При работе в пакетном режиме, можно использовать и статус записи. Например, так:
Do Until rst.EOF
     If rst.Status = adRecModified Then
        ...
     End If
     rst.MoveNext
Loop
Информацию об обновлении самой таблицы можно получить следующим образом: CurrentDb.TableDefs("Моя таблица").LastUpdated. Вариантов придумать можно много, думайте ...
Вопрос 283(14.03.2000) С чем может быть связана такая проблема. Иногда никак не удается запустить мастера создания форм или запросов. То они нормально работают, то они просто не запускаются. Не могу понять закономерности. Помогите пожалуйста советом.
  Ответ. Описание мастеров дано в реестре. В одной из рассылок говорилось об этом. Запуск мастера осуществляется через файл mde (например, office\1049\acwzmain.mde). Можно попробовать зарегистрировать свой мастер под другим именем и запустить его. Для этого нужно проводить эксперименты. Проблема решается правильной установкой Windows (желательно версии 98 и выше) + Office. Информация по сохранению/восстановлению реестра дана в вопросе 266.
Вопрос 284(16.03.2000) Столкнулся с такой неприятностью: при слиянии данных Access с документом Word возникает ошибка: "База данных была
приведена пользователем Admin на компьютере Константин в состояние, препятствующее ее открытию или блокировке" (это мой компьютер, я работаю локально) Справка расшифровывает  ошибку 3734: "Такая ошибка возникает, когда используется  пассивное управление отключением или подключением. Эта ошибка указывает, что другой пользователь перевел базу  данных в состояние, не позволяющее другим пользователям открывать ее.". В параметрах Access у меня стоит "Общий доступ"; "при открытии предоставлять права пользователя". Блокировка записей или ее отсутствие не влияет на результат. Примечательно, что на простеньком примере, моделирующем ситуацию, все проходит гладко: документ открывается, данные импортируются, ошибки и открытия второй копии базы не происходит.
Дополнительно: Работаю в Access 2000. Данные для слияния предоставляет запрос из 4-х таблиц, отбирая необходимые строки по условиям соответствия текущей строке в форме.
Слияние с Wordом необходимо, поскольку в файле содержится шаблон договора, а из базы берется информация для заполнения полей данных контрагента. Выполненное обычным
отчетом Access, как мне кажется, будет выглядеть менее привлекательно, нужно будет решать проблему с длиной строк в зависимости от длины данных. Подскажите, пожалуйста, как выйти из этой ситуации, в литературе указан именно этот способ (конечно, без возможных проблем)
   Ответ. Если при работе с базой данных возникают проблемы с доступом к записям базы данных, то данные надо кэшировать. Например, используйте GetRow для ввода данных в массив, далее подключитесь к Word и заполните таблицу (примеры la_array.mdb и la_automat.mdb). Если через DAO невозможно открыть запрос попробуйте ADO. ADO допускает больше вариантов создания наборов записей. Например, используя курсор Forward-only, Вы создадите ограниченный набор записей (т.е., состоящий из тех записей, которые были в базе на момент создания запроса). Он также допускает только движение вперед по набору. Для эксперимента возьмите пример 5 по ADO (la_ado.mdb)
Вопрос 285(16.03.2000) Собираюсь на выезд. Собираюсь заняться и базами данных. Есть ли смысл, по Вашему мнению, ограничиться только MS Access 2000 и все, как более простым и не вызывает ли этот продукт аллергии за бугром, как к примеру. FrontPage?
   Ответ. Маловато, наверное, будет у Вас шансов найти работу, если только поверхностно изучите  Access. Требуются специалисты умеющие применять базу данных в разных направлениях  (ASP, Word, Excel и т.п.) Вот пример на применение  Access и Word. Работу надо сделать за 2 месяца. Сможете понять, как решить проблему, значит Вам уже давно надо зарабатывать валюту, а не рубли.
Access Developer   
Standards Development Section manages the client standard specifications and supplemental specifications in a prototype Microsoft Access based content management system. This prototype application contains both the specifications and some meta data for the specifications. The last Supplemental Specification (100-200 pages) was published from this prototype with a lot of effort.

This project is to begin conversion of this prototype into a pilot application that can more efficiently publish the upcoming Supplemental Specification. The source documents, created in Microsoft Word, must be decomposed and loaded into the new pilot Access database. This initial upgrade needs to be complete by May 1, 2001 in order to publish the 2001 version of the Supplemental Specifications.

The Bureau needs to do a state-of-the-technology investigation of content management tools so that the pilot application can be built toward a potential enterprise direction, or at least a suitable market direction. The results of this investigation will help us structure the pilot, and determine if there are more suitable tools in the market for managing this publication and the cross-referenced documents. This project will not acquire content management software, nor does it intent to do an enterprise-wide content management investigation.