Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Access 2000 - программирование и готовые решения


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Выпуск 16. Как изменить поле "Счетчик"?

Введение.
    
В данном выпуске рассматриваются 28 вопросов пользователей. Всего добавлено 11 программ в файлы: la_table.mdb (7), la_report.mdb(2), la_form1.mdb(1),  la_menu.mdb (1)

Новости магазина.
      27.10.2000. Добавились специализированные отчеты по автоклавам и складскому учету.
     С 01.11.2000 года вводятся новое платежное поручение. Вы можете купить отчет в открытом mdb файле - цена 75 рублей. Для пользователей, кто желает вести профессиональный учет банковских операций на базе Access 2000, может купить программу "Банк предприятия" по льготной цене 1000 рублей. Скидка действует до 03.11.2000 года включительно.

[Таблицы]. Вопрос 1. Подскажите чайнику - в таблице поле - "Счетчик". Набрано 8 записей. после их удаления при наборе новых записей счет идет с 9 и дальше. Как обнулить счетчик?
Ответ.
   Вопрос сложный. Access не даст Вам изменить поле счетчика ручным или программным способом. Выход заключается в том, что необходимо уничтожить старое поле "Счетчик", а потом создать новое. Недостаток такого способа - рост размера базы данных. Пример создания и удаления счетчика приведен в программе la_table.mdb.
   P.S. Теоретически и практически возможно изменение счетчика, минуя ядро Access, но для этого необходимо знать структуру mdb файла. Я никогда в разработках не использую поле счетчик, а стараюсь генерировать уникальный номер с помощью собственной функции.
[Отчеты]. Вопрос 2. Подскажите или сделайте пример, пожалуйста, как посылать отчет по
факсу с компьютера. У меня программа факса Venta ZVoice (для модема ZyXEL Omni 56k). Или может быть рассмотреть и такой пример: отчет экспорт в файл, допустим Word, а затем экспорт в Venta ZVoice.
Ответ.
   Для того, чтобы послать отчет Access на факс существует функция: DoCmd.SendОbject. Пример ее использования приведен в файле: la_report1.mdb. P.S. Возможна также передача факса через DDE - интерфейс.
[Таблицы] Вопрос 3. Я пытаюсь самостоятельно изучать Access, в основном по Help-у и не все еще получается. У меня появилась необходимость сделать несложную программку по капитальному ремонту, которая состоит из двух частей, а именно виды выполненных работ и израсходованных при этом материалов. С работами особых проблем нет, а с материалами сложнее. Принцип заключается в том, что берутся данные из файла .dbf, выбираются необходимые материалы (как правило это несколько наименований), в необходимом количестве и записываются в таблицу отчета (для возможности последующего просмотра и распечатки отчета). Но сложность (для меня) заключается в том, что в базе данных (не обязательно в файле .dbf), можно в таблице, которая импортируется из этого файла .dbf, необходимо уменьшать количество оставшегося материала на величину списанного и при этом всем выбранным списком (по возможности).
Ответ.
   Данная задача, когда требуется обновление части записей на постоянную или переменную величину, решается с помощью запроса на обновление, который применяется в функции VBA. Пример использования такого запроса дан в файле la_table.mdb
[Таблицы]. Вопрос4.   Access 2000 мне взять негде но вопрос по Access 97 я думаю Вы сможете мне помочь. Суть проблемы. На сервере фирмы выложена база (Б1) данных из таблиц которой я запросом в свою базу (Б2) качаю информацию и пытаюсь обработать. Так вот поле с цифровыми данными в Б1 проставлен тип - текст. При обработке таблиц в Б2 не могу изменить текст на цифровой тип, или теряются данные или выдает ошибку. Есть какой-то прибамбас для этого? А пока качаю в Excel и меняю там но время уходит уйма, кол. записей в таблице достигает порядка 27- 50 тысяч.
Ответ.
   Да такие проблемы могут встречаться при передаче данных. Для этого Вам необходимо в запросе, который обрабатывает таблицы, принудительно провести перевод данных из текстового формата в числовой. Пример конвертера текстовых полей дан в файле: la_table.mdb
