Рассылка статей | Выпуск 31. Русский Office XP
Leadersoft.ru

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

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

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

Выпуск 31. Русский Office XP

Русский Office XP
     Приблизительно в сентябре месяце выйдет русская версия Office XP. Сразу же возникает вопрос, а что нового нам приготовила компания Microsoft. Благодаря Сергею Алпатову и Кириллу Жучкову (Microsoft) у меня есть betta версия данной программы. За что им большое спасибо.
    Но прежде, чем приступать к изучению нового офиса, я посмотрел литературу по этой тематике. Удивительно, но одну книга уже появилась. Надо отметить, что скорость с которой она была выпущена вызывает уважение, хотя авторы и не стали себя сильно загружать описанием серьезных новинок данной программы. Например, я не нашел в описании методы создания и управление смарт-тегами, а поэтому и название книги не запомнил.
 
   Ниже перечислены некоторые новинки в программе Office XP.
    1. Теперь число запусков офиса ограничено. При первом запуске программы обязательно требуется регистрация через Интернет (возможна регистрация и по телефону, но в Betta версии этой функции нет). Сама регистрации очень простая, достаточно ввести только страну (остальные параметры не обязательны). Процесс происходит очень быстро в течение нескольких секунд. Вот данные из тестирования при которой требуется повторная регистрация офиса:
   - изменение операционной системы (изменялась ОС Win 98 на Win Me),
   - изменение конфигурации оборудования (изменялось название системной папки).

   2. Изменился интерфейс программы. Вид кнопок, списков, панелей и других объектов изменен. Появилась справа управляющая панель (для быстрого доступа к командам). На главную панель базы данных выведен список для поиска  (не надо нажимать F1). Но вся документация по программированию осталась на английском языке. Так что тем, кто еще не работал в Access 2000, придется привыкать к этому. Из-за того, что это betta версия, возможно поэтому нового к описанию по VBA добавлено немного.

    3. Формат файлов Access 2000 и Access 2002 изменился. Но это не так уж страшно. Access открывает без проблем файлы mde и mdb 2000 версии. У меня возникли некоторые проблемы при работе с библиотечными функциями. Напомню, что из Access можно быстро открыть (без запуска процесса) формы, отчеты из других файлов mdb и mde. Но эту проблему я думаю решить можно, если подойти к ней более детально.
   
    4. Конечно интересно знать, как сильно изменился заголовок базы данных Access 2000 по отношению к Access 2002. С помощью программы la_prot.mdb определено, что пароль базы остался на старом месте, т.е. смещение его равно 67 байтам (наверное, кто-нибудь свой день рождения (1967) запрограммировал - шутка). Таким образом, надеяться на защиту базы данных с помощью пароля не приходится. А также можно сделать вывод, что изменения в структуре файла не повлияли сильно на заголовок.

    5. Конвертировать базу данных можно сразу для 3 версий 97, 2000, 2002.

    6. Появилось новое понятие: смарт-теги. Что это такое? На первый взгляд - это обычная ссылка. Отличие лишь в том, что она подчеркивается не сплошной, а пунктирной линией. При наведении мышкой на ссылку, появляется неразвернутый список со значком i. При нажатии на него появляется список команд, которые Вы можете выполнить. Итак даю новое понятие. Smart Tag- это интеллектуальный список, который распознается приложениями Microsoft Word, Excel, Internet Explorer и т.п., и позволяет выполнить команды пользователя. Главное отличие от обычной ссылки - это возможность выполнения не одной, а нескольких команд. Вот несколько примеров смарт тегов, которые удалось посмотреть без каких-либо проблем:
  a) Word. При вводе любой даты в документ, например, 21.01.2001 автоматически Word распознает дату и определяет его, как смарт тэг (список). Теперь, Вы сможете выбрать из списка команду, например, "Назначить собрание для сотрудников". После выбора ее запускается приложение Outlook и выполняются необходимые действия.
  б) Интернет. После открытия web страницы в Internet Explorer можно вызвать смарт тэг с большим количеством ссылок на сайты в Интернете.
  Структура объекта. Чаще всего примеры по смарт тэгам состоят из библиотеки *.dll и строки реестра *.reg. Для регистрации библиотеки вы запускаете команду: regsrv32 x.dll, а для прописки в реестре дважды щелкаете на файл x.reg. После этого реестр выглядит примерно так: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Common\Smart Tag\Actions\x
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Common\Smart Tag\Recognizers\x
  Итоги. Можно сказать, что структура смарт тэгов напоминает чем-то ActiveX элементы. В принципе, имитировать его на экране можно и другими средствами, потребуется больше программного кода. Естественно возникают вопросы, как он работает с базой данных (пример есть, но не тестировался), можно ли разместить его на web странице (для Unix хостинга) и т.п.

    P.S. Стоит ли покупать новый офис, это должен решить каждый сам. Ваше решение будет зависеть не только от возможностей программы, но и от стоимости лицензии, от типа компьютеров, применяемых на предприятии, квалификации пользователей. Ведь сейчас примерно 60-70% еще используют Access 97, да и техника требует обновления.

