Рассылка статей | Программирование и готовые решения
Leadersoft.ru

Рассылка статей

Программирование и готовые решения

В этом разделе сайта дается информация от https://leadersoft.ru о статьях по программированию, ответах на вопросы и др. Статьи рассылаются подписчикам и публикуются на разных сервисах. Возможно некоторая информация устарела и ссылки не работают, но эти сведения могут быть полезны, если Вы серьезно занимаетесь разработкой баз данных

Выпуск 9. Как провести 'сторнирование' в Access

Введение. Данный выпуск рассылки рассказывается о различных вопросах, с которыми встречаются пользователи базы данных Access.

Внимание. На сайте: www.leadersoft.ru добавились новые вопросы по программированию:
Аварийные ситуации (1), Бизнес(1), Другие(1), Драйверы(1), Запросы(1), Лекции(1), Массивы(2), Меню(1), Отчеты(1). Часть этих вопросов опубликована в подписке, к некоторым из них - есть решения в формате *.mdb.

I. [Склад] Как провести сторнирование в Access?

1. Сторнирование - это бухгалтерский способ исправления ошибок в проводках. Отмечается он красным цветом. Сущность такой записи в том, что надо при сложении 2 чисел результат не увеличивается, а уменьшается. Например, 531+200 (красным) = 331

2. Чтобы ввести в форму красное число, Вам надо для данного поля определить формат для положительных и отрицательных чисел: Сумма.Format = "0.00;0.00[Red]". Теперь, когда Вы будете вводить отрицательные числа они будут форматироваться в "красные", а общая сумма будет рассчитываться как 531-200. Внимание, используя такой формат чисел, всегда проверяйте результат. Так как в некоторых сложных случаях возвращается неправильное значение, например, 731. Готовое решение есть в файле: la_form.mdb

II. [Проблема]. После работы с базами данных модули mde увеличиваются в размере в несколько раз. Иногда при работе выдается сообщение "не хватает памяти". Почему это может происходить?

1. Вы постоянно записываете и удаляете записи из таблиц. Во всех базах данных при удалении записей из таблиц, не происходит их "физического" уничтожения. Они сохраняются в таблицах, поэтому со временем база данных растет, для этого ее необходимо ее сжимать (см. лекции 2c). Если Вы хотите чтобы за Вас базу данных сжимал Access, проделайте следующие шаги через главное меню: Сервис -> Параметры -> Общие -> Сжимать при закрытии (установите флажок на эту операцию)
2. Из вопроса ясно, что у Вас база данных содержит одновременно таблицы, формы и другие элементы. Это неправильно. Чтобы программа корректно работала, надо из вашей базы данных создать 2, т.е. в одной будут таблицы (подчиненная, *.mdb), а в другой все другие элементы (главная, *.mde). Главная база данных связывается с подчиненной через пункт меню: Сервис -> Служебные программы -> Диспетчер связанных таблиц. Проделайте эти действия и рост размера базы данных прекратится. Внимание! периодически надо сжимать подчиненную базу данных - это делает администратор или программа, которую Вы должны написать (пример сжатия возьмите из лекций).

III. [Меню] Посетил Ваши Лекции по созданию баз данных на Access 2000. Но остался вопрос: "Как скрыть Menu Bar?"

Свойство MenuBar принадлежит формам и отчетам, закрывая любой из них, Вы тем самым и закрываете меню. Если же Вам, при работе с формой надо скрыть ее меню, например, при открытии отчета то используйте команду Docmd.ShowToolbar. Таким образом, если Ваше меню имеет название "Мое меню", то скрыть его можно командой DoCmd.ShowToolbar "Мое меню", acToolbarNo. Решение для формы приводится в файле: la_menu.mdb

IV. [Массивы] В VB 6.0 имеется возможность создавать массив объектов вида line(0), line(1), line(2), и т.д. и работать с этим массивом как с обычным массивом данных - например обрабатывать с помощью циклов. В VB для Access 2000 такой возможности нет ...

Я бы не стал так категорично говорить что в Бейсике Access нельзя создавать массивы объектов. Он "напичкан" ими больше, чем любой другой язык объектного проектирования. Если внимательно посмотрите на лекции, то я созданию всего ОДИН объект appAccess (Новый калькулятор.mdb), но в котором хранятся десятки, если не сотни массивов объектов. Для ссылок на объекты используется слово (set), для доступа к свойствам объекта точка (.)
Ну а теперь попытаюсь ответить на ваш вопрос. По вопросу ясно, что Вы желаете создать объект типа "Линия", в котором надо хранить ее координаты начала и конца, т.е. переменные x1,y1... Используйте слово Type для создания своего элемента. Внутри него Вы можете использовать следующие типы данных: Byte, Boolean, Integer, Long, ..., а также объекты Access и созданные Вами переменные. Решение приводится в файле: la_array.mdb.


Выпуск 8. Что исправлено в Access 2000 ?

Об рассылке . В данной рассылке я кратко даю информацию об ошибках официально распространяемых с дистрибутивом программы. С одной из них я, когда я переходил на  Access 2000, я отважно боролся 2 недели. Она помечена красным цветом (Q240826 , 7 номер). Подробности по ее исправлению у меня на сайте: www.leadersoft.ru в архиве подписки.

Полезность. Рассылка будет полезна тем, кто только собирается перейти на Access 2000 с 97 версии и не читал исходный текст по Microsoft Access

От автора . Не пугайтесь, что так много ошибок исправлено в базе данных. В общем случае, работу программистов я оцениваю на ОТЛИЧНО (база данных работает прекрасно и в сети и локально. Обслуживания практически нет, спокойно можно уйти в отпуск). Многие ошибки незначительны. Прочитав текст, запомните симптомы. Возможно они Вам пригодятся в вашей работе.

Внимание. Сегодня на сайте www.leadersoft.ru открылся раздел: "Поддержка пользователей", где публикуются проблемы читателей (всего 5) и пути их решения.

Список ошибок

