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

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. Допускается пустое имя, задаваемое в виде "".Таблицы в системной БД может открыть только системный пользователь. Системному пользователю доступны на чтение/запись все таблицы во всех БД. Таблицы, при создании которых не указан их владелец, доступны для чтения/записи всем. Для чтения все таблицы доступны всем. Запись в таблицы с владельцем может осуществлять только он и системный пользователь. Максимальное число одновременно открытых таблиц ограничивается 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.