[Формы]. Вопрос 5-7. 1. В "Лекциях..." , в примерах и ответах Вы применяете механизм DAO, но в руководствах по Access2000 указывается, что Microsoft активно внедряет механизм ADO, и со временем он может вытеснить DAO. В связи с этим нельзя ли указывать на нюансы, которые могут возникнуть (напр. невозможность реализации некоторых функций или алгоритма DAO с использованием ADO). Я только начал изучать Access, так почему бы сразу не начать с ADO. Еще лучше, конечно, дублирующие примеры . Какое Ваше мнение на использование DAO / ADO ?
2. Таблицы хранятся в другой БД. На нее поставлен пароль, при попытке соединения  выдается сообщение, что база данных заблокирована с монопольным доступом. Каким образом заблокировать БД с таблицами от попытки открыть любым другим способом, кроме "родного".(помимо установки в самой БД с таблицами макроса Autoexec, стартовой формы и т.п.)
3. В примерах по созданию кнопок меню необходимо предварительно создать строку меню с помощью "Настройка" В "Лекциях" строка меню создается в другом приложении.
Метод DoCmd.AddMenu требует описания исполнительного макроса. Каким образом в текущей базе данных программно узнать включенные меню, погасить их и создать собственную строку меню p.s. Конечно воспользоваться "Настройка" гораздо проще.
Ответ.
    1. Документацию по Бэйсику, которую Вы только начали изучать уже "устарела", есть новая 7.0 версия с другими библиотеками. Мой совет, если все же решите изучать Access, на начните с DAO, когда приобретете SQL сервер или Oracle изучите ADO или ADOX. Хорошие примеры на эту тему есть в справочной системе.
    2. Некоторые вопросы защиты базы данных смотрите в разделе сайта "Защита"
    3. Вообще о том, как погасить или отобразить панель меню я дал в примере N1 смотрите файл: la_menu.mdb. Для начинающего программиста задача "Отображения меню" в Access - отличный способ себя проверить. Используя лекции, а также указанный пример, Вы сможете спокойно решить ее. Если что-то не получится, то смотрите решение N3 в файле la_menu.mdb
[Формы]. Вопрос 8. Не могли бы Вы мне подсказать, как мне поступить? Ситуация: в форму вводим данные, затем при закрытии этой формы нужно распечатать введенные данные на листе в двух экземплярах, причем в заранее выбранном формате плюс некоторые значения должны быть обработаны с помощью макросов (например, перевод из числовой формы в текстовую). Как распечатать саму форму - понятно, но как придать ей новый вид?
Ответ.
   Вообще формы не печатают. Для этого существуют отчеты. Попробуйте создать отчет, и там решить Ваши проблемы.
[Формы]. Вопрос 9. Rasskazhute,pozhalyjsta,kak cozdat' coctavnue i cvjazanue formu.
Ответ.
  
О том как создать формы рассказывается в лекциях и примерах la_form.mdb и la_form1.mdb. Если возможно, то уточните вопрос.
[Таблицы] Вопрос 10. У меня вопрос, конечно, детский, но... Уж очень раздражает. Каждый раз при открытии Access 97 главное окно свернуто и при вызове таблиц, запросов и т.д. тоже раскрываются свернутыми. Возможно ли иначе?
Ответ.
   Можно. Для этого при открытии таблицы, запроса или отчета надо вставить команду DoCmd.Miximize. Пример смотрите в файле: la_table.mdb
[Формы] Вопрос 11. Буду очень благодарен, если Вы проясните вопрос: есть ли в Access 2000 календарь, и если есть , то как им пользоваться, а так же как узнать установленный пользователем фильтр в подчиненной форме?
Ответ.
   Да, в Access 2000 есть календарь в виде ActiveX элемента. Используется он очень просто. Вставьте его в форму и добавьте свою функцию в событие календаря AfterUpdate. Пример смотрите в файле la_form1.mdb. Фильтр в форме можно узнать через команду s= me.filter.
