ГНЦ ИФВЭ
ОУ У-70
Система Управления комплекса У-70  

Распределенная База Данных реального времени ССУДА

Функции работы с описаниями таблицы (вариант для MSDOS)

ropdbl
rcldbl
reddbl
rlpdbl
 
struct tab_opis
tupdbl
atrdbl
 
struct tab_opis
 
Пример
dtrdbl
dtwdbl
Пример

Все функции, в параметрах которых используется идентификатор таблицы, устанавливают текущей ту БД, к которой принадлежит данная таблица.


int ropdbl( char *rel_n, char *use_n )

Эта функция открывает таблицу с именем rel_n для доступа к данным. Открывающий имеет привилегии в соответствии с именем use_n. Допускается пустое имя, задаваемое в виде "".Таблицы в системной БД может открыть только системный пользователь. Системному пользователю доступны на чтение/запись все таблицы во всех БД. Таблицы, при создании которых не указан их владелец, ( см. DSD и DSC ) доступны для чтения/записи всем. Для чтения все таблицы доступны всем. Запись в таблицы с владельцем может осуществлять только он и системный пользователь. Максимальное число одновременно открытых таблиц ограничивается 10.

Функция возвращает:

>= 0 - идентификатор таблицы при удачном завершении, далее он в параметрах функций будет обозначаться через tab_id;
0x8010 - уже открыто 10 таблиц;
0x8000 - нет таблицы,содержащей описания пользователей;
0x8020 - нет пользователя с указанным именем;
0x8060 - в системной БД пытается открыть таблицу не системный пользователь;
0x8040 -нет такой таблицы.

Вызов после setdbl.


int rcldbl( int tab_id )

Эта функция закрывает указанную таблицу и возвращает:

0 - таблица закрыта;
0x8000 - неправильный идентификатор таблицы.

Вызов после setdbl.


int reddbl( int stat, int tab_id )

Эта функция устанавливает состояние таблицы, определяемое значением stat:

0
- данные таблицы можно только читать;
1
- данные можно читать/писать.

Она возвращает:

0 - состояние установлено;
0x8000 - ошибка в параметрах (stat не равен 0 или 1, либо неправильный идентификатор).

int rlpdbl( char *buffer, int tab_id )

Эта функция позволяет прочитать 10 байт информации в buffer  

struct tab_opis {
                  int n_tup;
                  int n_attr;
                  int tup_len;
                  int n_plan;
                 char r_type;
                 char stat;
                }

Где:

n_tup - число строк таблицы;
n_attr - число столбцов таблицы;
tup_len - длина одной строки в байтах;
n_plan - число плоскостей таблицы;
r_type - тип таблицы;
stat - состояние таблицы (0 или 1).

Она возвращает:

0 - описание прочитано;
0x8000 - неправильный идентификатор таблицы.

int tupdbl( char *buffer, int buf_length, int tup_num, int tab_id )

Эта функция читает имя строки с номером tup_num таблицы tab_id и помещает его в buffer размера buf_length. Если длина текста превышает размер буфера, то текст обрезается.

Функция возвращает значения:

0x8000 - неправильный идентификатор таблицы или нет имени в словаре имен строк;
>0 - число байт, скопированных в буфер.

int atrdbl( char *buffer, int buf_length, int attr_num, int tab_id )

Эта функция читает в buffer длины buf_length описание столбца с номером attr_num. Если buf_length=4, то в буфер помещается описание из 4-х байт следующей структуры:

 
struct attr_opis {
                  char at_len;
                  char at_type;
                  int at_offset;
                 }

где

at_len - длина элемента столбца в байтах;
at_type - тип данных столбца;
at_offset - смещение элемента от начала строки таблицы.

Если buf_length>4, то после описания в буфер помещается и имя столбца.

Функция возвращает значения:

0x8000 - неправильный идентификатор таблицы или нет имени в словаре имен строк;
> 0 - число байт имени, скопированного в буфер после описания;
= 0 - в буфере только описание без имени.

Пример


int dtrdbl( char *buffer, int buf_length, int *coord, int tab_id)

Эта функция читает данные в buffer.

Обмен данными возможен с любой подтаблицей внутри таблицы tab_id, которая определяется массивом координат coord из семи целых. Массив координат coord имеет следующий формат:

0
начальная плоскость с 1
1
конечная плоскость
2
начальная строка с 1
3
конечная строка
4
начальный столбец с 1
5
конечный столбец
6
номер копии данных

Если суммарный размер данных вырезаемой подтаблицы превышает размер буфера buf_length, то обмен осуществляется длины buf_length без дополнительной диагностики!!! Максимальное число байт, передаваемое одним обращением к этим функциям не должно превышать 65535 для локальных БД.

Функции возвращают следующие значения:

0x8000 - ошибка в координатах или идентификаторе таблицы;
0x8050 - вам не разрешена запись в эту таблицу;
0x80a0 - число запрошенных для обмена байт превышает 65535.

int dtwdbl( char *buffer, int buf_length, int *coord, int tab_id)

Эта функция пишет данные из buffer в таблицу.

Описание работы полностью аналогично dtrdbl.


Пример


Автор © Воеводин В.П.