(возврат на основную страницу)

Содержание номера за Август 2001 года

Рождение и становление языка

Дон Кили (Don Kiely)

Visual Basic возник как средство создания пользовательских интерфейсов, но достаточно быстро эволюционировал.

VB 1.0 дебютировал в мире Windows в мае 1991 г. Сейчас он стал самым распространенным средством разработки, а число дипломированных программистов на VB увеличилось (по разным источникам) с 1,5 до 6 миллионов.

Эта статья посвящена 10 годовщине VB, она представляет краткую историю языка, анализирует его генезис и оценивает итоги развития. В статье охвачена вся история Visual Basic вплоть до текущего момента, а подробную информацию о будущем VB можно найти на врезке «Будущее Visual Basic» (Билл Гейтс) в конце статьи (см. Web-узел www. newsletter.narod.ru).

VB сегодня — это результат упорного труда, пристального и практического интереса самого Билла Гейтса, хорошего маркетингового плана и большого везения. Становлению VB серьезно помогли как его пользователи и компании, дополнявшие его различными утилитами, так и конкурирующие продукты, например Delphi фирмы Borland. Сообщество VB подняло Visual Basic до таких высот, о которых его создатели (включая официального «отца» VB Алана Купера (Alan Cooper), независимого разработчика ПО, полагавшего, что он создает средство разработки пользовательских интерфейсов для Windows, а не язык программирования) даже не мечтали. Купер перешел на программирование для Windows примерно в 1986 г. Хотя сама Windows и восхищала его, оболочку — предшественницу сегодняшнего Проводника (Explorer) — он считал бесполезной.

У Купера было несколько идей по совершенствованию оболочки, но он никак не мог объединить их, пока не поговорил с IT-менеджером крупного банка, развертывавшим Windows на настольных компьютерах для неопытных пользователей. Им не требовалось управлять файлами, запускать разные приложения или просматривать структуру каталогов. Менеджер хотел скрыть от пользователей сложность и мощь Windows, предоставив им только необходимые для работы средства. (Окончание статьи см. ниже)

Кэширование запросов SQL Server с помощью XML

Бенни Йохансен, Ян Наркевич (Benny Johansen, Jan Narkiewicz)

На Web-узлах с постоянными, но редкими обновлениями БД для устранения узких мест производительности можно оптимизировать доступ к данным, кэшируя запросы на уровне файловой системы в XML-файле.
Вместо постоянных запросов к БД пользователь будет выполнять запросы к XML-файлу.
Здесь рассказывается о создании
автоматически обновляемого XML-кэша.

Недавно нашу консалтинговую компанию пригласили проверить производительность Web-узла на основе ASP, VBScript 5.5, ADO, Windows 2000 Advanced Server и SQL Server 2000. Мы предприняли ряд мер по уменьшению времени ожидания ответа пользователем и увеличению числа параллельно подключенных клиентов. В статье рассматриваются лежащие в основе этих усовершенствований технологии, включая:

SAX и Microsoft XML Parser 3.0

Эссам Ахмед (Essam Ahmed)

COM-объект ado2xml позволяет обращаться к БД и получать результаты в формате XML. Он может помещать свой вывод в строку
или в объект Response языка ASP. При использовании в коде ASP-страницы ado2xml по умолчанию возвращает результаты клиенту через ASP-объект Response. Для вывода результатов в строку можно запретить ado2xml использовать этот объект.

Язык XML — стандарт де-факто не только при межсистемной работе с данными, но и при их локальной обработке. При совместном использовании XML и объектной модели документа (document object model, DOM) информация отделяется от своего представления — это помогает расширить функциональность приложений и компонентов.

При использовании функциональности XML DOM возникает определенная рабочая нагрузка, один из компонентов которой — потребление большого объема ОЗУ. Для работы с XML DOM весь XML-документ необходимо загрузить в память. Это может стать серьезной проблемой при работе с большими XML-документами, поскольку DOM представляет каждый элемент в виде объекта с множеством атрибутов. Если Вам нужно всего лишь сделать данные доступными в формате XML, использование XML DOM, вероятно, не будет эффективно.

Здесь обсуждается COM-объект ado2xml, позволяющий разработчику обращаться к БД и получать результаты в формате XML. Он может помещать свой вывод непосредственно в строку (ее можно загрузить в объект XML DOM с помощью соответствующего метода Load) или в объект Response языка ASP. При использовании в коде ASP-страницы ado2xml по умолчанию возвращает результаты непосредственно клиенту через ASP-объект Response. Для вывода результатов в строку можно запретить ado2xml использовать этот объект. (Окончание статьи см. ниже)