Новости сайта
   10.08.2001. На сайте изменена конференция по программированию в Access. Теперь ответы на ваши вопросы размещаются не только на сайте, но и будут приходить на ваш почтовый адрес. 

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


    Большое спасибо Дмитрию Чернову за ответы подписчикам. В конце каждого вопроса дается ссылка на страницу в Интернете, по которой Вы сможете добавить свои комментарии по данной теме. При открытии конференции измененные темы появляются на первом плане.


Вопрос 231(09.02.2001) У меня возник такой вопрос. Вы как то упоминали что можно использовать полезные функции из *.dll Мне необходимо разобрать SQL выражение, т.е. вытащить из него все имена таблиц/запросов и их полей. Причем меня не устраивает системная таблица "MSysQueries" , т.к. в ней не разбираются например "UNION" конструкции. Я подозреваю, что где то в недрах системных dll - ей, есть то что мне нужно,
ведь разбирается как то Аccess с вручную написанными SQL-выражениями. Мне кажется, даже если вам и не приходилось сталкиваться с похожей проблемой, она вас заинтересует.
  Ответ. Конкретной информации по использованию dll функций по разбору SQL запросов у меня нет. Но, то что Вы собираетесь сделать - это небольшой микро-компилятор. Тема достаточно сложная и "скандальная". Лучше для этого освоить язык С++, т.к. придется часто работать с указателями на строки (*p++). Далее можно создать свою небольшую dll библиотеку, используя открытые коды из какого-нибудь компилятора. Например, начните работу с изучения книги Д. Хендрикс "Компилятор языка СИ для микроЭВМ". Перевод с английского А.А. Батнера под редакцией Б.А. Кузьмина (Москва, "Радио и связь", 1989, 238 стр.).
   Материал книги изложен довольно кратко и по существу. В книге рассматриваются вопросы создания компилятора С (точнее Смолл СИ). Даются исходные коды компилятора на С.
   • В ч.1 рассматриваются основные понятия трансляции программ. В ней представлен беглый обзор, затрагивающий центральный процессор, машинный язык, язык ассемблера и использование ассемблеров, загрузчиков и компоновщиков программ.
  • В ч.2 рассматривается сам язык Смолл-СИ. Описываются элементы языка, начиная с простых и кончая более сложными, например, goto, if, switch, while, for, return и т.п.
  • В ч.3 описывается собственно компилятор. Здесь рассматриваются принципы организации ввода, вывода, стандартные функции, вызов компилятора, генерация кода, даются соображения по увеличению эффективности программ и т.п.
Вопрос 300(27.03.2001) Что нужно сделать, чтобы в форму можно было заносить информацию из Интернета, т.е. чтобы она была динамическая и потом на основе введенных данных предоставлять отчет. И можно ли, вообще, сделать доступ к базе через Интернет с разными правами доступа?
   Ответ. Обычным способом разместить базу данных (mdb файл) в Интернете не получиться. Например, если у провайдера в качестве операционной системы используется Unix, то файлы Access распознаваться не будут. В этом случае,
  1. Вы можете создать форму с использованием объекта InternetExplorer, а на сайте разместить скрипт (*.cgi, *.pl), который будет управлять базой данных (например, файлом *.txt,*.dbf.) Используя такую связку, Вы сможете закачивать информацию в Вашу базу данных mdb.
  2. Можно присоединить папку в Интернете к Вашему компьютеру, но это будет слишком медленная связь.
  3. Можно найти NT-провайдера, тогда доступ к базе данных можно сделать, используя технологию ADO. Все запросы будут обрабатываться на сервере провайдера, и Вы также сможете управлять правами доступа. Но такая связь стоит дороже, чем Unix хостинг.
  4. Можно сделать так, что каждая запись базы данных будет сохраняться в виде htm файла и доступ к папкам и файлам на сайте будете определять Вы сами, используя скрипты.
  5. Можно написать программу, которая будет сбрасывать данные в текстовый файл и по ftp закачивать на сервер.
  P.S. Идей может быть очень много, важно найти из них правильную и грамотно ее реализовать.  
Вопрос 325(20.04.2001) Я использую Access 97 больше года. Я знаю SQL, создаю макросы, формы и т.д., но в Access 2000 у меня возникла по созданию формы следующего характера: после команды Save и задания имени формы, созданная форма реагировала на Exit окном Save as и впадала в цикл  (задание имени формы, форма не закрывается....). Я почти уверена, что у на данном компьютере просто установлен некачественный Office.
   Ответ. Офис здесь может быть и не причем, если ранее у Вас не было проблем с Access 2000. У вас возможно база данных близка к разрушению (потеряны связи некоторых объектов). Это происходит при частом редактировании и сохранении объектов базы. В этом случае, желательно все VBA-объекты "сбросить" в отдельные *.bas файлы, далее создать новую базу, а потом их восстановить в ней.   
