Функции работы с описаниями таблицы (вариант для 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
.
Эта функция закрывает указанную таблицу и возвращает:
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
.