Використання вбудованого інтерфейсу при роботі з базою даних RDM Embedded від компанії 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) Конфігурування оточення


Є два параметри оточення, які необхідно встановити для налаштування доступу до своїх даних:


Крок 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 ви створите два нових файлу:


Крок 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(” field 1: %d field 2: %d
“, 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(” field 1: %d field 2: %d
“, 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 FilesBirdstep TechnologyRDM Embedded 7.0include

Помилка: 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 можна знайти тут.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*