Окончание статьи "Рождение и становление языка"

Выход в свет

VB 1.0 появился на рынке в 1991 г. и быстро распространился в деловом мире, несмотря на репутацию игрушки-хобби и нехватку в нем утилит масштаба предприятия. Роб Коупленд (сейчас — менеджер Microsoft по Visual Basic) считает, что успех VB был обусловлен простотой программирования и легкостью создания приложений-прототипов.

Баттон поясняет, что команда VB не располагала большим бюджетом для раскрутки продукта и поэтому для продвижения VB на рынок избрала «партизанский» подход. Вместо размещения рекламы в специализированных журналах маркетинговая команда VB сконцентрировалась преимущественно на двух задачах: «интенсивной демонстрации VB» и создании сообщества VB-разработчиков.

Баттон вспоминает, что на демонстрации специалист преимущественно сидел и показывал, как работать с продуктом. С точки зрения простоты программирования для Windows, VB стал революционным средством, и разработчики быстро разобрались, что он собой представляет и для чего его можно использовать. У предложенной маркетологами программы создания сообщества было несколько важных аспектов, включая регулирование доступа к рынку, обеспечиваемое каждой проданной копией программы. Два из них, пожалуй, представляют наибольший интерес.

Во-первых, команда маркетинга потратила большую часть средств на привлечение сторонних поставщиков для создания элементов управления, встраиваемых в VB, которые были призваны увеличить производительность и гибкость ПО и сделать его еще более простым в использовании. Команда маркетинга нашла производителей, поставляющих динамически (DLL) или статично подключаемые библиотеки для DOS, и попыталась убедить их преобразовать свои библиотеки в пользовательские элементы управления.

Во-вторых, команда маркетинга работала с Джимом Фоусеттом (президент и основатель Fawcette Technical Publications) для выпуска независимого VB-центричного журнала (BASICPro) и создания серии конференций (VBITS). Журнал и конференции сыграли значительную роль в формировании сообщества VB, но не только потому, что предоставили появившимся поставщикам элементов управления для VB возможность рекламировать свои продукты и лично контактировать с покупателями.

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

Сотрудник Microsoft Крис Диас говорит, что сторонние разработчики продолжают «разбирать» VB в поисках новых методов создания приложений, внося в него такие возможности, которые Microsoft часто колебалась включить в его очередную версию.

Поставщики элементов управления способствуют развитию Visual Basic

Этан Винер, основатель компании Crescent Software, считает, что успех VB по большей части обусловлен всевозможными сторонними утилитами, появлявшимся от одной версии языка к другой, включая VBX, OCX и расширения интегрированной среды разработки (IDE). Дэн Эплмен, основатель и президент компании Desaware, написал свои первые VBX-элементы управления через несколько дней после приобретения VB 1.0. Он продавал свою первую разработку, Custom Control Factory, за $48 — как и сейчас. Низкая цена на этот и другие продукты означала, что разработчикам было проще приобрести готовую реализацию необходимой функциональности, чем создавать ее самим, — предполагая, что у них было время на такие изыскания. Эплмен черпал вдохновение для создания новых элементов управления в процессе программирования на VB. При любом столкновении с одним из ограничений VB он находил обходной путь, доводил решение до уровня коммерческого продукта и затем включал его в каталог Desaware.

Microsoft давно осознала роль независимых разработчиков в успехе VB и предоставила им значительную маркетинговую поддержку. Однако наряду с этим Microsoft в течение многих лет подвергалась критике и насмешкам за то, что заимствовала из ПО третьих фирм оригинальные идеи и реализовывала их в VB. Подтверждением тому может служить продукт VBAssist компании Sheridan. Джо Модика, разработчик компании Sheridan, взломав IDE, встроил VBAssist непосредственно в панель инструментов VB. Позднее Microsoft открыла программистам API-интерфейсы интегрированной среды разработки, позволив создавать собственные встраиваемые в IDE компоненты. Конечно, это заслуживает некоторой критики, но не все видят здесь только плохое. Винер утверждает, что это даже хорошо, поскольку заставляет независимых разработчиков придумывать новые идеи.