Q235222 ACC2000: 1. Если Вы вызовете метод Undo формы из внешнего модуля, например, глобальной функции, Вы можете получить сообщение об ошибке. В строке комментариев для Windows 98 должен быть код: "015f:3005e7c4"

Q225946 ACC2000: 2. Когда Вы конвертируете базу данных Access 97 к 2000, Вы можете получить сообщение об ошибке: "Ошибка случилась пока загружалась форма ... Вы хотите продолжить ?" После продолжения Вы получите новое сообщение, что в проекте VBA есть ошибки.

Q236977 ACC2000: 3. Когда Вы активно работаете с формой и переключаетесь между проектом и ее видом Вы можете получить сообщение об ошибке: "Недостаточно памяти для обновления экрана. Закройте ненужные программы". Однако, когда Вы сделаете это, память не будет освобождена. От автора. Когда будете закрывать ненужные программы случайно не закройте Windows.

Q238258 ACC2000: 4. Когда Вы попытаетесь редактировать базу данных, открытую в многопользовательском режиме с нескольких компьютеров, то Вы не сможете изменить записи в БД. Показателем блокировки является иконка "Запись блокирована", указанная слева на контуре таблицы.
Q239549 ACC2000: 5. Когда Вы удаляете запись из подчиненной формы, которая была создана мастером Access, программа "зависает", т.е. не отвечает на Ваши действия.
Q239565 ACC2000: 6. Иногда при редактировании запросов в режиме конструктора-сетки, Вы можете получить сообщение об ошибке: "Выражение введенное вами не имеет закрывающейся скобки ] или |". Это означает, что Access за Вас "отсек" часть предложения.

Q240826 ACC2000: 7. В отчете Access ВНЕЗАПНО Вы понимаете, что он не форматирован. Основные настройки принтера (ориентация бумаги, границы листа) оказываются сброшенными по умолчанию.

Q241025 ACC2000: Когда Вы используете AddNew метод для Recordset объекта, созданного на базе формы (смотрите детально свойство RecordsetClone). Форма устанавливается на новую запись.
Q241230 ACC2000: 9. На компьютере на котором Вы установили Access 97 и 2000, Вы обнаруживаете, что обе версии файла используют один и тот же системный файл (system.mdw). Возникают проблемы с паролями, логинами и даже поиском самого файла sytem.mdw
Q241969 ACC2000: 10. Когда Вы выполняете запрос на удаление, или просматривая таблицу, попытаетесь удалить все записи, Вы можете получить следующее сообщение: "Вы не сможете отменить эту операцию. Команда отмены не будет доступна, потому что эта операция слишком большая, или не имеется достаточно свободной памяти. Вы хотите удалить эти записи? Когда Вы нажимаете Да, все записи НЕ удаляются из таблицы.
Q244010 ACC2000: 11. Когда Вы просматриваете данные типа Char в Access проекте, Вы можете получить дублирование первых 256 символов, а часть строки более 256 символов не будет отображаться вообще.

Q245467 ACC2000: 12. Ошибка проявляется тогда, когда Вы сортируете запрос с параметрами. В этом случае, Вам каждый раз надо повторно вводить данные. (В Access 97 этого не происходит).

Q247486 ACC2000: 13. После использования некоторой таблицы с помощью ADOX в VBA процедуре, теряются свойства некоторых полей запроса, использующего вашу таблицу.

Q247568 ACC2000: 14. В Microsoft Access 2000, когда Вы выполняете необдуманно - сложные расчеты, Access в конечном счете выйдет за пределы отведенной ему памяти и выдаст ошибку о ее нехватке.

Q248894 ACC2000: 15. Ошибка случается при открытии или преобразовании базы данных Access 97 к 2000 версии. При данной ошибке у Вас ничего не происходит или появляется сообщение, что случилась ошибка при загрузке формы. При дальнейшем выполнении программы, появляется сообщение об ошибке в VBA, и Вы не сможете открыть базу данных.

