Приложения для работы с базами данных
Давайте теперь сфокусируем внимание на том основном, для чего предназначен Xbase++: на приложениях для работы с базами данных. На самом деле, обсуждение полного процесса по разработке баз данных сильно выходит за рамки данного курса. Поэтому нам придется использовать пример, который поставляется с Xbase++.
В папке Samples откройте Apps, а затем MdiDemo. Запустите программу MDIDEMO.EXE. Это программа Multiple Document Interface, которая управляет базами данных Customer и Parts. Выберите в меню пункт Document-> Customer, чтобы открыть дочернее окно, показывающее данные по клиентам, ознакомьтесь с данными и измените их: нажимайте кнопки Page Up, Page Down, Tab, Return, кнопки управления курсором.
Нажмите на поле ввода ZIP правой кнопкой мыши. Так Вы откроете окно контекстного меню, которое автоматически выводит Windows. Потом кликните правой кнопкой, но вне поля ввода ZIP. Это контекстное меню запрограммировано в Xbase++, и имеет те же пункты, что и меню Edit в строчке меню родительского окна.
Откройте еще два окошка Customer и нажмите Page Down в каждом дочернем окне, чтобы увидеть, что в каждом из них можно редактировать различные записи базы данных. В отличие от примера с Application Parts, эти окна не синхронизированы. Причиной этому является то, что база данных Customer сейчас открыта три раза. По этой причине каждое дочернее окно поддерживает свои собственные указатели записи.
Программисты Clipper обычно избегают одновременно отрывать одну и ту же базу данных. Это происходит вследствие ограничения DOS на одновременное открытие 255 файлов. Xbase++ не ограничивает вас в этом, и вы можете воспользоваться возможностью открытия одного и того же файла несколько раз.
Закройте все окна Customer, выбрав пункт Window-> Close all в основном меню, и откройте окно Parts (Document-> Parts). База данных Parts содержит текстовые данные, такие как номер изделия или описание, например, а также двоичные данные для изображения. Изображение показывается как точечный рисунок, и вы можете быстро просмотреть различные картинки, пролистывая базу данных нажатием Page Down. Точечные рисунки хранятся в поле memo базы данных Parts. Точечные рисунки можно импортировать в базу данных нажатием кнопки Bitmap.
Теперь позвольте нам объяснить основное различие между базами данных Customer и Parts: обе управляются различными системами доступа к базам данных (DatabaseEngines), которые используют файлы memo в форматах DBT и FPT. В формате DBT (Customer) в поле memo может храниться только текст, в то время как в формате FPT (Parts) можно также хранить двоичные данные.
Прервите программу, выбрав пункт меню Document-> Exit и не утруждайте себя чтением исходного кода. Различные аспекты программы MDIDEMO.EXE подробно рассмотрены в главе Basics в интерактивной документации. Вы можете позже потратить достаточно времени на изучение исходного кода и документации. А сейчас продолжим вступительный курс.
В разделе MdiDemo, однако, есть один файл PRG, который полезно посмотреть прямо сейчас: DBESYS.PRG. Он содержит код, который создает две системы доступа к базам данных (DatabaseEngines) - DBFNTX и FOXCDX. Код легок для понимания и сразу же дает представление о системе доступа к базам данных Xbase++. Посмотрите его.
Процедура DbeSys() выполняется автоматически, при запуске программы, и целью процедуры является загрузка DatabaseEngines. Это делается при помощи функции DbeLoad(). Существуют различные виды DatabaseEngines: те, которые управляют файлами DBF одновременно с файлами memo, и те, которые управляют индексными файлами. Эти типы объединяются при помощи DbeBuild() в новую систему DatabaseEngine, которая теперь может управлять файлами DBF и memo, а также индексными файлами.
DatabaseEngine DBFNTX совместима с Clipper (DBT memo и NTX index), а DatabaseEngine FOXCDX совместима с FoxPro (FPT memo and CDX index). В DBFCDX или FOXNTX DatabaseEngine могут быть объединены различные компоненты.
Закройте файл DBESYS.PRG и покиньте раздел MdiDemo.
Чему я научился?
Я видел приложение Multiple Document Interface, где множество дочерних окон получают доступ к одной и той же базе данных, но при этом я могу редактировать различные записи. Такое возможно при открытии базы данных несколько раз. Я узнал кое-что о форматах файла memo: DBT может хранить только текст, в то время как FPT может хранить и текст, и двоичные данные. Если я хочу хранить точечные рисунки в базе данных, то я должен использовать формат FPT, который управляется через FOXDBE. Я понял концепцию DatabaseEngine. Сначала я загружаю один DatabaseEngine для файлов DBF, а потом еще один для индексных файлов. Я комбинирую оба этих механизма при помощи DbeBuild() и все готово. Для этого и нужна процедура DbeSys().
-