Распределенная База Данных реального времени ССУДА
Функции работы с описаниями таблицы (вариант для UNIX)
Все функции, в параметрах которых используется
идентификатор таблицы, устанавливают текущей ту БД, к которой
принадлежит данная таблица.
int ropdbl( char *rel_n, char *use_n )
Эта функция открывает таблицу с именем rel_n для доступа к
данным. Открывающий имеет привилегии в соответствии с именем
use_n . Допускается пустое имя, задаваемое в виде "".Таблицы в
системной БД может открыть только системный пользователь.
Системному пользователю доступны на чтение/запись все
таблицы во всех БД. Таблицы, при создании которых не
указан их владелец, доступны для чтения/записи
всем. Для чтения все таблицы доступны всем. Запись в таблицы
с владельцем может осуществлять только он и системный
пользователь. Максимальное число одновременно открытых таблиц
ограничивается 100.
Функция возвращает:
>= 0 | - идентификатор таблицы при удачном завершении,
далее он в параметрах функций будет обозначаться
через tab_id |
0x8010 | - уже открыто 100 таблиц |
0x8000 | - нет таблицы, содержащей описания пользователей |
0x8020 | - нет пользователя с указанным именем |
0x8060 | - в системной БД пытается открыть таблицу не системный
пользователь |
0x8040 | -нет такой таблицы |
Для программ в ЕС есть отличия.
Вызов после setdbl .
int rcldbl( short int tab_id )
Эта функция закрывает указанную таблицу и возвращает:
0 | - таблица закрыта; |
0x8000 | - неправильный идентификатор таблицы. |
Вызов после setdbl .
int reddbl( short int stat, short int tab_id )
Эта функция устанавливает состояние таблицы, определяемое
значением stat :
- 0
- - данные таблицы можно только читать
- 1
- - данные можно читать/писать
Она возвращает:
0 | - состояние установлено; |
0x8000 | - ошибка в параметрах (stat не равен 0 или 1, либо
неправильный идентификатор). |
int rlpdbl( char *buffer, short int tab_id )
Эта функция позволяет прочитать 10 байт информации в
buffer
struct tab_opis {
unsigned short int n_tup;
unsigned short int n_attr;
unsigned short int tup_len;
unsigned short int n_plan;
unsigned char r_type;
unsigned char stat;
}
Где:
n_tup | - число строк таблицы; |
n_attr | - число столбцов таблицы; |
tup_len | - длина одной строки в байтах; |
n_plan | - число плоскостей таблицы; |
r_type | - тип таблицы; |
stat | - состояние таблицы (0 или 1). |
Она возвращает:
0 | - описание прочитано |
0x8000 | - неправильный идентификатор таблицы |
int tupdbl( char *buffer, short int buf_length, short int tup_num, short int tab_id )
Эта функция читает имя строки с номером tup_num таблицы
tab_id и помещает его в buffer размера buf_length . Если
длина текста превышает размер буфера, то текст обрезается.
Функция возвращает значения:
0x8000 | - неправильный идентификатор таблицы или нет имени в
словаре имен строк |
>0 | - число байт, скопированных в буфер. |
int atrdbl( char *buffer, short int buf_length, short int attr_num, short int tab_id )
Эта функция читает в buffer длины buf_length описание столбца
с номером attr_num . Если buf_length=4 , то в буфер помещается
описание из 4-х байт следующей структуры:
struct attr_opis {
unsigned char at_len;
unsigned char at_type;
unsigned shortint at_offset;
}
где
at_len | - длина элемента столбца в байтах; |
at_type | - тип данных столбца; |
at_offset | - смещение элемента от начала строки таблицы. |
Если buf_length > 4 , то после описания в буфер помещается и имя
столбца.
Функция возвращает значения:
0x8000 | - неправильный идентификатор таблицы или нет имени в
словаре имен строк; |
> 0 | - число байт имени, скопированного в буфер после описания; |
= 0 | - в буфере только описание без имени. |
Пример
int dtrdbl( char *buffer, short int buf_length, short int *coord, short int tab_id)
Эта функция читает данные в buffer .
Обмен данными возможен с любой подтаблицей внутри таблицы
tab_id , которая определяется массивом координат coord из семи
целых. Массив координат coord имеет следующий формат:
- 0 :
- начальная плоскость с 1
- 1 :
- конечная плоскость
- 2 :
- начальная строка с 1
- 3 :
- конечная строка
- 4 :
- начальный столбец с 1
- 5 :
- конечный столбец
- 6 :
- номер копии данных
Если суммарный размер данных вырезаемой подтаблицы превышает
размер буфера buf_length , то обмен осуществляется длины
buf_length без дополнительной диагностики!!! Максимальное число
байт, передаваемое одним обращением к этим функциям не должно
превышать 65535 для локальных БД и 9000 для глобальных.
Функции возвращают следующие значения:
0x8000 | - ошибка в координатах или идентификаторе таблицы; |
0x8050 | - вам не разрешена запись в эту таблицу; |
0x80a0 | - число запрошенных для обмена байт превышает 65535/9000. |
int dtwdbl( char *buffer, short int buf_length, short int *coord, short int tab_id)
Эта функция пишет данные из buffer в таблицу.
Описание работы полностью аналогично dtrdbl .
Пример
Автор ©
Воеводин В.П.
|