Q248895 ACC2000: 16. Когда Вы попытаетесь выполнить процедуру в mde файле, которая ссылается на функцию другого mde-файла, Вы можете получить ряд сообщений об ошибках.
Q248898 ACC2000: 17. Если Вы откроете несколько отчетов, и попробуете послать какой-нибудь по электронной почте, происходит отправка только первого созданного отчета.
Q248904 ACC2000: 18. Когда Вы закрываете форму, которая имеет поле со списком, основанное на запросе с параметрами, Вы можете получить некоторое сообщение об ошибке, и Access аварийно завершится (адрес ошибки Windows 98: 0167:3040910b).
Q248909 ACC2000: 19. Ошибка случается, когда Вы изменяете в реплике Access таблицы свойства, связанные с десятичным полем.
Q248910 ACC2000: 20. В базе данных Microsoft Access открытой в Windows 95 (98), отрывая и закрывая одну и туже форму более ста раз, Вы можете получить сообщение об ошибке, связанной с нехваткой памяти.
Q248913 ODE97: 21. После установки Office 2000 Premium, когда Вы будете запускать базу данных Access 97 возникнут сообщения о преобразовании или невозможности открытия базы данных.
Q248923 ACC2000: 22. Когда Вы попытаетесь удалить страницу доступа к данным, Вы можете получить сообщение о невозможности удаления некоторых файлов (например, графических). Однако открыв проводник Windows, файлов на диске Вы не найдете.
Q248928 ACC2000: 23. Ошибка случается при компиляции Access 2.0 к 2000 при работе с функцией FindRecord.
Q248930 ACC2000: 24. В базе данных Access 2000, содержащей сотни форм, отчетов, макросов или модулей (от 1000) замедляются события. Например, открытие формы может происходить в течении 30 секунд и более.
Q248932 ACC2000: 25. Ошибка случается, когда Вы закрываете форму после установки UniqueTable свойства.
Q248933 ACC2000: 26. Если Вы введете символ с клавиатуры (0-9, A-Z), пока фокус установлен на списке, основанном текстовом поле (при этом формат поля установлен), Вы можете получить сообщение об ошибке.
Q248934 ACC2000: 27. Ошибка случается, когда Вы в качестве строки поиска используете нулевое значение (Null) в меню поиск или макросе.
Q248936 ACC2000: 28. При создании формы или отчета с помощью "мастера" и далее отменив свои действия, Вы не сможете работать с базой данных. Она оказывается блокированной "мастером".
Q248945 ACC2000: 29. Когда Вы запускаете отчет и попытаетесь вычислить ширину TextWidth, Access неправильно вернет результат.
Q248956 ACC2000: 30. Ошибка случается при компиляции модулей после преобразования базы данных к Access 2000.
Q248961 ACC2000: 31. Когда Вы запускаете на компиляцию базу данных Microsoft Access 2000, Вы не получите сообщение о сохранении всего, даже если Вы редактировали несколько модулей отчетов или форм.
Q248965 ACC2000: 32. В проекте Microsoft Access, после того, как Вы изменяете свойства Базы данных, Вы найдете, что объект, который Вы недавно создавали "находится в другом месте". Это может случиться с формами, отчетами, макросами, страницами и модулями.
Q248966 ACC2000: 33. Воникает при изменении связей таблиц Access. После того, как Вы подключитесь к другой базе данных, Вы прочтете неожиданные данные в списках и отчетах. Вы можете также увидеть данные от предыдущей базы данных, с которой Вы были связаны.
Q248967 ACC2000: 34. Ошибка случается, когда Вы открываете одну базу данных с подчиненной формой, используя несколько ее вызовов. (база данных блокируется).
Q248968 ACC2000: 35. Ошибка связана с "транзакциями" программы. Иногда при "откате" Вы можете потерять данные подчиненной формы. Программа приостанавливается до тех пор, пока Вы не "перегрузите" форму.
Q248970 ACC2000: 36. Когда Вы попытаетесь открыть модуль класса VBA в режиме проектирования, Вы можете получить некоторые проблемы, например, "зависание" связанное с модулем KERNEL32.DLL
Q248980 ACC2000: 37. После того, как Вы введете в поле формы, отчета формат "**$#,##0.00" он изменяется к другому виду "**".
Q248977 ACC2000: 38. Когда Вы работаете с ADP и VSS и запускает команду, например, Get Latest Version из VSS теряются свойства базы данных, и она переустанавливается в первоначальное состояние.
Q249065 OFF2000: 39. Ошибка случается, когда Вы попытаетесь запустить "Справку" из Windows 2000. Если Help откроется, то можете и не увидеть некоторые разделы.
Q252739 ACC2000: 40. Ошибка связана с ЕВРО символом. На некоторых видах Hewlett-Packard принтерах вместо данного символа Вы увидите точку, даже если в отчете отображается все нормально. На Windows NT и 2000 этой ошибки не происходит.
Q252740 ACC2000: 41. Ошибка случается, если Вы работаете с запросом, который основан на таблице, имеющей ключевые слова ALL, DISTINCT, DISTINCROW, TOP.
Q252742 ACC2000: 42. Когда Вы просматриваете или печатаете узел таблицы, данные подчиненной таблицы могут иметь неправильный вид.
Q252749 ACC2000: 43. Ошибка случается, когда Вы работаете с "мастером" Импорта и нажимаете кнопку "Advanced ", программа зависает и требуется нажать CTRL+BREAK.
Q253177 ACC2000: 44. Когда Вы создаете поле с типом данных "Bit", Вы не можете присвоить ему свойство "AllowNulls"
Q253178 ACC2000: 45. Ошибка случается, когда Вы изменяете размеры некоторых окон в проекте Microsoft Access (MDT2FW.DLL). В Windows 2000, ошибка не случается, но Вы программа завершается неожиданно.
Q253180 ACC2000: 46. Сущность ошибки заключается в том, что если кто-то входит в вашу базу данных, имея некоторые права, то Вы можете "случайно" потерять свои права доступа на таблицы.
Q252744 ACC2000: 47. Когда Вы с помощью программы воздействуете на "ниспадающий" список, Вы можете получить сообщение об ошибке (Msaccess.exe).
Q256101 ACC2000: 48. Сущность ошибки заключается в том, что после некоторой работы с ActiveX объектами (ADOX), Вы с удивлением обнаружите, что свойства полей одного или нескольких запросов в базе данных исчезнут.
Q252743 ACC2000: 49. Ошибка возникает при использовании "Календаря" (Mscal.ocx) в страницах доступа к данным, т.е. Вам потребуется несколько раз устанавливать данный ActiveX элемент.

 

Выпуск 7. Где найти ресурсы для ActiveX элементов (TreeView) ?

Справка. Элемент ActiveX - TreeView (Отобразить дерево) входит в стандартную поставку Microsoft Office. Он позволяет Вам строить "Дерево" аналогично проводнику Windows. Хотелось бы отметить несколько вопросов при программировании этого элемента.

    1. В программе "Лекции по Access", я применил его при выводе списка задач. Откройте лекции с нажатием клавиши "Shift" и Вы увидите форму "Обучение схема". Внимание! Так вот, если Вы элемент TreeView поместите на "вкладке", то при частом использовании "вкладок" программа будет аварийно завершаться. Поэтому в лекциях введена дополнительная подчиненная форма. Если же у Вас элемент будет всегда на виду - дополнительной формы не потребуется. Помните об этом!

Ещё...

Выпуск 6. Как защитить базу данных Access ?

I. Первое, что хочется сделать для защиты базы данных - это поставить на нее пароль. Но этот метод не очень надежный. Его легко прочитать и удалить. Это связано с тем, что


1. Если компания Microsoft будет использовать сложную систему защиты, то работа с базой данных, т.е. ее открытие,закрытие и запись данных будет занимать продолжительное время и это вызовет недовольство пользователей.

2. Для тех баз данных, которые надо частично защитить, в Access есть компилятор mdb -> mde, и после такой компиляции становиться невозможно прочитать формы и VBA - коды. К сожалению этот метод не защищает таблицы и запросы, но тут надо учесть то, что для большинства баз данных - это и не нужно.
Ещё...