[Проблемы] Вопрос 12. Не нашел в рассылке ссылок на разработку БД в сетевом варианте. Есть ли особенности при проектировании БД для сетевого использования? Проблема: одно-ранговая сеть на РК кабеле, создал локальную БД, затем разделил, создал группу, таблицы на одном ПК и две оболочки. При запуске БД и попытке ввода информации в таблицы, все зависает. Я - начинающий, может что-то не так делаю, или сеть перегружается?
Ответ.
   Да отличия есть. Зависание сети зависит от многих факторов: от проводки, от связи с HAB и даже от названия полей таблиц. Для тестирования сети нужно иметь проверенную сетевую программу, написанную на Access. Я, например, пользуюсь программой "Книги бухгалтерии", так в ней не очень большое количество таблиц. Что делаю? Во первых, создаю автоматически несколько филиалов на всех локальных дисках. Во вторых, делаю проверку на ввод данных несколькими пользователями. В третьих, загружаю новые таблицы в эталонную базу данных и проверяю поля. Если возникли ошибки или просто предупреждения, то их я просматриваю в "Журнале контроля". Решение об исправлении принимаю в зависимости от серьезности ошибок.
[Отчеты] Вопрос 13. Во время создание отчета возникла проблема с ограничением ширины поля (около 58см), можно ли обойти данное ограничение
Ответ.
   Если Вы возьмете 2 листа бумаги 11 формата и сложите по длинной стороне, то получите 59,4 см. Отбросьте поля в 7 мм, и Вы получите размер бумаги для печати на широкоформатных принтерах. Далее по ширине печати идут графопостроители (плоттеры). Для печати на таких устройствах используются графические программы со специальными драйверами печати или рисования. У меня нет таких устройств. Могу дать только идею: попробуйте использовать пример N11 в файле la_report.mdb, где поле рисуется с помощью функций отчета, а не строится через конструктор.
[Формы] Вопрос 14. Не могли бы Вы ответить на следующий вопрос: у меня есть ленточная форма. После добавления новой записи я поставил команду Me.RecordsetClone.Requery для обновления формы. При ее выполнении выдается ошибка: "Out of stack space. Error 28" и Access зависает. Что можно сделать в этом случае?
Ответ.
   Для подчиненной формы запрос обновляется через команду me.requery. Для главной формы необходимо еще уметь сохранять позицию записи, потому что при использовании указанной команды, позиция редактируемой записи теряется.
[Проблема] Вопрос 15. Не встречалась ли Вам такая проблема: Имеется файл *.adp(ade) к проекту которого подключен другой файл *.ade В подключаемом файле написаны собственные библиотечные функции. В исходном файле в просмотре объектов все функции подключаемого файла видны нормально, но при попытке вызвать любую функцию из модуля выдается ошибка: функция не определена. Но это еще не все - описанная проблема проявляется периодически и не на всех файлах работающих по такой схеме. Случайно обнаруженное временное решение проблемы: переименование названия проекта в VB. Создание нового файла и импортирование в него всех объектов проблему не решает.
Ответ.
   Сложная проблема. Начните проверку ссылок в VBA, а также наличие полного доступа ко всем файлам DLL, которые использует Ваша программа.
[Таблицы] Вопрос 16. Работаю с Access97 c начала его выхода. Решил перейти на Access2000 и сразу столкнулся с проблемой. У меня в приложениях Access2000 все присоединенные *.dbf файлы открываются заблокированными и только для чтения. Следовательно я не могу ни отредактировать данные, ни установить фильтр и т.д. Как решить эту проблему?
Ответ.
   DBF файл открывается в однопользовательском режиме. Закройте все приложения, которые работают с вашим файлом. Попробуйте в примере N1 файла la_table.mdb, присоединить Ваш файл. Если файл открывается только для чтения, то проблема в ваших dbf-файлах. Возможно они закрыты от записи.
[Программы] Вопрос 17. Подскажите, пожалуйста, где бы я мог раздобыть базу данных по учету книг домашней библиотеки (может быть, необязательно домашней), написанной на Access 2000. Хотелось бы иметь возможность развития этой базы. Я не программист и начать с нуля для меня затруднительно - не знаю, как подступиться. Пример подобной базы, написанный для Access 97 у меня не понимает мой пакет Office 2000.  Проект, как Вы понимаете не коммерческий.
Ответ.
   Пока информации о такой программе, распространяемой в открытых кодах у меня нет. Подождите немного, возможно кто-то и поставит ее на продажу в магазин "Лидер Access" по доступной цене.
