Распределенная База Данных реального времени ССУДА
Функции работы с описаниями таблицы (вариант для MSDOS)
Все функции, в параметрах которых используется
идентификатор таблицы, устанавливают текущей ту БД, к которой
принадлежит данная таблица.
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 .
Пример
Автор ©
Воеводин В.П.
|