Выпуск 5. Как создать справку в Access ?

Если Вы пишите серьезную программу на  Access, то Вам необходимо будет иметь справочную систему и документацию на ее.

1. Мой совет заключается в том, что не спешите набирать текст в Ms Word, лучше набрать его в виде web - страниц и далее скомпилировать его в справочную систему. Это даст Вам возможность далее создать из htm файлов сайт в Интернете с описанием Вашей программы.

2. В вашей справочной системе все рисунки (*.bmp) желательно перевести в gif формат, т.к. это уменьшает объем справки. С минимальной потерей качества это можно сделать с помощью Corel Paint.

3. Один из компиляторов справочной системы, преобразующий формат html -> hh называется Microsoft HTML Help Workshop. Второй компилятор для создания справки называется: RoboHelp for Microsoft HTML Help (1.079 $), смотрите сайт: www.ehelp.com. Он поддерживает FrontPage и Microsoft Word.

4. О том как сделать справку, используя полученные файлы справки и помощник Windows, описано в моих лекциях.


Выпуск 4. Как создать инсталяционную программу в Access ?

Если Вы пишите программу на Access 2000, то рано или поздно Вам придеться задуматься о распространении ее. Для этого существует много инсталяционных программ. Коротко я бы рассказал о пакете разработчика Microsoft Office 2000 Developer Version 1.5

1. Microsoft Office 2000 Developer - это специальный выпуск Office, предназначенный для разработчиков, создающих и внедряющих такие предложения. Цена в России - 905$

2. В этот продукт входит приложение Access Run Time, которое Вы можете распространять без лицензионной оплаты. Используя мастер упаковки и развертывания (Package and Deployment Wizard) Вы сможете создать "дистрибутив" и распространять свою программу даже на те компьютеры, где нет Office 2000 и Access. Недостаток такого распространения то, что у Вас увеличивается размер программы.

Ещё...

Выпуск 3. Где найти примеры программ на Access ?

Если Вы начинаете программировать на VBA, то советую Вам познакомиться с примерами на Visual Basic для Access зарубежных и отечественных программистов. Ниже приводится список сайтов, где Вы сможете найти данную информацию.

msdn.microsoft.com (English) Данная библиотека разработчика Micrisoft позволяет быстро получить доступ к информации по программам на Visual Basic и других языках. Например, Вам необходимо посмотреть примеры программ созданных для объекта ActiveX TreeView . Нажмете ссылку TreeView и Вы увидите все документы по TreeView и процент их полного совпадения с вашим запросом.

microsoft.com/office/access  (English)  На данной ссылке Вы найдете материалы по Access, а именно, то что из себя представляет программный продукт Microsoft Access: назначение, системные требования, использование, поддержка и т.п.

Ещё...

Выпуск 2. Какую литературу по Access выбрать ?

    Если Вы впервые начинаете работать с Access, то на первом этапе потребуется специализированная литература по базе данных. В этой рассылке собраны некоторые ссылки на издательства, которые выпускают литературу по Access. Число книг приводится на 29.08.2000.

www.piter-press.ru (8 книг)   Издательство "Питер-Санк-Петербург" занимается выпуском технической литературы. Наберите "Access" и удобная система поиска позволяет Вам быстро найти нужную литературу по Access.

www.books.ru (32 книги)   Один из популярных книжных сайтов, который занимается продажей книг (Access в том числе) через Интернет.

www.rusedit.ru (4 книги)   Сайт издательства "Русская редакция" занимается выпуском только компьютерной литературы. В частности очень известна и популярна серия учебных курсов "Microsoft Press", включая CDROM, для подготовки сертифицированных специалистов.

www.dialektika.com   Сайт украинского издательства "Диалектика" занимается выпуском компьютерной литературы "для чайников" (VBA для чайников)  и другой, например, "Библия Access 95". На сайте нет системы поиска, поэтому сразу определить сколько книг относится к Access затруднительно.


Выпуск 1. Установка Office 2000 и Access 2000

Для правильной работы программ под Microsoft Access 2000 надо грамотно установить Windows 2000 и Access. Далее дается информация об установке этих программ.

Установка Windows

1. Возьмите CDROM диск с Windows 98 (SE) или Windows 2000 (profesional /server). Windows 2000 может быть иметь английский или русский вариант. 2. Установите "начисто" Windows. Процесс "начисто" означает, что перед установкой операционной системы необходимо отформатировать диск, который будет системным. Вы можете также создать на компьютере вторую операционную систему, например, Windows 2000.

Ещё...

Выпуск 30. TreeView и защита базы

Вакансия руководителя.  Нам нужен руководитель, но при этом разбирающийся в вопросах программирования и создания баз данных. Вот образец подходящего нам резюме. Отличное знание компьютерной техники и специального торгового оборудования (контрольно-кассовые машины, оборудование для штрихового кодирования, электронные весы, системы защиты от потерь Sensormatic, Мето). Навыки программирования в  Windows NT, знание специализированного  ПО: Cупермаг,  Супермаг- УКМ (<Сервис Плюс>), БЭСТ (<Интеллект Сервис>), IAB-Trade (<Интерартбазар>/IBS), Компас (<Инкомсофт>), R-Keeper (VSC), 1С. Участие в крупных проектах по автоматизации торговых предприятий. Проведение предпроектного обследования в области комплексной автоматизации торговых  предприятий. Последующая реализация этих проектов с внедрением конкретных систем, знание технологии розничной торговли.  Опыт руководства коллективом до 10 человек, работа с клиентами, проведение переговоров, заключение контрактов. Желательно знание Windows NT и Java, понимание принципа работы интернет - магазина
Зарплата: 1000$
Город: Москва
Режим работы: Полный рабочий день
Образование: Высшее
Пол: Мужской
Возраст: 25-40
Контактное лицо: Станислав Гудилин