VB немедленно стал хитом среди разработчиков, потому что на порядок упростил создание Windows-приложений. Для написания программы разработчикам не требовалось концентрироваться или вообще знать тайны API Windows — вместо этого они могли уделить все свое внимание разработке бизнес-решения.

Несмотря на всю важность возможности расширения VB, еще более важным событием стал выпуск Professional Toolkit для VB 1.0 (кодовое название Rawhide). Производители могли разрабатывать собственные элементы управления, но вот рассказать о них пользователям было гораздо труднее. Хотя независимые поставщики и демонстрировали свои программные продукты в журнале «BASICPro» и на конференциях VBITS, именно Professional Toolkit впервые позволил разработчикам ознакомиться с рекламируемыми элементами управления. Он объединил множество созданных сторонними фирмами элементов управления в один пакет. В Professional Toolkit давалась информация об авторе элемента управления, а разработчикам предлагалось обращаться к производителям за полнофункциональными версиями представленных элементов управления. Как внешние, так и внутренние источники Microsoft указывают, что именно выпуск Professional Toolkit стал событием, которое помогло независимому рынку элементов управления (и даже самому VB) достигнуть критической массы.

Тотальное мировое господство

Возможно, Professional Toolkit и принес VB подлинный успех, но именно 3 версия Visual Basic сделала этот язык программирования феноменом. Программисты могли создавать приложения для работы с базами данных и до появления VB 3.0, но только с помощью ПО сторонних фирм. В VB 3.0 была реализована встроенная поддержка доступа к данным на основе элементов управления для работы с данными и объектов доступа к данным (DAO). Билл Сторедж, один из первых хакеров VB и член консультативной редакционной коллегии журнала «Visual Basic Programmer's Journal - VBPJ», создавал крупные приложения для работы с БД на VB 3.0.

Параллельно он обнаружил, что VB под эгидой защиты программистов от сумбурных API-интерфейсов и сбоев сильно ограничивает в средствах разработчиков Windows-приложений. Происходя из среды программистов на С, Сторедж решил, что отсутствие доступа к сообщениям Windows — это слишком. Он и другие программисты при создании сложных приложений стали использовать утилиту SpyWorks компании Desaware и другие продукты сторонних поставщиков, позволявшие перехватывать базовый поток сообщений Windows для форм и элементов управления. Продвинутые пользователи VB настаивали на реализации подобной функциональности непосредственно в Visual Basic. Эти усилия в конце концов привели к появлению функций для работы с указателями и оператора AddressOf, что позволило еще шире использовать VB.

В развитии VB значительную роль сыграли не только опытные пользователи и независимые производители, но и конкурирующее средство разработки Delphi от Borland. Среда разработки Delphi дебютировала в мае 1995, выиграв награду «Editors Choice» журнала «VBPJ». С тех пор Delphi остается серьезным конкурентом VB, хотя и никогда не завоевывала больше 12 процентов рынка. Несмотря на это, она заставляла Microsoft совершенствовать VB, и зачастую в последней версии Delphi можно увидеть функции будущих версий VB. Некоторые возможности Delphi еще не реализованы в VB. Например, динамическое связывание и возможность распространять приложения, не требующие наличия библиотек среды выполнения, сделали Delphi RAD-средством среди разработчиков условно бесплатных приложений.

Становление собратьев VB

VB для Windows сразу же стал пользоваться успехом, а родственные ему продукты VB-DOS и Microsoft Access прошли тернистый путь. К моменту выпуска VB 1.0 (рис. 1) Windows еще только начала закрепляться на рынке, а DOS оставалась доминирующей операционной системой. Винер (и компания Crescent) в течение многих лет создавал утилиты для QuickBasic и его предшественников. Он перенес некоторые свои продукты на VB-DOS, однако эта среда разработки запомнилась ему как переполненный ошибками сарай ресурсов.

Винер вспоминает, что Microsoft в попытке привлечь программистов к VB-DOS пообещала, что исходный код на VB-DOS можно будет легко портировать для Windows-версии VB. Microsoft не сдержала своего обещания. В VB-DOS был неудобный конструктор форм, имели место многочисленные утечки памяти, и среда разработки предъявляла слишком высокие требования к объему ОЗУ. В первой Windows-версии VB эти ошибки так и не были устранены, и кто-то уже стал говорить, что VB выпал из сферы интересов Microsoft, когда компания стала разрабатывать продукты для Windows-рынка.