Вопрос 326(20.04.2001) Возможно - ли каким-либо образом установить блокировку на удаление в таблице(типа триггера в SQL Server).
   Ответ. Триггер-это хранимая процедура, которая автоматически выполняется при вставке, обновлении или удалении записи таблицы (напоминает события формы). У таблицы Access нет событий, поэтому назначить Вам блокировку на таблицу не удастся. Но для расширенной работы с записями Вы можете создать форму, связать ее с таблицей, указать необходимые события и свойства, например, блокировку записей. После этого остается только открыть ее в табличном виде. Посмотрите пример 13 в файле la_form1.mdb, там описано как управлять подчиненной формой в виде таблицы.    
Вопрос 354(15.05.2001) Подскажите, пожалуйста, где в реестре можно посмотреть с какими графическими форматами дружит ACCESS-2000, JPEG, например?
   Ответ. Наберите в команде поиска реестра Global_GraphicsFilters_BMP или GraphicsFiltersFolder и Вы найдете в реестре настройки графики. Раздел реестра: HKEY_CLASSES_ROOT\Installer\Features\...
Файлы фильтров
{8ACBDD56-9340-11D2-900A-00805F9B1201}  bmpimp32.flt
{8ACBDD80-9340-11D2-900A-00805F9B1201}  cdrimp32.flt
{8ACBDDAA-9340-11D2-900A-00805F9B1201} cgmimp32.flt
{8ACBE03B-9340-11D2-900A-00805F9B1201}  emfimp32.flt
{8ACBE08F-9340-11D2-900A-00805F9B1201} epsimp32.flt
{8ACBE0B9-9340-11D2-900A-00805F9B1201} fpx32.flt
{8ACBE1AF-9340-11D2-900A-00805F9B1201} gifimp32.flt
{8ACBE1C4-9340-11D2-900A-00805F9B1201} jpegim32.flt
Вопрос 357(15.05.2001) Как грамотно освобождать память от переменной типа объектов Database & Recordset a) использование Nothing б) использование Close
   Дмитрий Чернов. Можно использовать следующий шаблон Sub ...
Dim db as Database
Dim rs as DAO.Recordset
 Set db = CurrentDB
Set rs = db.OpenRecordset(...)
...
rs.Close
set rs = Nothing
db.Close
set db = Nothing
end sub
 Единственное замечание: в теле процедуры старайтесь избегать применения оператора Exit sub. Например, if условие then exit sub Тогда завершающая часть процедуры не будет выполняться.
   Виктор Конюков . Если Вы определили переменную внутри программы как локальную, то при выходе из функции она "должна автоматически уничтожаться". Но лучше всегда принудительно закрывать переменную (особенно при работе с файлами), т.к. это может привести к непредсказуемым последствиям.
Вопрос 368(21.05.2001) Как инсталлировать access, чтобы он работал в сети? Какие DLL файлы должны находится на локальных компьютерах?
   Дмитрий Чернов. Так же как и для работы на локальном компьютере. Ничего дополнительного устанавливать не надо. Компьютер должен находиться в сети. Один из компьютеров в сети должен выполнять роль "сервера БД", т.е. на нем будут хранится файлы БД. С остальных компьютеров будет осуществляться доступ к данным. Естественно на всех компьютерах (с которых осуществляется доступ к данным) должен быть установлен Access и файл приложения связанный с БД.
Вопрос 369(21.05.2001) Как объединить данные из нескольких полей в одном поле?
   Дмитрий Чернов. Такое возможно только для неизменяемых полей, например в отчетах в свойстве поля Данные указываешь: [Поле1] & " " & [Поле2] & ... & [ПолеN]
   Виктор Конюков. Не забывайте в начале строки ставить знак равенства: =[Field1] & " "
Вопрос 378(25.05.2001)   Так ли уж тяжело преобразовывать задачи созданные в Access 2, в последующие версии этой СУБД. (задачи содержат множество макросов и вставок на VB)
    Дмитрий Чернов. Преобразование Acces2 -> Access97 не вызывало серьезных проблем. Хотя некоторая несовместимость есть. Некоторые вещи придется подправлять ручками. В основном это VBA модули.
Вопрос 383(07.06.2001)   Может быть вы подскажете, как в коде обратиться к количеству записей, полученных в результате запроса Access.
    Дмитрий Чернов. Надо написать следующее:
Dim rs as DAO.Recordset
set rs = CurrentDb.OpenRecordset("Запрос")
rs.MoveLast
rs.MoveFirst
iCount = rs.RecordCount
Вопрос 388(13.06.2001)   Пытался в отчете использовать в качестве источника поля подобную конструкцию: [Name]+chr(13)+[Surname]. В результате в отчете получается Фамилия, квадрат и имя и все в одну строчку. При переносе простым копированием в Word получаю все как надо: фамилию на одной строке, или на следующей в этой же ячейке. Почему Access этого не делает?
    Дмитрий Чернов. Насколько я понимаю, надо записать следующим образом: [Name] & chr$(13) & chr$(10) & [Surname]
   Виктор Конюков . При вводе данных в поле конструктора отчета может появиться сообщение, что функцию chr(13) нельзя применить. В этом случае надо ввести данные в поле в две строки. Для этого после первой кавычки нажмите Shift+Enter, а далее продолжите ввод. Выглядит это в конструкторе так:
=[Name] & "
" & [Surface]
Вопрос 389(13.06.2001)   Возможно ли в Access 2000 в одной базе два разных отчета печатать на разной бумаге (например альбом А4 и портрет А3)
    Дмитрий Чернов. Насколько я понимаю, должно быть возможно. Только это действительно должны быть два разных отчета. Правда при работе в 2000 я с этими задачами не сталкивался. Было раньше. Главное чтобы драйвер принтера поддерживал все нужные Вам форматы.
   Виктор Конюков . Да это возможно, формат отчета выбираете в конструкторе "Параметры страницы". И если драйвер принтера поддерживает листы А3 и А4, то Вы сможете сохранить отчеты для разных форматов. Смотрите также информацию в предыдущих выпусках подписки.
Вопрос 399(22.06.2001)    Подскажите, как при импорте всех таблиц из одного mdb в другой функцией TransferDatabase указать, что необходимо при импорте сохранять связи между таблицами (структуру данных)? Дело в том, что при разработке БД я часто провожу изменения в формах, запросах, не трогая структуры, а затем пересылаю исправленный mdb по почте. При этом хочу сделать кнопочку, по которой пользователи могли бы перенести данные из старой версии БД (данные в которой к этому времени пользователь изменил) в новую версию.
    Дмитрий Чернов. Для этого вовсе не надо делать никаких кнопочек. База разделяется на два файла. В одном собственно база данных, т.е. таблицы и связи между ними (схема данных), в другом весь интерфейс твоего приложения: формы, отчеты и модули. При изменения проводятся только в файле интерфейса и он передается пользователю. Данные на его компьютере сохраняются. Придется только обновить связи таблиц между файлами (что можно сделать вручную, а можно написать небольшую программу), при этом в большинстве случаев даже кнопочки нажимать не придется. Кстати, в дальнейшем, при переходе к многопользовательской работе с БД в данном случае не будет проблем.
   Виктор Конюков . При импорте таблиц в другую базу, таблицы передаются последовательно, поэтому связи между ними не учитываются. Следовательно Вам необходимо написать программу, которая будет копировать не только таблицы, но и связи между ними (необходимые функции для этого есть в Access). Но все же лучше использовать метод предложенный Дмитрием.
Вопрос 400(22.06.2001)   Проблема следующего плана когда проводится сортировка по возрастанию например то отсортированное не соответствует положению букв в алфавите( да и вообще может идти в перемешку). Причем вначале было все нормально, то же с поиском ввожу поиск например like "*нпп*" в SQL запросе, а находится почти все подряд
   Дмитрий Чернов. Как мне кажется проблема возникает при попытке сжимать/восстанавливать базу под версией Access, которая не поддерживает русский язык (у меня в Access97 после сжатия в RunTime версии). Решение следующее: создать новую базу данных и импортировать все таблицы, данные и связи между таблицами из старой.
Вопрос 419(03.08.2001)   Я пытаюсь делать базы на Access-97, хотя у меня и установлен Access-2000,  он 97 уже зарекомендовал себя с наилучшей стороны по стабильности работы и русскому хэлпу. В нашем городке, где мало достойной литературы, второе замечание очень важно. В Интернете я набрел на Ваш сайт, и почерпнул на нем очень много полезной в моей работе информации, приемов, решений. Но все решения созданы под 2000 и многие не работают по 97. Перед мной стоит следующая задача: в Access-97 из формы нажатием кнопки создать из шаблона документа Word документ , в котором заполнить таблицу необходимой информацией из формы абонента. В вашем примере "la_automat.mdb",  есть прекрасное решение данной  задачи, но только под 2000 Access, и я его не могу адаптировать его под 97, не хватает знаний.
    Ответ. Файл la_automat.mdb использует новые средства Access 2000 (клиенты автоматизации), так что в Access 97 такие решения работать не будут. Можно попытаться решить проблему другими средствами, но в этом случае код программы будет очень сложным.

Добавить комментарий

Loading