Новости магазина
    В магазине "Лидер Access" появилась новая программа "Авансовые отчеты". Применяется в бухгалтерии. В программе есть справочники: "Статьи затрат", "Сотрудники", "Участки". На базе их создаются отчеты. Цена программы 250 рублей + НДС. Защищена от изменений. Автор: Олег Кошевой.
Новости сайта
27.04.2001. На сайте добавился дополнительный комментарий и дискуссия по подписке с Андреем Беляковым по компиляции в базе данных. Смотрите 28 выпуск подписки 341 вопрос.

Ответы на вопросы

   Персональное спасибо Инне Соколовой за помощь в ответах на вопросы. 
Вопрос 151 (05.01.2000) Windows'95. MS Access 2.0 Все работает нормально. Нужен WORD'97. Установка MS Office 97 _БЕЗ_ MS Access'97. Почему-то пропадает MS  Access  2.0. Вероятно, винда спросила что-то типа "обнаружены лишние  копии  офиса,  их  удаление  никак  не  повлияет на ...". Очевидно  повлияло, т.к. при последующей установке MS Access 2.0 на уже установленный MS Office 97 получаем следующее: Access  2.0  спокойно создает новые базы и работает с ними, а при открытии  старых,  т.е.  созданных  ДО установки офиса-97, выдает ошибку "такой-то файл поврежден или не является файлом MS  Access" На другой машине с Access 2.0 эти-же файлы нормально работают. Как быть? (При  попытке  преобразовать  mde  версии  2.0  для  MS  Access 97 выдается  "ошибка  компиляции",  а  т.к.  модулей там навалом, то переписывать под Access-97 не стал. Долго, да и лень.)
   Ответ. Инна Соколова. Порядок установки должен быть такой. Сначала ставим OFFICE'97, можно вместе с Access. Потом ставим Access 2.0 в свою директорию, например ACCESS, и в свою группу, например Microsoft Office. Все работает. По умолчанию запускается Access 2.0. Правда у меня нет файлов .mde , а только mdb
Вопрос 219(06.02.2001) Как часто Вы пользуетесь элементами ActiveX, а именно FlexGrid, DataGrid и TreeView? (кстати справки по этим элементам в Офисе почему то нет) В хелпе(MSDN для VB) написано, что если использовать эти элементы мне нужно с ними будет поставлять файл mscomctl.ocx. Неужели это верно и для Аксесс, или эти элементы входят в стандартную поставку офиса
  Ответ 1. Я бы сказал так, что элементы FlexGrid и DataGrid практически не применяю (справедливо для Access, а не VB). Напротив элемент TreeView имеет повышенное внимание у заказчиков. Примерно 9 из 10 хотят его куда-нибудь добавить. Например, были разговоры по применению у юридической компании (для учета договоров в формате word и excel), у производственной фирмы (для учета электронных компонентов) и в торговых компаниях. Так что советую его серьезно изучить. Надо отметить, что элемент TreeView, с моей точки зрения, достаточно капризный и имеет много "проблем" в разных операционных системах. Например, если при открытии формы в событии Open (не Load) Вы поставите загрузку узлов дерева, то получите только "каркас" (дерево без текста). Справедливо - для Windows 2000, но не Windows 98. Исправить ошибку бывает очень сложно, даже прямой ввод текста не помогает. Бывает при редактировании класса разрушается вся база данных. Есть и другие ошибки, которые предлагается исправить через api-интерфейс. Подробности смотрите в библиотеке разработчика MSDN.
   В файле la_activex.mdb есть пример 5 по применению TreeView. Он основан на создании нового класса MicrosoftTree и имеет большую надежность, чем создание дерева без класса. Все события дерева отображаются в форме. Для операций Drag & Drop также показано добавление узла красным цветом.
   Пример дан в сокращенном варианте. Коммерческая версия имеет больше возможностей. Она позволяет привязать TreeView к любой таблице, сохранить дерево после редактирования, удаления и сортировки узлов, отобразить всплывающее меню и иконки, позволяет в операциях drag & drop изменять drag-иконку и работать с подчиненными узлами.
   А теперь изучите класс для работы с TreeView

' Объявляем класс Tree с событиями
Public WithEvents Tree As TreeView

' Объявляем собственное событие для сообщений в главной форме
Public Event progress(strMsg As String)

' Переменные для сохранения узлов в операции DragDrop
Private Type DropDrag
   idxStart As Long ' Начальный узел перемещения
   idxEnd As Long ' Конечный узел перемещения
End Type

'События при создании/уничтожении класса. Можете добавить в них свои функции при создании или уничтожении дерева
Private Sub Class_Initialize()
Private Sub Class_Terminate()

' События до и после редактирования текста узла
Private Sub Tree_BeforeLabelEdit(Cancel As Integer) ' Перед редактированием
Private Sub Tree_AfterLabelEdit(Cancel As Integer, NewString As String) ' После редактирования

' События мышки при работе с узлами дерева
Private Sub Tree_NodeClick(ByVal node As node) ' Выбор узла
Private Sub Tree_NodeCheck(ByVal node As node) ' Установка флажка
Private Sub Tree_Expand(ByVal node As node) ' Расширение узла
Private Sub Tree_Collapse(ByVal node As node) ' Сворачивание узла

' События при управлении левой кнопкой мыши
Private Sub Tree_Click() ' Одно нажатие
Private Sub Tree_DblClick() ' Двойное нажатие

' События клавиатуры
Private Sub Tree_KeyUp(KeyCode As Integer, ByVal Shift As Integer)
Private Sub Tree_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
Private Sub Tree_KeyPress(KeyAscii As Integer)

' События типа DragDrop. Возможны только при настройках TreeView: OLEDragMode = ccOLEDragAutomatic и OLEDropMode = ccOLEDropManual

' Событие мышки, а также OLEStartDrag используем для определения выбранного узла для перемещения.
Public Sub MouseDown(Button As Integer, Shift As Integer, x As Long, y As Long)