с Microsoft Access было легче, но и ему пришлось преодолевать последствия преждевременного выхода на рынок. созданный Биллом Гейтсом язык Basic глубоко пустил свои корни, и среда разработки Visual Basic была далеко не единственным продуктом, который Гейтс хотел построить на основе этого языка. Гейтс также хотел создать продукт, полностью совместимый с dBase, но в качестве языка программирования использовавший бы Basic. В 1986 г. Microsoft наняла Ренди Кейла (Randy Kahle), автора стратегии и семейства продуктов СУБД для миникомпьютера HP3000 компании Hewlett-Packard, для разработки стратегии и семейства продуктов БД Microsoft.

Кейл упоминает, что проект Omega был первой попыткой создания проекта БД командой, практически не обладающей опытом создания таких продуктов. Когда Кейл пришел в Microsoft, единственным опытом компании в созданни БД был проект Microsoft File для компьютеров Macintosh. Команде разработчиков пришлось нелегко. Кейл поясняет: «Базы данных трудны в разработке и требуют особого склада ума, отличающегося от того, который необходим для создания электронных таблиц или текстовых редакторов». Команда разработчикав столкнулась со всеми этими сложностями, и в конце концов проект был предан огню, но только чтобы возродиться, как Феникс из пепла, под новым кодовым названием Cirrus. Не ясно, сколько осталось от первоначального проекта на новом этапе. Кейл отмечает, что это был трудный переход, но после него проект больше соответствовал обычным процессам разработки и маркетинга.

До появления VB 3.0 в Visual Basic не было полной, встроенной функциональности для работы с БД, но в Microsoft "проросли семена" для создания дружественного Basic средства управления БД. Интересно, что ходят не подтвержденные представителями Microsoft слухи о существовании «визуальной» версии Basic, предшествовавшей появлению VB.

Резкие переходы

Думаете, переход от VB 6.0 к VB .NET — большое изменение? Уже не в первый раз VB-разработчики сталкиваются с подобной задачей. С появлением VB 4.0 им пришлось переходить от 16-разрядного к 32-разрядному программированию. Для некоторых программистов это было болезненно, но для разработчиков в Microsoft — просто мучительно. Добавление 32-разрядных интерфейсов в пакет форм Ruby потребовало много работы, равно как и работа с новой инфраструктурой, основанной на стабилизировавшейся технологии COM.

Для повышения производительности команда VB добавила такие функции, как компиляция по запросу, фоновая загрузка проекта и кэшированные библиотеки типов, но эти фундаментальные изменения привели к появлению множества странных ошибок, которые необходимо было устранить перед выпуском продукта в свет.

Эплмен вспоминает, что независимые поставщики ПО считали VB 4.0 ужасным. Продукт опоздал с выходом на рынок. В нем было полностью новое языковое ядро на основе COM. Сборки постоянно менялись, ломая код, прекрасно работавший в предыдущих сборках. Кроме того, библиотека Microsoft Foundation Classes (MFC), использовавшаяся для разработки пользовательских элементов управления, была еще не обкатана, постоянно менялась и выдавала ошибки.

Кроме того, впервые появилась корпоративная версия (Enterprise Edition) продукта. Она состояла преимущественно из уже имевшихся утилит типа Visual Source Safe (VSS) или перенесенных из Visual C++. Переносом занималась группа специалистов Microsoft под руководством Джона Роскила. Именно он настоял на приобретении VSS у сторонней компании и упорно боролся за включение SQL Server в комплект поставки. Благодаря этому, лицензий SQL Server было приобретено больше, чем в результате какого-то другого события. Кроме того, версия Enterprise Edition пользовалась большим успехом у корпоративных разработчиков, наконец-то получивших необходимые утилиты для создания больших масштабируемых приложений.

VB .NET некоторым образом ликвидирует характерную особенность VB 5.0 и VB 6.0, которую Билл Сторедж называет «золотыми днями хака». Цель VB .NET — дать разработчикам средство с беспрецедентной внутренней мощью. В VB 5.0 и VB 6.0 новые возможности языка упростили работу с низкоуровневыми функциями Windows, а также открыли возможности для обхода подсистемы VB, защищавшей приложения и программистов. В этой ситуации Microsoft почувствовала себя очень неуютно и разместила в базе знаний статью с упоминанием Стореджа, своего собственного сотрудника Мэтта Керленда и других хакеров, предостерегавшую против таких взломов.