[Формы] Вопрос 18. При использовании поля с списком с параметрами как в рисунке, часто на экране не отображается содержание второго столбца, значение в поле есть, в качестве параметра для отбора использовать можно. При новой загрузке формы восстанавливается. Наблюдается в не обновленной версии 2000 года. Если есть решение, подскажите.
Ответ. Перегружать форму не надо. Вставьте в событие Enter для поля команду Requery. Например, для поля Поле1 событие выглядит так:
Private Sub Поле1_Enter()
    Me.Поле1.Requery
End Sub
[Таблицы] Вопрос 19. Можно ли в Access написать рекурсивный SQL запрос?. Если да, то подскажите, пожалуйста, как это сделать на таком примере. Есть сборка в нее может входить еще несколько подсборок, в подсборку еще подсборки и т.д, кроме этого в каждую сборку (подсборку) входит некоторое количество деталей. Нужно составить список всех деталей, входящих в сборку, просуммировав при этом количество повторяющихся деталей.
Ответ.
   Рекурсивный запрос создать нельзя. Но в вашем случае надо создать рекурсивную функцию, в которой можно использовать SQL - запрос. Как использовать в функциях запросы на обновление смотрите пример N7 в файле la_table.mdb
[Формы] Вопрос 20. Как известно, в Access сохранение новой или редактируемой записи происходит автоматически при переходе на новую запись. А как программно сохранить запись?
Ответ.
   Если Вы собираетесь сохранить текущую запись в форме, то вставьте в код программы команду: me.refresh
[Программы] Вопрос 21. Программированием увлекся не так давно, но уже основательно, забывая про сон и ужин. Ну да Бог с ним. Вопрос вот в чем. Решил я сотворить программу для начисления зарплаты. В первое время, хотя бы для приобретения опыта. Так вот, данные по количеству отработанных часов, как и начисленная зарплата, исходя из почасовой ставки, у меня заносятся в разные поля таблицы. Часы, в соответствии месяцам в поля М1, М2, М3 и т.д., зарплата Z1, Z2, Z3 и т.д. Но тогда я вынужден был создавать 12 запросов, по одному для каждого месяца, и на их основе 12 форм, чтобы данные попали в поля нужного месяца. Суть, Вы конечно поняли. Так вот, чтобы их не создавать в таком количестве, я придумал сделать одну переменную, которую бы видел весь проект, и которая бы являлась номером рабочего месяца. Один раз установил рабочий месяц и форма предъявляла бы для редактирования поля нужного месяца. Так же и при расчете зарплаты, чтобы рассчитанная сумма для каждого работника, попадала в поле, в соответствии с номером месяца. Теоретически то я до этого дошел, а вот практически реализовать не смог. Может Вы что подскажете? Или я вообще не в том лесу ищу и есть более простое решение?
Ответ.
   Попробуйте изучить применение фильтра для формы (Me.Filter = "...", me.FilterOn=True). Вообще, задача расчета зарплаты даже для профессионалов очень сложная. Требуется хорошо знать не только программирование, но и методику расчета заработанной платы, а именно, виды начислений, удержаний, налогообложение и многое другое. Если серьезно будете разрабатывать программу Зарплата, то советую приобрести таблицы нашей программы "Заплата и Кадры" с уже отлаженными названиями, полями, связями и данными. Стоит информация 50 долларов, но зато 1-2 года сэкономите на разработке.
[Таблицы] Вопрос 22-24. Вопрос 1. Имеется ли возможность в списках(List) Access 2000 автоматического поиска записей по первой букве, как это было в Access 2 ??? Вопрос 2. Имеется ли возможность обращения из Access 2000 к присоединенным DBF таблицам, если они уже открыты другим приложением (в отличие от Access 2 почему-то не работает) ???
Вопрос 3. Имеется ли возможность изменения содержимого кода модуля Access 2000 (не
данных), если к этому модулю уже подключено один или несколько пользователей
(как это опять же без проблем было возможно в Access 2)???
Ответ.
   1. Да можно, смотрите пример 12 в файле la_form1.mdb 2. Нельзя. DBF файл создан для работы в однопользовательском режиме. 3. Вообще непонятно, зачем это нужно. Уточните вопрос. Если по логике Вашей программы необходимо использовать какую-нибудь функцию несколькими пользователями, то ее записывают в DLL библиотеку и вопрос тогда отпадает.
[Проблема] Вопрос 25. У меня вопрос по поводу Ваших "Лекций по Microsoft Access 2000". Я работаю в Access 97. Набрал в нем часть кода и запустил программу. У меня появляются ошибки: "Невозможно создание объекта компонентом ActiveX", "Индекс выходит за пределы допустимого диапазона" и опять "Невозможно создание объекта компонентом ActiveX". Возможно это связанно с более старой версией Access? Буду признателен за ответ.
Ответ.
   Проверьте настройку ссылок в программе. Вообще лекции рассчитаны на определенный уровень знаний, т.е. если Вы начинаете программировать, то лучше начать с чего-нибудь попроще. P.S. Непонятно, зачем Вы прислали часть моего кода. Если вы его изменяете, то доводите работу до конца. Иначе не следует заниматься программированием.
[Рассылка] Вопрос 26. Я подписался на Вашу рассылку. Успешно получил 14 выпуск, но вот 15 выпуск до меня не дошел. Я проверил состояние подписки на http://subscribe.ru там всё вроде правильно, Ваша рассылка числится, в том на что я подписан. Что Вы посоветуете проверить?
Ответ.
   Действительно - это бывает. Все подписчики разбиты на группы по 50 человек в каждой. Например, сейчас число групп более 80. Рассылка осуществляется в пакетном режиме, т.е. отправляется сразу всем в одной группе. Если адрес электронной почты долго не отвечает, то повторно письмо туда не посылается. Я не могу влиять на алгоритм рассылки, у меня даже нет адресов. Поэтому, если такое случится снова, лучше поменяйте адрес электронной почты.
[Таблицы] Вопрос 27. После подписки на рассылку и получения первого же письма, у меня появилась надежда получить ответы на несколько давно интересующих вопросов, но задавать их без предварительного прочтения лекций посчитал бестактным. Да вот только и я, и мои заказчики используют MS Access 97. Не могли ли Вы что-нибудь сделать или порекомендовать мне для того, чтобы лекции я все-таки увидел (кроме установки MS Access 2000).
Ответ.
   Вы можете прочитать лекции в виде Windows справки. Адрес загрузки: http://www.liac.nm.ru/zip/la2000help.zip
[Таблицы] Вопрос 28. Здравствуйте, Уважаемые господа! Очень интересный сайт!!!!!!!!!! Как получить модуль B002.mdb? Куда платить ?
Ответ.
   1. Откройте электронный счет в системе WebMoney Transfer. Для открытия его скачайте с сайта webmoney.ru бесплатную программу, которая будет управлять Вашими средствами. Какие виды переводов осуществляются через webmoney смотрите по ссылке: переводы. Примерный оборот данной системы в день равен 15 000 долларов.
   2. Далее создайте кошелек и пополните его с помощью безналичной или наличной форм оплаты. При зачислении средств Вам будет выдан договор, который заполняется автоматически. Вам останется только проверить свои данные и нажать кнопку "Согласен". После этого программа выдаст документ: "Платежное поручение" (для Юридических лиц), или "Квитанцию для сбербанка" (для Частных лиц), которую необходимо предъявить в банк. Деньги на Ваш счет поступят в течение 3х дней. Их Вы сможете использовать для оплаты любой программы.
   3. Для оплаты вашего заказа через систему WebMoney Transfer вам необходимо произвести 75 рублей на кошелек R950727048343. При переводе денег обязательно укажите код программы. Отправьте по email: LiderAccess@bigfoot.com сообщение о том, что Вы заплатили за программу c кодом = B002. Обязательно укажите Ваш адрес электронной почты, куда необходимо отправить mdb-файл. Перевод необходимо делать без протекции сделки. После того, как Вы произведете перевод, мы в течение ближайшего времени примем Ваш заказ к исполнению. Программа будет перечислена к Вам в виде zip - архива.
   4. Примечание. Модуль B002.mdb имеет 3 таблицы с заполненными данными, запрос, отчет и VBA- код. Защиты нет. Таким образом, Вы можете свободно использовать ее в своих проектах. P.S. Если Вам очень сложно понять как все это работает, то можно получить счет по факсу и оплатить его через банк.
Copyright © 31.10.2000 Виктор Конюков,  (Web: www.liac.nm.ru, Email: LiderAccess.bigfoot.com)


http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное