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

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


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

Выпуск 21. ADO и другие сокращения в Access

Поздравление.
    Поздравляю всех с Новым годом! Желаю успехов в бизнесе и учебе, прекрасного настроения, финансового благополучия, а также исполнения всех желаний в Новом тысячелетии и 2001 году!
    "Новый год - это Новый миг. Новый год - это Новый сдвиг. Новый год - это Новые знания, новые здания и новый полет. Это шефа - БАА..ЛЬШОЕ задание, это шаг к процветанию, к победе. Вперед".
Введение.
    В этом выпуске рассказывается о некоторых понятиях, связанных с программированием базы данных и даются ответы на вопросы по Access.

Новая программа.
   Вышла новая версия программы "Книги бухгалтерии" 3.0 (270 KB). Программа умеет:
∙ одновременно вести учет счетов-фактур для нескольких книг покупок в соответствии с новыми требованиями Правительства Российской федерации (смотрите Постановление Правительства Российской Федерации N 914 от 2 декабря 2000г);
∙ осуществлять быстрый поиск документов по названию, сумме и другим параметрам;
∙ печатать отчет "Книга покупок", используя разные настройки;
∙ автоматически разделять базу данных на 2 части, а именно, таблицы и загрузочную программу для сетевой работы с документами;
   Программа имеет справочную документацию, хотя интерфейс у нее достаточно простой. Таким образом проблем в ее освоении не будет. Благодаря тому, что она совершенно бесплатна, Вы можете сделать хороший подарок Вашей бухгалтерии.
Ссылки на новые программы:
   1. http://www.liac.nm.ru/shop/shopprice.htm (все ссылки на программы магазина)  
   2. http://www.liac.nm.ru/books.exe ("Книги бухгалтерии", 3.0)

Бесплатные коды для Access 2000
   I. Файл la_api.mdb. Добавлен пример. 1. Загрузка разных курсоров с использованием API-функций.
   II. Файл la_graphics.mdb. Добавлены примеры 1. Загрузка рисунков из каталога. 2. Рисование сложных объектов.
   III. Файл la_form1.mdb. Изменен пример 12 для получения максимального номера документа.
Ссылки на mdb программы:
   1. http://www.liac.nm.ru/subscribe/examples.htm (ссылка на все бесплатные mdb-коды)  
   2. http://www.liac.nm.ru/subscribe/zip/la_api.zip (архив la_api.mdb)
   3. http://www.liac.nm.ru/subscribe/zip/la_graphics.zip (архив la_graphics.mdb)
   4. http://www.liac.nm.ru/subscribe/zip/la_form1.zip (архив la_form1.mdb)

Access 2000. Урок 3. АDО и другие сокращения в Access
    Прежде, чем приступать к написанию простых программ на VBA попробуем разобраться с некоторыми новыми и старыми понятиями, которые введены в Microsoft Access. Вы будете часто встречаться с ними в справке, описании программ, а также при общении между программистами в конференциях, чатах и т.п.
    Вот небольшой список этих названий: RDO, DAO, ADO, ADOX, JRO,  UDA, COM, COM+, MSDE, OLE DB provider, MOD, XML,  RVBA. Если вам вдруг показалось, что здесь написан какой-то "бред" из разных слов, то не отчаивайтесь. Важно не теряться и вовремя их применять. Например, если кто-то усомнится в ваших способностях, смело называйте все подряд из этого списка, и ваш авторитет, станет выше. А если еще и покажете несколько примерчиков на их использование, то никто и спорить с вами не станет. Ну а если серьезно, то Microsoft не очень-то заботится о названиях новых технологий и механизмов.  Отследить по документации, что будет, например, с ADO через пару лет просто невозможно. Лучший совет - применяйте те методы, которые Вам хорошо известны и приводят к успеху, т.е. к надежному и качественному проекту. Например, если Ваша программа отлично работает, используя метод DAO, то нет смысла переводить ее в ADO. Время потеряете и нового ничего не создадите. Тем более, что в файле mdb Access 2000 остались нерешенные проблемы. Например, программисты Microsoft не успели переписать код для форм, поэтому там до сих пор используется метод DAO.
   Ну а теперь попробуем понять все вместе, что же там написано:
   В первых версиях Access использовалась технология RDO[1] для доступа к ядру базы данных Jet, далее стали применять DAO[2], как новый интерфейс с ее ядром, потом - ADO[3]. В последствии ADO стал называться новой стратегией Microsoft, а именно, UDA[5]. В свою очередь UDA базируется на низкоуровневом интерфейсе OLE DB[8]. Он представляет собой расширение модели COM[6], которая также развивается и предположительно в новой версии VBA будет называться COM+. ADOX[4] применяют там, где нельзя применить ADO, т.е. когда нужен доступ к структуре объектов Access, а не к их данным. JRO[8] применяют при репликации, т.е. синхронизации одинаковых копий базы данных. Работая с страницами доступа к данным применяют DOM[10], а также XML[11]. Подключаясь к серверу вместо OLE DB Provider[8], используют MSDE[7]. Чтобы все библиотеки связать в единый проект желательно иметь пакет разработчика MOD[12].
   Если и сейчас Вам не понятно, о чем идет речь, то посмотрите фильм "Корона Российской империи", а именно, ту часть, где директор музея рассказывает посетителям о Ветхом Завете. Исаак родил Якова, Яков родил Абраама, Абраам родил еще кого-то. Если все, что он говорил запомните, то и в других названиях Access разберетесь.
   Еще, что Вы должны знать об именах - это соглашение RVBA[13]. Есть такой известный профи в Access - Грег Реддик. В начале 90x он разработал ряд названий переменных и функций, используя Венгерскую нотацию[14]. Желательно поддерживаться его принципов имен. Например, dec - Decimal, dbl - Double, int - Integer, lng - Long и т.п. По его методике счетчик для цикла For должен выглядить так: intCount, хотя я предпочитаю использовать i. Конечно, на первый взгляд это, может показаться излишним, т.к. требуется больше времени на написание кода. Но, с другой стороны, если кто-то будет использовать ваш код для себя, то он уже меньше времени потратит на его изучение. И если Ваш труд не получит признание других пользователей Access, то уж спасибо у него Вы точно заработаете. В заключение хочу сказать, что соглашение Реддика об именах - это не догма, а лишь пожелание. Вы можете познакомиться с другими именами на Web-узле http://www/xoc/net.
Словарь
   ∙ [1] RDO (Remote Data Objects) - объекты удаленных данных в Access 2.0
   ∙ [2] DAO (Data Access Object) - объект доступа к данным для Access 97
   ∙ [3] ADO (ActiveX Data Object) - новый взгляд на те же объекты доступа к данным
   ∙ [4] ADOX (ActiveX Data Object Extensions for DDL and Security) - расширения ADO
   ∙ [5] UDA (Universal Data Access) - стратегия универсального доступа к данным
   ∙ [6] COM (Component Object Model) - модель единого объекта
   ∙ [7] MSDE (Microsoft Data Engine) - аналог ядра SQL сервера, только попроще.
   ∙ [8] OLE DB Provider  - средство доступа к данным
   ∙ [9] JRO (Jet Replication Object) - объект репликации ядра Jet
   ∙ [10] DOM (Document Object Model) - модель документного объекта
   ∙ [11] XML (eXtensible Markup Language) - язык для работы с страницами доступа к данным
   ∙ [12] MOD (Microsoft Office Developer) - продукт для профессионального разработчика офисных приложений.
   ∙ [13] RVBA (Reddick VBA) - соглашения о наименованиях Реддика для VBA. Реддик - президент консалтинговой компании Gregory Reddick & Associates
   ∙ [14] Венгерская нотация - удобное и понятное обозначение имен в программах. Ее изобретатель - венгр Чарльз Симони.

Ответы на вопросы
     Вопросы Вы можете задавать по email: LiderAccess@bigfoot.com или опубликовать на сайте в разделе "Доска объявлений". Все вопросы можно прочитать по адресу: http://www.liac.nm.ru/subscribe/questions.htm
Вопрос 130(15.12.2000) В таблице имеются поля Дата и Примечание. Необходимо в запросе иметь строки, где дата идет из соответствующей строки таблицы, а рядом - примечание из предыдущей строки этой же таблицы, причем в последней строке и дата и примечание идут из одной последней записи.
  Для решения этой задачи используйте дополнительный запрос, т.е. поле в основном запросе сформируйте с использованием SQL, например, для a: select a from table1 where c=" & n.
Вопрос 131(15.12.2000) В форме имеются поля Тип оплаты и Номер квитанции (оба текстовые). Мне необходимо, чтобы если был выбран тип оплаты "квитанция", в поле номер квит. появлялся предыдущий номер квит. + 1, причем впереди номера всегда идет несколько нулей, например: 001234. Я задала следующую формулу: Format(Str(Val(DLast("Table","NumberKvit"))+1),"000000"), но нули впереди не появляются.
  У вас очень сложный алгоритм конвертации. Для перевода в строку существует функция CStr, для целых чисел: CLng. Попробуйте вариант: Format(CLng(DLast("Table","NumberKvit"))+1,"000000")
Вопрос 132(15.12.2000) С течением обстоятельств занимаюсь формированием базы данных в Access.(имею хобби - собираю информацию по истории пчеловодства и большая библиография) И база то всего "Библиографический каталог". Вопросов много, т к VBA мне не по зубам (скоро на пенсию), а помощи ждать не откуда - провинция. Но пока о запросах ведут себя уж очень странно. Начал создавать базу в Off97, потом перешел в
2000. Если формирую условие отбора для поиска по фамилии на одну букву "К*" со звездочкой, то результат нулевой, хотя поиск в форме дает положительный ответ. Далее еще интереснее. На другие буквы алфавита вроде лучше, но странности появляются в другом: если условие отбора состоит из трех букв - результат положительный, а если из четырех - то ничего не находит. В базе данные есть информация для этого условия. В параметрическом запросе тоже самое. пока не поставишь звездочку перед буквой, до тех пор нечего не находит, но звездочка дает много лишнего, а без нее не работает. Может я недостаточно ясно изложил - извини, пожалуйста.
У меня ПК 166, 64, Win98se? Off 2000 sr1. Если можно еще. Появилось желание создать свою страничку и выставить на ней этот каталог (эту базу), но как сделать, чтобы работали запросы и поиск в формах в html?
   (Ответ) 1. Есть хороший пример "Контекстного поиска" N03 файла la_form.mdb. Там для отбора записей применяется оператор Like, у меня все работает без проблем.  
   2. Для того, чтобы работали запросы и поиск в web страницах, то Вам надо изучить один из специальных языков программирования (например, java) или найти скрипт (программу) и добавить ее в свою страницу. У вас могут возникнуть проблемы с провайдером, т.к. все что связано с динамическими страницами должно быть оплачено.
Вопрос 133(15.12.2000) Я работаю в Access 97, но думаю, что и тут мой вопрос будет уместен. Я создал базу данных, в которой хранятся как текстовые, числовые данные так и графические изображения. Графика вводится в базу в поле OLE. Вся графическая информация создается в редакторе CorelXara 2.0 (до недавнего времени это был CorelXara1.5). После создания записи в таблицу и внесения в нее графического изображения распечатка чертежа на принтере из редактора CorelXara представляет собой качественную картинку. Проблема же заключается в том, что мне нужен отчет, где должен быть изображен соответствующий конкретной записи чертеж и на этот чертеж сверху нужно наложить текстовую информацию из других полей записи. Выход нашел в следующем: в отчете создал одно большое (на весь печатный лист) поле объекта OLE, где изображается соответствующая картинка, а уже сверху на это поле наложил другие поля, отображающие текст и числовые данные. При выводе отчета на экран получаю четкое изображение печатного листа с чертежом, текстом и числами. При выводе же этого отчета на печать происходит частичная потеря качества графического изображения. По моему мнению, Access выводит картинку, созданную в редакторе CorelXara в виде графического файла BMP. За счет этого и происходит потеря качества изображения. То есть, там, где должны быть более утонченные линии или более мелкая графическая запись текста, там при печати на принтер точки выкладываются через раз (как в шахматном порядке) и понижают качество изображения до невозможности прочитать графическую информацию. Возможно ли что-нибудь сделать для улучшения качества подачи графики на принтер именно через отчет? Заранее спасибо за ответ. Если необходимо, то могу прислать эту базу с таблицей и отчетом.
   (Oтвет) Насчет графики я бы сказал так: родным форматом для Access является  bmp. Все другие имеют некоторые проблемы. Я, например, заметил, что в формах в некоторых случаях неправильно отображается gif формат (изображение двоится). Поэтому, графические файлы лучше хранить во внешнем файле bmp формате. Если Вам нужно больше 256 цветов, то используйте jpg. Но тогда для вывода на печать лучше использовать Word. Для этого создается специальный шаблон в Word, далее Access и Word используются как сервер и клиент автоматизации (пример 2 la_automat.mdb). Задача не очень простая и требует нескольких дней на решение для профессионала.
Вопрос 134(15.12.2000) Можно ли сделать так, чтобы при завершении работы Access автоматически сжимал БД и желательно без перезапуска ?
  (Oтвет) 1. Сжатие открытой базы данных без перезапуска невозможно. Почему нельзя, посмотрите на структуру dbase файла до сжатия и после.
  2. Возможен вариант сжатия базы данных аналогично программе "Лекции по Access", там есть пример на эту тему.
Вопрос 135(15.12.2000) При попытке работы с "Лекции по Microsoft Access" (в виде Windows справки) возникла ошибка (см.приложение) Работаю с оригинальным немецким Win98/NT и офисом. Можно ли решить мою проблему иным путем, чем установка русского виндовса и офиса?
   (Введение). Вопрос я думаю будут интересен для многих, особенно для тех, кто собирается работать за границей. Известно, что система кодировки в Access 2000 улучшилась. Используя Юникод, можно загрузить практически любой алфавит, даже если у Вас установлена только локальная версия офиса.
   (Ответ). В данном случае получается, что в справке Windows изменилась часть текста, хотя русские шрифты в Windows установлены. Почему это произошло, сразу ответить сложно. Для этого нужно проводить эксперименты.
   P.S. Для профи. Если у Вас есть любые мысли и предложения на эту тему пишите по email.
Вопрос 137(20.12.2000) Подскажите, пожалуйста, как в форме в одном из полей перед вводом новой цифры в поле значилась наибольшее число из ранее введенных или появлялось отдельным окном. Поле текстовое или цифровое, режим данных добавление. Это требуется чтобы пользователь ориентировался в вводимых числах и был в курсе наибольшего из них.
   (Ответ) Это проблема всегда возникает при вводе нового документа, например, накладной, платежки и т.п. Чтобы ее решить надо при обработке события "Текущая запись", при проверке новой записи, сделать запрос на получение максимального числа из таблицы и присвоить его номеру. Смотрите пример 12 в файле la_form1.mdb, я добавил код для такого случая. Нюанс заключается в том, что максимальное значение надо присваивать не числу, а его свойству DefaultValue. Иначе каждый раз, даже при случайном вызове новой записи, будет происходить добавление данных, что может быть и ненужно пользователю.
Private Sub Form_Current()
   If Me.NewRecord = True Then
       Me.Nдок.DefaultValue = 1 + funGetMaxNumber("SELECT Max([Nдок]) as NN FROM [Пример]")
   End If
End Sub
Вопрос 141(21.12.2000) Расскажите, пожалуйста, про поля со списком. Как нужно корректно создавать и формировать поля со списками?
   (Ответ) Примеры работы с полем-списком есть в архиве программ. Дополнительно как создавать их и управлять программным путем приведу позже.
Вопрос 142(21.12.2000) У меня такой вопрос! Есть поле таблицы с ценами. Это поле связано с   формой. Как сделать так, что при вводе в поле формы "Цена" не конкретного числа, а области чисел через дефис, программа бы искала подходящие записи в таблице, значение которых лежало бы в области данных введенных пользователем.
   (Ответ) Вариантов может быть много.
1. Прочитайте справку по оператору. Например, Like "12??" вернет вам числа от 1200 до 1299.
2. Используйте запрос SQL "select * table from where n>=1200 and n<1300"
Вопрос 144(27.12.2000) Делаю программу для заполнения платежных документов. Ситуация такая. В форме из поля со списком выбирается ИНН получателя, а затем автоматически из справочника получателей заполняются все остальные поля для получателя (все работает). Но возникла такая ситуация, ИНН один, а отделений банка, счетов банка и расчетных счетов к нему много. Я думаю сделать так: выбираем ИНН из списка, а потом счет из списка, а остальные поля заполняются автоматически. Но как это сделать? Не подскажите где можно посмотреть аналогичный пример.
   (Ответ) Вы на правильном пути. Это лучшее решение для платежного поручения, когда информация берется по ИНН. Для решения же Вашей проблемы надо ввести еще код, например, ИНН2. Тогда ключ для таблицы будет состоять из двух полей ИНН и ИНН2. Список ИНН2 должен заполнятся автоматически при входе в поле в зависимости от ИНН. Примеры на эту тему есть в файлах для форм.
Вопрос 145(27.12.2000) Не подскажете, откуда вы в Курс2000 динамически берете курс валюты.  Через cgi скрипт наверное , только как?
   (Ответ) Пока в Интернете я не встречал "красивых" решений на эту тему, поэтому код программы не распространяется бесплатно.
Вопрос 146(27.12.2000) Сделал сайт на основе страниц доступа к данным и базы (softbase.mdb), расположенной в том же каталоге, что и страницы. При отладке на локальном компьютере страницы без проблем находили файл базы по ссылке: Data Source=softbase.mdb.После переноса на сервер в INET страницы перестали находить источник данных (softbase.mdb), хотя он по-прежнему находился в одном подкаталоге с ними. Все попытки указать путь к источнику другими способами не увенчались успехом. Общался с четырьмя серверами по этому поводу. Два ответили, что не поддерживают эту технологию, а страницы, кстати ,выглядят и функционируют нормально, только источника не видят.
Поэтому вопрос: "Могут ли страницы доступа к данным Access2000 работать с базой, помещенной на тот же сайт, что и они, и если да, то что для этого нужно"?
   (Ответ) Страницы доступа к данным будут отображаться на любом сервере провайдера, но вот чтобы они смогли читать базу данных Access требуется установка специального программного обеспечения. Я встречал провайдеров, которые обеспечивают доступ к mdb файлам. В основном это зарубежные сайты. Попробуйте поискать hosting и Access, где-нибудь на yahoo.com. Вообще, все это будет так медленно работать, что может лучше поискать другую базу данных, например, mysql.
Вопрос 147(27.12.2000) Есть форма (карточка оборудования), как создать в этой форме отдельное поле для поиска , после ввода или во время ввода данных в которое (инв.№ или наименования) осуществлялся поиск и подстановка данных в форму
Если можно код.
   (Ответ) Смотрите пример 3 "Контекстный поиск" (la_form.mdb) или 15 в файле la_form1.mdb
Вопрос 148(28.12.2000) Я только начинаю работать в Access и у меня возникла следующая проблема: есть служебная таблица где хранится Модель прибора, тип установки и т. д.. В рабочей таблице, с которой работают конечные пользователи, есть те же поля плюс другие. Вопрос, можно ли сделать так что бы пользователь ввел только Модель а все
другие поля автоматически заполнились из служебной таблицы. Если кто сделает
небольшой примерчик буду вдвойне, нет втройне благодарен.
   (Ответ) Пользователи скажут вам пятикратное спасибо, если Вы внимательно посмотрите на пример номер 15 в файле la_from1.mdb и сможете грамотно переименовать поля и таблицы в этом примере.
Вопрос 149(29.12.2000) У меня возникла такая проблема, вдруг перестали работать в форме все кнопки, даже те которые я делала с помощью конструктора.
   (Ответ) Если mdb-файл у Вас еще открывается, то это значит, что Ваши кнопки не получают сообщения от Windows. Сожмите базу, проверьте событие Нажатие кнопки=[Процедура обработки событий], в коде VBA должна быть программа Click_кнопка. Если есть циклы, то вставьте в них команду DoEvents.
Помощь.   В гостевой книге есть  2 интересных предложения, связанных с работой и изучением Access. Так, что если Вы готовы оказать реальную помощь, то пишите по указанным ниже электронным адресам.
   [1]. Имя: Anton , E-Mail: mantan@mail.ru, Город: С-Петербург .
Комментарии: Господа, нужна помощь в создании программки для расчета не совсем правильной заработной платы :-) Возможна доработка некоторой уже готовой, но там должно быть несколько специальных функций, а многого из программы предложенной на сайте не нужно. Очень желательно, чтобы человек, который за это возьмется жил в Питере. Все оплачивается, деньги правда небольшие, но и работа не сложная.
- Wednesday, December 20, 2000 at 16:00:27 (MSK)
   [4]. Имя: Давыдов Константин, E-Mail: nxr@gol.ru, Город: Москва.
Комментарии: Всем, всем добрый день! Учение по книгам - дело хорошее, но когда начинаешь с нуля, приходится затратить много времени, а время это деньги. Если есть желающие помочь, не бесплатно, пишите. Благодарность не будет иметь границ в пределах разумного. Я имел ввиду частное обучение.
- Thursday, November 02, 2000 at 12:19:08 (MSK)
Вакансии. На сайте открыт новый раздел Работа. Используйте этот раздел для изучения спроса на программистов по Access. Ссылка настроена на сайт www.job.ru. Вам достаточно нажать только кнопку "Поиск", и отобразятся вакансии по этой тематике. Их может быть достаточно много, в день может появиться новых 5-10 штук. Среди них есть очень интересные как для работы в России, так и за рубежом. Даже если Вы сразу не найдете работу, то хотя бы будете знать какие требования предъявляют организации к специалистам по базам данных. Ниже приводится несколько вакансий этого сайта.
26.12.00 15:53 | Требуется Программист в крупную российскую торгово-производственную компанию
Образование - высшее.
Опыт работы - до 2-х лет.
Город: Москва
На постоянную работу. Полный рабочий день.
Зарплата от 600 $/месяц
Контактное лицо: Елена
Телефон: тел/факс 291-92-71, 202-26-55
E-Mail: elena_mdc@mtu-net.ru
Дополнительные сведения:
Крупная российская торгово-производственная компания приглашает на постоянную работу программиста с опытом работы не менее 1 года. Задачи: поддержка MSAccess систем, существующей системы Concorde, программирование отчетов, обучение пользователей. Требования: в/о, отличное знание MSAccess , опыт программирования бухгалтерских или логистических процессов, знакомство с SQL сервером, знакомство с бизнес ПО (Concorde, SunSystems, Platinum, Scala, BAAN, SAP и т.п.), высокая степень самоорганизации и самообучаемости, готовность к напряженной работе в команде професионалов. Резюме по факсу: 291-92-71, 202-26-55 или по e-mail: elena_mdc@mtu-net.ru

26.12.00 13:56 | Требуется Системный администратор в компанию.
мужчина, 22 - 30 лет. Образование - высшее.
Опыт работы - до 2-х лет.
Город: Москва
На постоянную работу. Полный рабочий день.
Зарплата от 500 $/месяц
Контактное лицо: Менеджер по персоналу
Телефон: Факс 923-0882
E-Mail: hr_diana@rambler.ru
Дополнительные сведения:
Опыт администрирования 1С: -Бухгалтерия 6.0 от 1 года. Экспорт данных между 1С и Access . Администрирования сети (1сервер, 20 компьютеров, Интернет). Знание железа. Высшее техническое образование.

26.12.00 13:50 | Требуется VISUAL BASIC 6.0 WITH MS ACCESS 97/CRYSTAL REPORTS SPECIALIST
23 - 35 лет. Образование - высшее.
Опыт работы - свыше 2-х лет.
Город: Санкт-Петербург
На постоянную работу. Полный рабочий день.
Зарплата от 4000 $/месяц
Контактное лицо: Оксана Дадерко
Телефон: (812) 279-64-68
E-Mail: it-staff@totem.ru
Дополнительные сведения:
МЕСТО РАБОТЫ: США СРОКИ РАБОТЫ: от 6 месяцев до 3 лет ОПЫТ РАБОТЫ: Не менее 2х лет в профессиональном направлении Visual Basic 6.0 with MS Access 97/Crystal Reports ТЕХНИЧЕСКИЕ НАВЫКИ: Java/ASP/COM/DCOM/HTML/MTS/Visual Interdev, Multiple Database Oracle 7.x/8.x, SQL Server 6.5/7.0 ВЛАДЕНИЕ ИНОСТРАННЫМ ЯЗЫКОМ Приличный уровень владения английским языком

Copyright © 29.12.2000 Виктор Конюков,  (Web: www.liac.nm.ru, Email: LiderAccess.bigfoot.com)


http://subscribe.ru/
E-mail: ask@subscribe.ru
Поиск

В избранное