CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Доступный Access 2

Наталья ЛИТВИНЕНКО litnat@railway.donetsk.ua

При работе из-под Access периодически возникает необходимость в переносе аксесовского отчета в тот же Excel (см. статью «Доступный Access», МК №43 (266)). Это можно сделать стандартным методом — если, конечно, результат работы устроит. Альтернативой стандартным методам являются методы нестандартные. То есть, нужно состряпать программу на VB. Об одном таком способе и пойдет речь.

Вначале — декорации. Пусть у нас есть некоторая формочка, назначение которой — приготовить все для совершения запроса к базе или базам, результатом коего будет отчет (для просмотра, для вывода на принтер начальству), вывод данных в форме (для просмотра или редактирования) или перегон тех же данных в Excel. На формочке есть кнопочка, с которой, собственно, и начинается сказка. Обсуждение формочки и способов ее работы в мои планы на эту статью не входит, это другая песня, и довольно длинная. Можно только сказать, что нажатия всех кнопочек, куда бы они не выводили данные, передаются вначале небольшой функции в четыре строки (если считать вместе со стандартным обработчиком ошибок); задача этой функции состоит в передаче управления с некоторым параметром Большой Подпрограмме, которая анализирует, что же выбрал пользователь на форме, какие он хочет получить данные. Причина такого разделения труда — не игра в структурное программирование, просто пользователь моей программы может позволить себе действительно многое, например, может наложить условия почти на все поля базы. Как результат — процедура достаточно длинная. Замечу, проект стал таким как сейчас не сразу, количество выпадающих списков и полей на формочке потихонечку растет.

Вышеупомянутый параметр указывает, в какой форме должен быть выдан результат запроса — форма, отчет, Excel и т.п. Он обрабатывается в самом конце Большой Подпрограммы, в case, и там или сразу дается команда на выдачу (для отчета или запроса), или (в случае с Excel) уходит в следующую процедуру, которой я и буду заниматься вместе с вами всю эту статью. Ее будут звать, например, All_Exl(stLinkCriteria), где параметр stLinkCriteria — это кусок запроса, который идет после WHERE , сформированный в Большой Подпрограмме по итогам выбора пользователя. С декорациями все. Могу только заметить, что, естественно, необязательно все должно быть столь страшно и сложно. Я просто расписываю, как оно устроено у меня в реальном АРМе. В вашем же все может быть проще — например, один и тот же запрос, простая формочка с рожицей —:-) — и пара кнопок. Конец вступлению, перейдем собственно к делу.

Для корректной работы программы нужно прикрутить библиотеку Microsoft Excel 8.0 Object Library. Для этого нужно находиться в окне, где мы пишем макрос, потом в меню Сервис нужно выбрать Ссылки, там уже находим нужную библиотеку и помечаем птичкой.

Если быть совершенно точным, то в Excel мы передаем не собственно отчет, а данные, оный составляющие. Рассмотрим вариант by Alexander Gaman (http://talk.mail.ru/article-26440714.html), мною изрядно «отредактированный»:

В принципе, и все.

Теперь поговорим о хорошем — о глюках :-). Почему этот разговор хорош — потому что старый, известный глюк лучше новых двух. Речь, естественно, не пойдет о том, что кто-то забыл закрыть IF или не описал переменную — борьба с такими ошибками отнимает больше всего времени программиста, это наша работа, точнее даже — быт. Самый основной специфический глюк этой задачи случается тогда, поименованные библиотеки оказываются не прикручены. Если их не установить, то при попытке запустить программу не будут находиться типы, функции и т.п. Или вот аналогичный глюк: «законная», действительно существующая и указанная в книге/доках функция не работает, и компилятор ругается. Опять же посмотрите, прикручена ли нужная библиотека. Особо подлая ситуация — встретить этот глюк, когда на твоей машине функция работает, а на другой, для которой пишется — нет…

Другая ситуация (такое случилось у меня на машине) — при попытке передать данные в Excel программа просто складывалась: «…выполнила недопустимую операцию… коврик должен перегрузиться :-)». Причем такое безобразие творилось даже в отладчике, просто при попытке поднести мышку к глючащему объекту. Ну что ты тут поделаешь? Не сработали старые приемы, которые вроде бы когда-то помогали: сжатие базы, уменьшение количества строк программы путем устранения пустых строк и комментариев (да-да-да, не смейтесь!), копирование формы — удаление исходного экземпляра — переименование старого... Что вообще делает программер при встрече с неожиданным глюком?

1. Запускает программу еще раз.

2. Закрывает, открывает программу и запускает еще раз.

3. Закрывает, открывает Access

4. Потом перегружается — верное средство от многих случайных глюков и… надоедливых юзеров, живущих «на другом конце деревни». Обычно помогает! А если нет?

5. Смотрит в календарь — обнаруживает пятницу. Смотрит на часы — три пятнадцать. А не проиграть ли нам в Квяку/почитать почту/разархивировать книгу? Смех, но ведь действительно помогает — то, что в пятницу решительно не шло и работать и не собиралось, в понедельник пашет и не показывает характер. В чем здесь причина — упрямство ли компа, усталость ли программера или недельный перегрев обоих, наложенное и помноженное много раз само на себя — непонятно. Но факт остается фактом. Не начинайте паниковать заранее и портить дурными мыслями выходные.

6. Сносит Access (в понедельник), устанавливает Access, пробует.

7. Сносит, перегружает, переставляет, пробует.

8. Сносит весь Офис, перегружает, переставляет, пробует…

9. Начинает думать…

А теперь без шуток :-). Вариантов было два — виноват дистрибутив Офиса и виновата Windows. Сносить операционку решительно не хотелось, потому программа была запущена на другом компе, где и отработала успешно. Желаю вам глюков (не желаю, конечно, но…), которые победимы менее травматичными и морочными способами.

Или вот еще одна интересная ошибка. Access в упор не видел необходимых программе библиотек. Что только я не делала — и сверяла с соседним компом папочки с библиотеками, и переписывала их содержимое, и тыкала программу мордой в оные через «Обзор», и воевала с autoexec.bat, прописывая пути, да все не впрок. Непонятный глюк требует абсурдного метода решения — я просто переставила Офис с диска Е на диск С. Пока ожившая программа, как турбина, гнала данные в Excel, я исполняла вокруг компа от полноты эмоций ритуальные танцы неизвестного народа — под заинтересованным взглядом админа. Хороший урок — не оригинальничайте с местом жизни программы без острой в том необходимости. Если уж Офис допускает такие ситуации, то нестабильная работа (точнее, стабильная неработа) продуктов от менее известных компаний может исправится именно таким незамысловатым путем.

В Сети хватает различных примеров такого рода программ, более или менее подробных, различных по функциональности, длине и количеству комментариев. Например, http://www.databasejournal.com/features/mssql/article.php/1493901(с примером установки параметров печати страницы), http://www.mvps.org/access/modules/mdl0035.htm, http://www.experts-exchange.com/Databases/MS_Access/Q_20646694.html, http://bluejack.binus.ac.id/19082002/viewtopic.php?topic=708&forum=40(с применением ADO), http://www-tcsn.experts-exchange.com/Programming/Q_20659684.html, http://dbforums.com/t890500.html(длинный пример), http://www.df.ru/%7Eswan/inf2think_2/inf186.htm(с применением OLE). Свод многих методов и путей перевода данных можно найти на странице http://www.zmey.1977.ru/Access_To_Excel.htm, здесь же сравнивается скорость их работы.

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov