(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Использование встроенного интерфейса при работе с базой данных RDM Embedded от компании Birdstep Technology

Оглавление

Аннотация

Birdstep TechnologyБаза данных RDM Embedded от Birdstep Technology является чрезвычайно гибкой СУБД, имеющей более 150 интерфейсов прикладного программирования (API) для надежного управления базой данных. В данной статье описан простой пример, использующий встроенный набор API для работы с RDM Embedded.

Статья предназначается для читателей, у которых имеется достаточный опыт в разработке приложений на языке C, а на рабочем компьютере установлен комплект разработчика (SDK) RDM Embedded.

Сам SDK для RDM Embedded можно загрузить по адресу http://www.birdstep.com/downloads/database_download.php3 (следуя ссылке "download free SDK"). Интерфейс API и описания можно найти здесь.

Настройка

Ниже перечислены все компоненты, необходимые для доступа к базе данных RDM Embedded из приложений C/C++, созданных для платформы Windows:

  1. Среда интегрированной разработки MSVC 6.0.
  2. База данных RDM Embedded 7.x для Windows.

После завершения установки этих компонентов требуется выполнить три простых конфигурационных шага

Шаг 1) Конфигурирование окружения

Имеются два параметра окружения, которые необходимо установить для настройки доступа к вашим данным:

  • В установках системных путей должен быть определен каталог bin/win32.
  • Библиотечные файлы RDM Embedded должны быть указаны в системных путях (переменной path). Встроенные интерфейсы требуют rdm7[u] и psp7[u].

Шаг 2) Конфигурирование базы данных

Доступ к базе данных RDM Embedded осуществляется с помощью заголовочного файла на C и словарного файла RDM, причем оба эти файла создаются утилитой ddlp, включенной в SDK базы данных RDM Embedded. В качестве рабочего примера, мы создадим заголовочный и словарный файлы, исходя из имеющейся схемы.

Приведенная ниже схема описывает базу данных simpledb, имеющую одну таблицу, названную simpletb. Таблица simpletb содержит 3 поля: Первое поле с названием fld1 является ключевым с элементами типа long, второе названо fld2 с элементами типа short и третье - fld3, представляющее собой массив char[10]. Окончательно, в файле datafile1.D01 будет храниться содержимое базы данных, а в файле keyfile1.K01 будут содержаться индексированные элементы fld1.

Для создания заголовочного и словарного файла сначала скопируйте приведенную ниже схему в текстовый файл, названный schema.ddl. Затем, запустив сеанс DOS, выполните утилиту ddlp для файла схемы: ddlp schema.ddl.

database simpledb
{

data file one = "datafile1.D01" contains simpletb;
key file two = "keyfile1.K01" contains fld1;

record simpletb
{

key long fld1;
short fld2;
char fld3[10];

}

}

С помощью утилиты ddlp вы создадите два новых файла:

  • Заголовочный файл C: simpledb.h
  • Словарный файл RDM Embedded: simpledb.dbd

Шаг 3) Приложение

Для подготовки приложения к использованию встроенного интерфейса включите в ваши исходные файлы следующие операторы include:

#include <stdio.h>
#include "rdm.h"
#include "simpledb.h"

Теперь ваше приложение сконфигурировано для доступа к данным вашей RDM Embedded.

Создаем первое приложение, использующее RDM Embedded

Теперь мы создадим самое простое приложение "Hello World". Приложение будет состоять из следующих разделов:

  1. Определение менеджера блокировок.
  2. Инициализация базы данных.
  3. Наполнение базы данных информацией.
  4. Сканирование базы данных с использованием двух методов навигации:
    1. Сканирование индивидуальных экземпляров записей
    2. Сканирование с помощью индексированных полей
  5. Закрытие базы данных
  6. Компиляция
  7. Менеджер блокировок
  8. Выполнение

Раздел 1: Определение менеджера блокировок

Для осуществления многопользовательского доступа к базе данных RDM Embedded вам следует определить интерфейс менеджера блокировок. Имеется два менеджера блокировок: внутренний менеджер блокировок для окружений, в которых все пользователи работают за одним и тем же компьютером, и менеджер блокировок для TCP, где клиенты распределены в рамках вычислительной сети. В качестве примера последней блокировки, используя d_lockcomm API, можно выбрать:

d_lockcomm(psp_lmcFind("TCP"), DEFAULT_TASK)

Затем можно выбрать именованный менеджер блокировок, с которым приложение будет обмениваться информацией. Это выполняется с использованием d_lockmgr API, где вторым параметром является IP-адрес компьютера, на котором выполняется процесс менеджера блокировок. Более подробно процесс менеджера блокировок будет обсужден ниже.

d_lockmgr("192.168.2.97", DEFAULT_TASK) <примечание: Должен быть использован ваш IP-адрес>

Затем определите имя пользователя с использованием d_dbuserid API.

d_dbuserid("TheUser", DEFAULT_TASK)

Раздел 2: Инициализация базы данных

Для выполнения инициализации базы данных сначала откройте ее в эксклюзивном режиме с использованием d_open API, затем инициализируйте с использованием d_initialize API. После этого закройте базу данных, чтобы можно было открыть ее позже в режиме совместного использования.

d_open("simpledb", "x", DEFAULT_TASK)

d_initialize(DEFAULT_TASK, CURR_DB)

d_close(DEFAULT_TASK)

Раздел 3: Наполнение базы данных информацией

После инициализации базы данных таблица simpletb может быть заполнена информацией. Для этого нужно выполнить следующие шаги: Запустить транзакцию, затребовать блокировку, добавить новые данные, и затем зафиксировать транзакцию. Запустите новую транзакцию, названную "Enter":

d_dbuserid("TheUser", DEFAULT_TASK)

Поместите блокировку записи на таблицу simpletb:

d_reclock(SIMPLETB, "w", DEFAULT_TASK, CURR_DB)

Заполните индивидуальные элементы:

while (j <= 100)
{

i_simpletb.fld1 = rand();
i_simpletb.fld2 = j;
strcpy(i_simpletb.fld3,"Hello World!");
d_reclock(SIMPLETB, "w", DEFAULT_TASK, CURR_DB)
j++;

}

Завершите транзакцию, при этом все блокировки будут сняты, а любые изменения будут внесены в базу данных.

d_close(DEFAULT_TASK)

Раздел 4: Навигация по базе данных

Раздел 4a: Навигация по экземплярам записей

Для демонстрации процедур навигации будет выполнена навигация по записи базы данных для подтверждения правильности ввода данных в разделе 3. При работе с транзакцией (в этот раз она названа "Record"), будет использована блокировка таблицы на чтение ("read"). Для упрощения процесса сканирования, используйте d_recfirst and d_recnext API’s в цикле и выведите содержимое поля один и поля два:

// Запуск новой транзакции: "Record"
d_dbuserid("TheUser", DEFAULT_TASK)

// Установка блокировки на чтение ("read") на SIMPLETB
d_reclock(SIMPLETB, "r", DEFAULT_TASK, CURR_DB)

for (status = d_recfrst(SIMPLETB, DEFAULT_TASK, CURR_DB);
status == S_OKAY; status = d_recnext(DEFAULT_TASK, CURR_DB))
{

d_recread(&j_simpletb, DEFAULT_TASK, CURR_DB)
printf("\tfield 1: %d \tfield 2: %d\n", i_simpletb.fld1, i_simpletb.fld2);

}

/* Завершение транзакции и снятие всех блокировок */
d_close(DEFAULT_TASK)

Следует отметить, что этот метод сканирования иллюстрирует архитектуру сетевой модели RDM Embedded, которая в своей простейшей форме является просто связанным списком. Каждая из распечатанных записей выводится в том же самом порядке, что и связанный список.

Раздел 4b: Навигация с помощью индексированного поля

Другим навигационным примером служит навигация по базе данных с помощью индексированного поля fld1. Снова при работе с транзакцией (в этот раз она названа "Key"), будет использована блокировка таблицы на чтение ("read"). Для упрощения процесса сканирования, используйте d_ keyfrst and d_ keynext API в цикле и выведите содержимое поля один и поля два:

// Запуск новой транзакции: "Key"
d_dbuserid("TheUser", DEFAULT_TASK)

// Установка блокировки на чтение ("read") на SIMPLETB
d_reclock(SIMPLETB, "w", DEFAULT_TASK, CURR_DB)

for (status = d_keyfrst(FLD1, DEFAULT_TASK, CURR_DB); status == S_OKAY; status = d_keynext(FLD1, DEFAULT_TASK, CURR_DB))
{

d_recread(&i_simpletb, DEFAULT_TASK, CURR_DB)
printf("\tfield 1: %d \tfield 2: %d\n", i_simpletb.fld1, i_simpletb.fld2);

}

/* Завершение транзакции и снятие всех блокировок */
d_close(DEFAULT_TASK)

Раздел 5: Закрытие базы данных

Последнее, что нужно сделать - это закрыть базу данных с использованием d_close API:

d_close(DEFAULT_TASK)

Раздел 6: Компиляция

После завершения работы над исходным кодом приложения база данных может быть скомпилирована. Этот пример использует интегрированную среду разработки MSVC 6.0 - просто нажмите <F7> для компиляции. Ниже перечислены некоторые типичные ошибки, вероятные при компиляции:

Возможные ошибки компиляции

Ошибка: Cannot open include file (невозможно открыть файл заголовка): 'rdm.h'
Решение: Убедитесь в том, что в установках параметров проекта вы указали правильный путь к заголовочному файлу rdm.h. Если вы работаете, используя стандартную установку, этот файл располагается в следующем каталоге

C:\Program Files\Birdstep Technology\RDM Embedded 7.0\include

Ошибка: Unresolved external symbol _psp_lmcFindA@4 (неразрешенный внешний символ _psp_lmcFindA@4)
Решение: Вы не включили библиотеку psp7[u] в установки системных путей. Эта библиотека требуется в том случае, если вы хотите создать многопользовательский доступ к базе данных RDM Embedded.

Раздел 7: Менеджер блокировок

Перед выполнением программы HelloWorld запустите менеджер блокировок. Это отдельный процесс, который выполняется на том же самом компьютере, что и приложение, хотя это необязательно для менеджера блокировок TCP. Для запуска просто введите "lm", находясь в сеансе DOS. Будет выдано следующее сообщение:

Lock Manager
RDM Embedded 7.0.367 [16-Jul-2003] http://www.birdstep.com Copyright (c) 1992-2003 Birdstep Technology, Inc. All Rights Reserved.

TCP/IP sockets Lock manager Lock Manager - '192.168.2.97’

IP-адрес является адресом, используемым в d_lockmgr API в разделе 1. Ваш IP-адрес будет другим.

Раздел 8: Выполнение

Последнее, что осталось - выполнение. Находясь в среде MSVC, просто нажмите <ctrl><F5>. Могут наблюдаться несколько стандартных ошибок:

Если все сделано правильно, то на экран должна быть выдана следующая информация

SCANNING DATABASE BY RECORD INSTANCES
field 1: 41 field 2: 1
field 1: 18467 field 2: 2
field 1: 6334 field 2: 3
field 1: 26500 field 2: 4

total of 5 simpletb records in database

SCANNING DATABASE BY KEY FIELD: fld1
field 1: 41 field 2: 1
field 1: 6334 field 2: 3
field 1: 18467 field 2: 2
field 1: 19169 field 2: 5
field 1: 26500 field 2: 4

total of 5 simpletb records in database

Возможные ошибки во время выполнения

Возможные ошибки во время выполнения

Ошибка: TCP/IP connect fail (сбой подключения по TCP/IP): (10061), SYSTEM/OS error (системная ошибка): -920, no lock manager is installed (не установлен менеджер блокировок)
Решение (1): Убедитесь в том, что вы запустили процесс менеджера блокировок.
Решение (2): Убедитесь в том, что IP-адрес d_lockmgr API является тем же самым IP-адресом компьютера, на котором выполняется процесс менеджера блокировок.
Ошибка: SYSTEM/OS error (системная ошибка): -944, TAF-lockmgr synchronization (сбой синхронизации менеджера блокировок)
Решение: Удалите файл rdm.taf.

Исходный текст для файлов проекта MSVC 6.0 можно найти здесь.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 20.01.2006 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Panda Mobile Security - ESD версия - на 1 устройство - (лицензия на 1 год)
EMS SQL Management Studio for InterBase/Firebird (Business) + 1 Year Maintenance
Oracle Database Standard Edition 2 Processor License
GFI LanGuard подписка на 1 год (25-49 лицензий)
Quest Software. TOAD Xpert Edition
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Мастерская программиста
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100