' 1 dragdrop. Начало перемещения. Используется для настройки режимов перемещения или копирования.
Private Sub Tree_OLEStartDrag(Data As DataObject, AllowedEffects As Long)

' 2 dragdrop. Изменение координат мыши x и y. Используется для изменения режимов dragdrop. Для работы с узлами используем DropHighlight и HitTest(X, y)
Private Sub Tree_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single, State As Integer)

' 3 dragdrop. Событие срабатывает после OLEDragOver. Используем для определения режима перемещения
Private Sub Tree_OLEGiveFeedback(Effect As Long, DefaultCursors As Boolean)
...
' 4 dragdrop.  Последние событие до завершения перемещения. Используем для определения конечного узла перемещения
Private Sub Tree_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)

' 5 dragdrop.  Конец перемещения. Используем для управления узлами (перемещением, удалением, копированием) выбранными до и после перемещения
Private Sub Tree_OLECompleteDrag(Effect As Long)

' Функция сообщающая о получении событий
Private Function funPrintProgress(myMsg As String)
RaiseEvent progress(myMsg) ' Генерируем событие для узла
End Function

' Главная функция загрузки узлов из таблицы
Public Function Load(strSQL As String) As Boolean
Dim myУзел As String, myКлюч As String, idx As Long
Dim rst As ADODB.Recordset
On Error GoTo 999

' Загрузка дерева
Set rst = New ADODB.Recordset
rst.Open strSQL, Application.CurrentProject.Connection
Me.Tree.Nodes.Clear
Do Until rst.EOF
' Создание узла и его ключей
myУзел = "la_" & rst!Relative
myКлюч = "la_" & rst!Key
If Not IsNull(rst!Relative) Then
idx = Me.Tree.Nodes.Add(myУзел, tvwChild, myКлюч).Index
Else
idx = Me.Tree.Nodes.Add(, , myКлюч).Index
End If
' Изменение нового узла
With Me.Tree.Nodes(idx)
.Text = Nz(rst!Text)
.Selected = True
End With
rst.MoveNext
Loop

' Настраиваем класс
With Me.Tree
' Разрешаем операцию DragDrop
.OLEDragMode = ccOLEDragAutomatic
.OLEDropMode = ccOLEDropManual

' Стили дерева
.Style = tvwTreelinesPlusMinusText
.LineStyle = tvwRootLines ' Использование корневого узла
.Indentation = 300 ' Длина штриха узла
.Checkboxes = True ' Показываем флажки
End With

Load = True

998:
rst.Close
Set rst = Nothing
Err.Clear
Exit Function
999:
Load = False
MsgBox Err.Description
On Error Resume Next
Resume 998
End Function
   Ответ 2. Элемент TreeView входит в поставку Windows (98-2000) или Office (97-2000), но точно не проверял. Если у Вас установлены эти программы (по умолчанию), то проблем с ним быть не должно.
Вопрос 292(22.03.2001) У меня возникла странная ситуация с Access 2000, а именно: на моей домашней машине при программировании я не обнаружил в типах величин Database. То есть, при написании процедуры для какого либо события в форме (допустим для нажатия кнопки), мне необходимо описать переменную dbs как объект-базу. Обычно я пишу следующее:
dim dbs as database
При написании данной строки программы после ввода слова as Visual Basic выдает окно-список с возможными типами величин для данной переменной. Среди всех этих типов я не нахожу тип Database-его просто нет. Соответственно, если я все же пишу данную переменную под тип database и запускаю программу, на данной строке возникает следующая ошибка:
Compille error
User-defined type not defined
Здесь же можно добавить, что исчез еще и тип Databases. В то же время на этой же моей домашней машине есть базы данных, написанные мною так же в Access 2000, но на другой машине. Назовем эти базы так: База1-состоит из таблиц и форм и База2-состоит только из таблиц. Так вот, для Базы1, где есть формы такой проблемы нет. Там все нормально работает, при добавлении, изменении и даже при создании внутри базы новой формы, все типы величин присутствуют, тип database работает и в меню описания данных присутствует, а вот в Базе2, где не было форм, проблема осталась та же. Ситуация абсолютно замороченная с моей точки зрения, но все же может что-нибудь посоветуете?
   Ответ. Прекрасный вопрос. Детально описана проблема настройки ссылок. Прежде всего он будет полезен для тех, кто только что перешел на Access 2000. Часто "новички" при переходе от Access 97 к 2000 забывают установить ссылки на DAO (там находится объект database). По умолчанию, при создании новой базы данных, создается ссылка на ADO, а DAO нет. Для исправления ошибки в редакторе VBA (Tools-References...) установите ссыл��у на Microsoft DAO 3.6 Object Library.
Вопрос 294(22.03.2001) Ошибочная ситуация при попытке присвоения значения "" переменной String в переменную Long через функцию CLNG. Возникает ошибка, выполнение программы останавливается. Обработчик аварийных событий на это никак не реагирует, не позволяя тем самым автоматизировать обработку ошибки. Вот пример кода:
   Dim s As String, l As Long
   s = Null2Str(Me.God.Value)
   On Error GoTo ConvErr
      l = CLng(s)
   On Error GoTo 0
Посоветуйте что-нибудь. Может это зависит от каких-то настроек среды? Или я столкнулся с плохой версией MSOFFICE?
  Ответ. Вот небольшая программа для проверки обработчика ошибок. Запустите ее. Если сообщение "-555, Проверка ошибки" появиться на экране, то настройка среды Access у Вас правильная.
Public Function funTestError()
On Error GoTo 999
Err.Raise -555, , "Проверка ошибки"
Exit Function
999
MsgBox Err.Number & ", " & Err.Description
End Function
  P.S. Возможно, что ошибок нет в вашем коде, но тогда используйте Debug.Print для проверки данных внутри программы..