VB 5.0 поддерживал создание пользовательских элементов управления, а версия Custom Control Edition (CCE) была выпущена до появления VB 5.0, и любой мог бесплатно загрузить ее с Web-узла Microsoft. Это означало, что пользовательские элементы управления можно было создавать только с помощью VB, не прибегая к услугам VC++ или Delphi. Такое решение принял лично Билл Гейтс — он, как обычно, вмешался и направил разработку VB в нужное русло, не вызвав при этом ни малейшего испуга в рядах команды VB, поскольку ей приходилось упорно работать для внедрения многих функций в коммерческой версии продукта. На самом деле CCE не стал модным в среде разработчиков, но для авторов и журналов был просто подарком — они могли обсуждать функции готовившегося к выходу VB 5.0, не нарушая подписку о неразглашении.

VB охватывает Web — наконец-то!

С точки зрения реализации многих долгожданных функций типа наследования VB .NET, это большой шаг вперед, но сделан он за счет обратной совместимости.

Основной аспект .NET — программирование для Web. Это уже не первая, зато самая согласованная и решительная попытка Microsoft обеспечить взаимодействие приложений на Visual Basic с Web. Билл Гейтс мог бы сфокусировать все усилия Microsoft на Интернете еще в 1995 г., однако потребовалось некоторое время, чтобы VB занял свое место в новой политике компании.

VB .NET следует за серией связанных с Интернетом фальш-стартов Microsoft. В VB 5.0 были реализованы ActiveX-документы, не получившие широкого распространения, а в VB 6.0 появились DHTML и классы WebClasses. Дейв Мендлен (сейчас — ведущий продукт-менеджер по Visual Studio .NET) говорит, что Microsoft проделала недостаточную работу для предоставления необходимых разработчикам Web-функций. DHTML-приложения на VB 6.0 практически непригодны для использования, а классы WebClasses на первых порах получили массу плохих отзывов в прессе, что заставило многих разработчиков создавать Web-приложения с использованием проверенного в работе ASP. Мендлен заявляет, что его команда полна решимости не допустить подобных ошибок в .NET, и сообщает, что Microsoft внимательно изучила и решила проблемы производительности и масштабируемости, мешавшие предыдущим попыткам выхода Visual Basic в Web.

Остается лишь наблюдать, как быстро или насколько широко VB-разработчики станут использовать VB .NET. Благодаря широкому спектру новых функций, создавать универсальные корпоративные и Интернет-приложения и службы будет гораздо проще, чем в VB 6.0. Но, кроме того, VB испытывает жесткую конкуренцию со стороны других языков, позаимствовавших у него многие удачные находки, включая младшего брата по платформе .NETC#.

Основываясь на интервью, взятых для написания статьи, можно сделать вывод, что в момент своего появления VB разительно отличался от прочих присутствовавших на рынке программных продуктов. В поиске решения для быстрого и легкого создания Windows-приложений вы могли остановиться только на VB. С точки зрения создания Web/корпоративных приложений, VB .NET выгодно отличается от имеющихся программных средств. Но это не единственная доступная игрушка. С другой стороны, VB 1.0 пришлось создавать пользовательскую базу с нуля, а у VB .NET большая база разработчиков, которых можно увлечь программированием в этой среде.

Происхождение и эволюция VB стали возможны благодаря тому, что разработчикам требовалось дружественное RAD-средство, а Microsoft необходимо было расширять использование платформы Windows сторонними специалистами. В результате, на протяжении многих лет любые изменения языка были привязаны не только к потребностям и желаниям разработчиков, но и к фундаментальным изменениям в Windows. Web — это похожий фундаментальный сдвиг, к которому придется адаптироваться разработчикам. VB долго зрел и рос, но сейчас стоит на перепутье. С удачей и усилиями, принесшими Visual Basic сегодняшний успех, возможно, что VB .NET позволит разработчикам благоденствовать в объединенном мире, точно так же, как VB позволил им преуспеть в мире Windows.

***************************************************

Билл Гейтс (Bill Gates)

Будущее Visual Basic

Visual Basic начинался с проекта под названием «Thunder», и в начале 90-х гг. штурмом взял мир прикладного программирования. Теперь, через 10 лет после выхода VB в свет, мы выпускаем новаторскую версию этого языка под названием Visual Basic .NET, которая произведет революцию в разработке приложений.