Вопрос 299(27.03.2001) Вопрос по dbf. Импорт как и связывание трудностей не вызывает. Проблема в том, что при построении запроса не учитывается регистр букв. Например, есть такие коды в справочнике 142Ю  и  142ю. Есть остатки (напр. 142ю - 100, 142Ю  -  200). При построении запроса (наименование  -  кол-во) получаю
             142ю  -  100
             142ю  -  200
             142Ю  -  100
             142Ю  -  200.
  Ответ. Надо проверять структуру Вашего запроса. Регистр букв может и не учитываться при сравнении строк. Попробуйте использовать в запросах функцию StrComp(MyStr1, MyStr2, 0) с разными режимами сравнивания. Другой вариант заключается в переводе полей в числа и в сравнении их.
Вопрос 302(28.03.2001) Как документ распечатать на принтере под Access, Word или Excel.
  Ответ. Не достаточно точный вопрос. У каждого офисного приложения есть команда "Печать". Ищите ее в разделе Файл. Есть также примеры по клиентам автоматизации. Для Access можно открыть отчет и сразу послать его на печать.
Вопрос 309(3.04.2001) При внесении изменений в отчеты, меняются параметры страницы на значение 25,4мм (значение по умолчанию), где можно изменить это значение, либо каким программным способом это значение можно поменять.
  Ответ. В Access 2000 возможна потеря настроек отчета. Решение ищите в статье 8 данной подписки.
Вопрос 316(12.04.2001) Как установить "полное" имя контрола в субформе в виде: Forms!NameOfMainForm!NameOfSubform.Form.NameOfСоntrol и возможно ли это вообще?
   Ответ. Можно установить имя для любого объекта в базе данных. Обращения к подчиненной форме есть в примерах и справке. Например, [Form_Пример 03].fun1... Ниже приводится 3 примера, хотя можно придумать и другие
      Application.Forms(0).Controls(8).Visible = False '1 пример
      Application.Forms.Item(0).Controls.Item(8).Visible = False '2 пример
      Application.Forms("Массивы Access").Controls("Линия1").Visible = False '3 пример
Вопрос 320(16.04.2001) В подчиненном отчете есть флажок "Оплата в гривнах", а в главном - надпись"USD", которое должно быть невидимым, если флажок установлен. При попытке проверить условие с помощью If...Then (например If [Подчиненный_отчет].Report![Оплата в гривнах] = True Then [USD].Visible = False) возникает ошибка "выражение не содержит значения" Возможно ли, вообще, ссылаться на значения флажка.
   Инна Соколова . Ссылка на значение флажка возможна, только наоборот - из подчиненного отчета в главный. Это можно сделать в процедуре на свойство "форматирование". И еще надо уточнить, на какое значение ссылаться. Для этого можно просто вывести это значение с помощью msgbox.
  Виктор Конюков . При обработке событий отчета желательно научиться использовать ссылки таким образом: Me.Section(acDetail).Controls("Дата")
Вопрос 322(18.04.2001) При установлении связи access 2000 - dbf ( с memo полями -dbt) связь устанавливается, но таблицу открыть нельзя. Если memo поля пустые, то можно! SR-1 и ODBC установлены. В чем может быть дело?
   Ответ. Если часто работаете с dbase, то советую изучить ODBC драйверы (dbf) других поставщиков (например, Borland). У Microsoft он имеет некоторые ограничения, детально не изучал, но могу сказать, что ODBC драйверы используют api-интерфейс. И здесь не мало ошибок можно спрятать. С другой стороны, есть в Access 2000 возможность использовать более современные способы связи, например, OLE DB.
Вопрос 324(20.04.2001) Добрый день, у меня вот какой вопрос возник можно ли скомпилировать Access приложение так чтобы оно работало потом как exe файл на другом компьютере, даже если на нём сам Access не установлен ???
  Ответ. Невозможно. Известно 2 обходных маневра по которому идут разработчики
   • конвертируют программу в Visual Basic. Программа называется AccessToVB;
   • покупают Microsoft Office 2000 Developer. Это специальный выпуск Office, предназначенный для разработчиков, создающих и внедряющих такие предложения. В этот продукт входит приложение Access Run Time, которое Вы можете распространять без лицензионной оплаты. Используя мастер упаковки и развертывания (Package and Deployment Wizard), Вы сможете создать "дистрибутив" и распространять свою программу даже на те компьютеры, где нет Office 2000 и Access. Недостаток такого распространения то, что у Вас увеличивается размер программы.
Вопрос 327(20.04.2001) Возможно - ли динамически менять источник данных для подчиненной формы. Все перепробовал, да и в справке ничего нет.
   Ответ. Можно. Примеры на эту тему есть на сайте, в справке и т.п. В классе подчиненной формы создайте функцию общего доступа, т.е. Public {Me.RecordSource=}, и применяйте ее когда хотите.
Вопрос 343(03.05.2001) Ecli netrudno, podskajite pojalusta kak v  FORM CAPTON-pisat na nacionalnom iasike (russkii y menia poluchaetcia), kogda meniau v DESKTOP-e meniau MESSAGE BOX-e posle perepagrusk vosstanovlivaetsia.
  Ответ. Для ввода каких-либо знаков отличных от стандартной кодировки можно воспользоваться клавишей Alt. Удерживая ALT наберите на расширенной клавиатуре 0169 и отпустите ALT. В результате Вы получите символ ©. Чтобы полностью ответить на Ваш вопрос надо еще знать какие наборы символов установлены у Вас.
Вопрос 344(03.05.2001) У меня часто появляется сообщение о недостатке памяти при работе с созданной в Access 2000 базой. После закрытия приложения ресурсы ОЗУ системы не восстанавливаются. ОЗУ у меня 64 МГ, но та же проблема возникла на машине со 128 МГ ОЗУ, куда я скопировал свою базу. Access ставили по-хорошему: сначала
на отформатированный диск - Windows 98, потом - Office 2000. В учебнике Джона Вейскоса вообще сказано, что достаточно 32 МГ ОЗУ. Пенечек у меня - 366-й. Но я каждый раз вынужден перегружать тачку для продолжения работы. Да и база простенькая, всего 1 МГ, пустая почти. Создал даже новый пользовательский интерфейс без локалки, оптимизирую базу, и ничего не помогает. Диск не переполнен.
   Ответ. Проверяйте офис и программный код. Выяснено на практике, что  64 МБ достаточно для работы Access 2000 как в сети так и на одном компьютере. Читайте также решение аналогичных проблем на сайте. Для проявления ошибок создайте пустую базу данных и закачать туда формы и другие объекты.
Вопрос 345(03.05.2001) Есть необходимость сформировать отчет в котором первый лист отличается от всех последующих, хотя источник записей у них один. Лист этот отличается внешним видом, для формирования которого заголовка, верхнего колонтитула и области данных отчета не достаточно (нижний колонтитул задачи не решает.
  Ответ. Создайте подчиненный отчет и добавьте его в основной. Пример создания подчиненного отчета есть на сайте в файле la_report.mdb (N3)
Вопрос 346(03.05.2001) Есть ли какая-либо возможность работать с Access2000 только через VB-приложение, не позволяя пользователю лазить в MDB-file, просматривать оттуда таблицы таблицы и создавать запросы? У меня несколько сотен пользователей распределяемого VB-Access приложения. Возможности перейти к технологии клиент-сервер нет по политическим мотивам. Обязательно находятся "умельцы" уничтожающие данные напрямую из MDB-file при его прямом просмотре. Бэкап при этом они часто уничтожают тоже. Объяснить им что-либо не представляется возможным из-за крайней тупости местных жителей и их неспособности к IT-технологиям (действо происходит в Канаде).
    Ответ. Во первых, можно посоветовать поставить на mdb файл пароль и ограничить доступ к объектам базы данных через применение системных файлов *.mdw, но в этом случае придется переписывать весь код. Но с другой стороны можно попробовать защитить mdb файл без установки пароля и привилегий доступа.
   1 способ. Подробно описан в примере 8 файла la_prot.mdb. Сущность его - при открытии базы данных надо погасить важные таблицы (запросы) и их поля, а вместо этого подсунуть пользователям "мусор", состоящий из не нужных таблиц. После открытия базы данных пользователь не сможет увидеть объекты, но даже если он догадается открыть таблицу, то там не будет полей. Вот примеры кода:
Application.SetOption "Show Hidden Objects", False ' Настраиваем базу
Application.SetHiddenAttribute acTable, tdf.Name, True ' Гасим таблицу
fld.Properties("ColumnHidden") = True ' Гасим поле таблицы
   2 способ. Он подробно описан в примере 9 файла la_prot.mdb с примерами для защиты таблиц и модулей. С помощью этого способа можно закрыть доступ к любому объекту. Сначала Вы защищаете программу от кнопки Shift. После этого создаете фоновую программу. Запускаете ее через макрос AutoExec или невидимую форму, которая будет проверять загрузку таблиц,  модулей и т.п. и обрабатывать эти события так, как Вам нужно. В этом случае хотя пользователь и будет видеть объекты базы данных, он не сможет их изменить. Вот пример кода для защиты таблиц и запросов
While (FlagExit) ' Замкнутый цикл с проверкой
For Each tbl In Application.CodeData.AllTables
If tbl.IsLoaded Then
DoCmd.Close acTable, tbl.Name ' Закрываем таблицу
'Application.Quit acQuitSaveNone ' или выходим из базы
End If
Next tbl
   Далее для надежности скомбинируйте оба способа для защиты базы данных. Советую также, применить в модуле специальный запрос и "схватить за руку" хулиганов, а потом программным путем "разобраться" с ними. Вот этот запрос: Set rst = CurrentProject.Connection.OpenSchema(-1, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}"). Обрабатывая его поля, Вы сможете "вытащить" имя компьютера, пользователя и другую информацию (смотрите пример 10 файла la_prot.mdb).
   P.S. Если Ваш канадский босс пожертвует немного средств, то по краткосрочному контракту можно и посложнее сделать защиту.
Вопрос 347(07.05.2001) Столкнулся с такой нехорошей ситуацией: оператор Like в запросе с аргументами "г*", "е*", "к*" не выдает записей, начинающихся с этих букв :-(  (Ассess 2000, без SR, равно как и с SR1 и с SR1а) Так кстати происходит и при попытке установить фильтр с этими условиями ... Пожалуйста подскажите как победить эту ситуацию (или хотя бы обойти - выбрать записи, начинающиеся с г, е, к)
   Ответ. В примере 3 файла la_form (контекстный поиск) оператор Like с данными аргументами работает. Исключение составляет только то, что при поиске не учитывается регистр букв (к=К). Для точного сравнивания можно использовать бинарное сравнивание в запросах. Смотрите функцию StrComp.
Вопрос 349(07.05.2001) Помоги пожалуйста решить такую проблему.
Access-2000 перестал "видеть" JPEG - файлы. Переустановка ОФИСА полностью - успеха не принесла. Речь идет о базе данных, в которой на экран выводятся изображения рисунков. BMP показывает, JPEG - нет. В WINDOWS GPEG зарегистрирован. Пробовали в офисе сначала убрать JPEG фильтр ( при установке) , затем снова поставить, все равно не помогло. Что делать?
    Ответ автора. Кормилкин Юрий. Раньше регистрация JPEG была нормальной и файлы открывлись в ACCESS хорошо. Но потом менялся Windows'98 (на SE) и после этого файлы JPEG перестали читаться. (Хотя по двойному щелчку в проводнике они попадали в INTERNET EXPLORER так же, как и BMP). Далее дважды переустановка OFFICE результатов не принесла, была даже попытка переустановить поддержку JPEG формата в ACCESS (вначале их специально убрал, затем поставил опять ), но удача была не на моей стороне.  Наконец, все решилось повторной установкой Windows 98SE.
Вопрос 351(14.05.2001) Как в элементе Календарь MSCAL.Calendar.7 сделать дату текущую при открытии, а то совсем неудобно переводить дату постоянно...
   Ответ. В примере 6 la_activex.mdb подробно описаны события для календаря, а также показано несколько способов настройки его данных на любую дату.