В свое время я написал статью о своем видении языка Basic. Тогда высокий уровень доступности и относительная простота уже сделали Basic самым популярным языком программирования.

С появлением в 1991 г. VB 1.0 простота и доступность перешли на новый уровень благодаря смене подхода к созданию приложений для ПК. Разработчики впервые могли интуитивно проектировать Windows-приложения. Им не требовалось писать базовый код для каждого окна и кнопки, а в графическом пользовательском интерфейсе можно было осуществить любой этап разработки приложения — написание, отладку и компиляцию кода. VB перевернул все! Он сделал Windows-программирование мейнстримом, дал начало потоку отличных Windows-приложений и открыл визуальное проектирование миллионам разработчиков.

С момента выхода VB его сообщество выросло более чем до 3 млн профессиональных разработчиков — фактически, более половины разработчиков в мире. Увеличивающаяся мощь и функциональность ПК закладывают основу роста этого сообщества, и VB эволюционирует вместе с потребностями разработчиков.

Мир компьютеров по-прежнему меняется, и VB изменяется вместе с ним. Сейчас мы подошли к третьему поколению Интернета, когда фокус смещается от отдельных Web-узлов и устройств, соединенных с Интернетом, к созвездиям компьютеров, устройств и служб, совместно взаимодействующих для предоставления разнообразных всеохватывающих решений. При создании новых средств разработки необходимо учитывать Web, которая эволюционирует от информационной к бизнес-среде, рассчитанной на критичные приложение масштаба предприятия, способные гладко взаимодействовать друг с другом. Такие средства разработки должны позволять создавать Web-приложения и службы, предоставляющие мощь клиентских приложений и одновременно обеспечивающие масштабируемость, которой офисные и клиент-серверные приложения не смогут достичь как таковые.

В VB .NET эта проблема решена так: мы реализовали полную поддержку объектно-ориентированного программирования, встроенную поддержку XML и Web-служб, прямой доступ к архитектуре .NET, а также создали мощную унифицированную интегрированную среду разработки. В результате получилось средство программирования, предоставляющее неизмеримую мощь, и одновременно обеспечивающее доступность и простоту, обусловившие в свое время успех VB.

Следующие 10 лет будут для разработчиков программного обеспечения удивительным периодом. Усовершенствования методов разработки, развертывания и использования приложений будут такими же значительными, как  переход от DOS- к Windows-программированию. VB .NET станет основой для разработки решений, которые откроют новую эпоху по-настоящему распределенных вычислений в Интернете.

Microsoft рассматривает сообщество Visual Basic как основной элемент этого видения. Если вы новичок в этом сообществе, я приглашаю вас в эпоху, которая обещает быть исключительно интересной. Если же вы опытный программист, благодарю вас за непрерывное участие в превращении VB в самое популярное средство разработки. Уверен, что VB .NET даст вам необходимую мощь для написания актуального ПО, отвечающего потребностям будущего Интернета.


Окончание статьи "SAX и Microsoft XML Parser 3.0"

Использование ado2xml

Прилагаемые к статье примеры демонстрируют использование объекта ado2xml в среде Visual Basic и на ASP-странице. Ниже перечислены методы и свойства объекта ado2xml:

Метод/свойство Значение по умолчанию Назначение
dataSource пусто Имя БД. Если указано имя MDB-файла, при задании свойства ado2xml убедится, что файл можно открыть и в противном случае возбудит ошибку. При помощи API-функции FormatMessage Win32 числовой код ошибки преобразуется в текстовое сообщение и распространяется в описании ошибки.
Provider Microsoft.Jet.OLEDB.4.0 Строка с именем поставщика OLE DB, которая передается в строку ADODB Connection. Синтаксис строки и достоверность источника не проверяются.
UserID admin Идентификатор пользователя для доступа к БД. В БД MS Access используется пользователь по умолчанию «admin»
userPswd пусто Пароль пользователя. По умолчанию пароль для доступа к БД MS Access не указывается.
rowIdentifier строка Представляет имя тега, которое идентифицирует каждую запись или название элемента, включающего каждую группу элементов, представляющих собой запись. Подробнее — в описании свойства docFormat
docFormat a2xOneLinePerRow Значения: a2xOneLinePerRow, a2xManyLinesPerRow. Если свойство docFormat задано как a2xOneLinePerRow, записи набора результатов размещаются на отдельных строках XML-документа. Именем элемента, вмещающего запись, будет значение свойства rowIdentifier. Все поля и значения набора результатов являются атрибутами строки.

Если свойство docFormat задано как a2xManyLinesPerRow, несколько записей набора результатов объединяются в группу XML-элементов. Названия и значения элементов группы, принимающих отдельные записи, соответствуют именам и значениям полей; атрибуты не используются. Каждая группа помещается в элемент, указанный в свойстве rowIdentifier. Примеры — в следующем разделе.

useASPResponse true Если объект ado2xml создан в ASP-странице с помощью метода Server.CreateObject, он попытается передать свой вывод ASP-объекту Response. Чтобы запретить такое поведение, задайте перед вызовом метода Query2XML свойство useASPResponse как False. В этом случае метод Query2XML вернет строку с XML-данными.
Open метод Вызовите этот метод, после того как выберете требуемый тип вывода ado2xml. Он вызывает метод CreateInstance объекта ADO Recordset. Если вы забудете сделать это, метод Open будет автоматически вызван перед выполнением запроса.
Query2XML метод выполняет запрос, переданный в качестве параметра, и преобразует результирующий набор в формат XML. Метод возвращает строку с XML-выводом или строку с сообщением о пересылке вывода ASP-объекту Response. Подробнее — в описании свойства useASPResponse.
Close метод При необходимости закрывает ADO-объект Recordset и освобождает занимаемые им ресурсы. Вызывайте этот метод по завершении работы с объектом ado2xml. Метод Close автоматически вызывается при необходимости, а также при уничтожении объекта ado2xml.

Примеры клиентов

Прилагающийся к статье архив включает примеры клиентов на Visual Basic, ASP/VBScript и C++, написанных с использованием библиотеки WTL.

VB-разработчики могут легко указать требуемый типа вывода ado2xml. При написании программы функция IntelliSense среды Visual Basic выдаст список с доступными вариантами (рис. 3).

Рис. 3

Объект ado2xml поддерживает вывод развернутых сообщений об ошибках, и поэтому клиенты на Visual Basic могут легко перехватывать ошибки. В примере на рис 4 клиент перехватывает ошибку, вызванную попыткой задать неправильное значение свойства dataSource.

Рис. 4

Клиент на C++, разработанный с использованием библиотек ATL и WTL, получился очень маленьким и эффективным. Итоговый размер этого приложения составляет всего 60Кб, и оно не использует библиотек типа MFC. Этот клиент демонстрирует функциональность библиотеки WTL в области обмена данными — это должно быть знакомо разработчикам, использующим библиотеку MFC. Кроме того, клиент на C++ иллюстрирует работу с элементами управления типа «редактируемое поле» при помощи классов элементов управления библиотеки WTL. На рис. 5 показано, как выглядит клиент на C++.

Рис. 5

Клиенты на основе ASP обсуждаются в следующем разделе.

Пример вывода результатов

Ниже показано, как свойства docFormat и rowIdentifier влияют на XML-документ, генерируемый объектом ado2xml. Я написал очень мало кода для использования объекта ado2xml на ASP-странице. В данном случае ado2xml по умолчанию выдает клиенту XML-документ с помощью ASP-объекта Response. Поскольку Internet Explorer может сам отображать XML-данные, я открыл все файлы примеров в нем и сделал снимки экрана. Чтобы поработать с примерами ASP-файлов из прилагающегося архива, зарегистрируйте библиотеку ado2xml.dll и скопируйте ASP-файлы в каталог сервера IIS.

Одна запись на строку, изменено значение свойства rowIdentifier по умолчанию

Рис. 6

Использовался вот этот код:

<%
dim ado2xml
set ado2xml=Server.CreateObject("ADO2XML.Converter")
' обратите внимание: свойство a2xOneLinePerRow установлено в 1
ado2xml.docFormat=1
ado2xml.rowIdentifier="Student"
ado2xml.DataSource = "C:\asp2day\database\asptoday.mdb"
ado2xml.Query2XML("select * from students")
' вывод передается непосредственно клиенту при помощи объекта Response
%>

Несколько записей в строке, значение свойства rowIdentifier по умолчанию не изменялось

Рис. 7

Вот ASP-код:

<%
dim ado2xml
set ado2xml=Server.CreateObject("ADO2XML.Converter")
' обратите внимание: свойство a2xManyLinesPerRow установлено в 2
ado2xml.docFormat=2
ado2xml.DataSource = "C:\asp2day\database\asptoday.mdb"
ado2xml.Query2XML("select * from students")
' вывод направляется прямо клиенту при помощи объекта Response
%>

При необходимости для перехвата и реакции на ошибки ado2xml можно проверять во всем коде свойство Number объекта Err с помощью операторов if. Этот прием продемонстрирован в разделе «Примеры кода».

Замечание о типах данных

Объект ado2xml очень просто подходит к типам данных: он пытается с помощью метода ChangeType класса _variant_t преобразовать в строки все значения, которые ими не являются. Поскольку Ado2xml не тестировался со всеми типами данных, перед использованием этого решения в производственных системах рекомендуется проверить результаты преобразований.

компиляция и выполнения объекта ado2xml

Основные требования к компиляции и использованию объекта ado2xml таковы:

·         Windows NT 4.0 или более поздней версии;

·         ADO 2.5;

·         MSXML 3.0.

В системах с Windows 2000 анализатор MSXML 3.0 уже установлен; на компьютерах с Windows NT 4.0 анализатор следует установить, загрузив его с Web-узла MSDN (см. ссылку в конце статьи). Если после установки MSXML 3.0 возникнут какие-либо проблемы с его использованием, возможно, придется внести некоторые изменения в системный реестр с помощью утилиты xmlInst от Microsoft.

Зарегистрируйте объект ado2xml в системе командой regsvr32 ado2xml.dll и затем с помощью любого клиента проверьте его работоспособность. Обратите внимание, что в ASP-файлах (sample1.asp и sample2.asp) вам может потребоваться изменить путь к БД. Скопируйте три файла из папки ASP на Web-сервер и для начала работы откройте страницу default.htm. Клиенты на Visual Basic и C++ позволяют указать расположение БД с помощью пользовательского интерфейса.

Для компиляции ado2xml вам потребуется установленная среда Visual C++ 6.0 с сервисным пакетов версии 1 или более поздней, библиотека WTL (часть Platform SDK), а также XML Parser SDK (см. ссылку в конце статьи).

Структура каталогов поставки

Обратите внимание, что папка ado2xml содержит файлы проекта и исходного кода, а также папку Clients. Чтобы заново откомпилировать клиент на C++, изменив структуру каталогов, не забудьте изменить директиву #import в начале файла maindlg.h.

Рис. 8

Примеры кода

Прилагаемый к статье архив содержит:

Для любопытных привожу ниже фрагмент исходного кода, демонстрирующий взаимодействие с объектом ado2xml из приложения на Visual Basic:

Dim ado2xmlObject As Object
Dim xmlString As String

' Создаем объект ado2xml...
Set ado2xmlObject = CreateObject("ADO2XML.Converter")
' Задаем свойства...
ado2xmlObject.DataSource = "C:\asp2day\database\asptoday.mdb"

ado2xmlObject.Open
' Выполняем запрос.
xmlString = ado2xmlObject.Query2XML("select * from students")
' Как можно быстрее освобождаем ресурсы.
ado2xmlObject.Close
Set ado2xmlObject = Nothing

' Работаем с XML-документом...
xmlDoc.loadXML (xmlString)

Set nodeList = xmlDoc.selectNodes("//Subtree/*")

' Выводим результат в окно списка...
List1.AddItem "There are " & nodeList.length & " nodes...."
Dim nodeItem As Variant
For Each nodeItem In nodeList
                List1.AddItem "Element [" & nodeItem.nodeName & "] = " & nodeItem.Text
Next

Следующий пример демонстрирует использование объекта ado2xml в ASP-странице:

<%
dim ado2xml
set ado2xml=Server.CreateObject("ADO2XML.Converter")
ado2xml.DataSource = "C:\asp2day\database\asptoday.mdb"
ado2xml.Query2XML("select * from students")
%>

А вот тот же пример, дополненный кодом проверки ошибок:

<%
dim ado2xml
set ado2xml=Server.CreateObject("ADO2XML.Converter")
ado2xml.DataSource = "C:\asp2day\database\asptoday.mdb"
' На данном этапе объект ado2xml проверяет существование файла.
' С помощью API-функции Win32 под названием FormatMessage
' он генерирует текстовое описание ошибки.
if Err.Number <> 0 then
                response.write (Err.Description)
else
                ado2xml.Query2XML("select * from students")
end if
%>

(возврат на основную страницу)

 

Hosted by uCoz