|
|
Программирование на Верхнем Уровне СУ
Библиотеки алгоритмов СУ
БД ССУДА обеспечивает базовые услуги
управления данными – открытие и закрытие
таблиц, чтение и запись таблиц, определение
структуры таблиц, передача данных между
компьютерами.
|
Однако, специфика вычислительных средств
СУ, используемые сетевые протоколы
потребовали надстройки над системой
управления данными для приложений,
выполняющихся на Рабочих Станциях - автоматическое
деление буфера данных на максимально
допустимые порции, автоматические
повторные чтение и запись данных,
автоматическое переоткрытие таблиц в БД и
другой необходимый сервис.
|
Адаптация БД ССУДА к
СУ реализована в виде библиотеки процедур-функций на
языке программирования "С". Файл-заголовок
prglib.h
библиотеки и файл-библиотека prglib.a
расположены в каталоге /prg .
Библиотека содержит следующие процедуры-функции:
|
|
PrgDB_DBnumber
- установить номер локальной БД
|
|
PrgDB_DBopen
- открыть локальную БД
|
|
PrgDB_DBclose
- закрыть локальную БД
|
|
PrgDBa_open
- открытие глобальной таблицы
|
|
|
PrgDB_open ( устаревший вариант)
|
|
PrgDBa_openLocal
- открыть таблицу локальной БД
|
|
|
PrgDB_openLocal ( устаревший вариант)
|
|
PrgDBa_close
- закрыть таблицу
|
|
|
PrgDB_close ( устаревший вариант)
|
|
PrgDBa_closeAll
- закрыть всех таблицы
|
|
PrgDBa_getID
- получить идентификатор открытой таблицы
|
|
PrgDBa_getName
- получить имя открытой таблицы
|
|
PrgDBa_rw
- чтение данных из таблицы или запись данных в таблицу
|
|
|
PrgDB_rw ( устаревший вариант)
|
|
Пример - компиляция и сборки ПП
|
void PrgDB_DBnumber (short int n);
|
Установить Локальную БД с номером
n. Глобальная
БД имеет номер 0 и его устанавливать не надо.
|
unsigned short int PrgDB_DBopen (void);
|
Открыть Локальную БД с заранее установленным номером. Глобальную
БД открывать не надо (она открыта
всегда).
В случае успеха возвращает значение 0.
В случае ошибки возвращает код ошибки ССУДА и делает запись в
файл-протокол, если он определен.
|
void PrgDB_DBclose (void);
|
Закрыть Локальную БД с установленным номером.
|
unsigned short int PrgDBa_openLocal (short int *idn, char *name);
|
Открыть таблицу в Локальной
БД с заранее установленным номером (PrgDB_DBnumber ,
PrgDB_DBopen ).
|
name - заданное имя таблицы;
|
|
idn - номер структуры для заданной таблицы,
который определила данная функция в
списке структур (см.здесь).
|
Если таблица с заданным именем
открывается повторно, то номером будет
номер структуры, которая содержит
указанное имя таблицы. Иначе номером
будет первая свободная структура в
списке.
Структура имеет вид:
struct dba_tbl_detect
{
char name[TBL_LEN_TABLE]; // имя таблицы
short int id; // идентификатор таблицы
int ndb; // номер БД: Глобальная (=0), Локальная (>0)
int count; // число открытых таблиц с этим именем для этой БД
};
Содержимое полей структуры можно получить посредством
процедур-функций PrgDBa_getID, PrgDBa_getName.
В случае успеха возвращает значение RC_OK .
В случае ошибки возвращает код ошибки ССУДА и делает запись в файл-протокол,
если он определен.
|
Устаревший вариант:
unsigned short int PrgDB_openLocal (int fl_cmt, short int *id, char *name);
|
Открыть таблицу в Локальной БД:
|
fl_cmt - семафор для отладки ПП:
|
|
|
fl_cmt=0 - нет вывода результата,
|
|
|
fl_cmt=1 - вывод результата в файл-протокол;
|
|
name - заданное имя таблицы;
|
|
id - идентификатор таблицы в БД, определенный данной
процедурой-функцией.
|
В случае успеха возвращает значение RC_OK
и делает запись в файл-протокол,
если он определен и fl_cmt=1.
В случае ошибки возвращает код ошибки ССУДА
и делает запись в файл-протокол,
если он определен.
|
unsigned short int PrgDBa_open (short int *idn, char *name);
|
Открыть таблицу в Глобальной
БД аналогично PrgDBa_openLocal
|
Устаревший вариант:
unsigned short int PrgDB_open (int fl_cmt, short int *id, char *name);
|
Открыть таблицу в Глобальной
БД. Аналогично фпроцедуре PrgDB_openLocal .
|
unsigned short int PrgDBa_close (short int *idn);
|
Закрыть таблицу в Глобальной
или Локальной БД.
В случае успеха возвращает значение RC_OK .
В случае ошибки возвращает код ошибки ССУДА
или значение RC_ERTBLTYPE ,
которое означает, что таблица не была
открыта, и делает запись в файл-протокол,
если он определен.
|
Устаревший вариант:
unsigned short int PrgDB_close (int fl_cmt, short int *id, char *name);
|
Закрыть таблицу в Глобальной или Локальной БД.
|
fl_cmt - семафор для отладки ПП:
|
|
|
fl_cmt=0 - нет вывода результата,
|
|
|
fl_cmt=1 - вывод результата в файл-протокол;
|
|
name - заданное имя таблицы;
|
|
id - идентификатор таблицы в БД,
определенный процедурой PrgDB_open
или PrgDB_openLocal .
|
В случае успеха возвращает значение RC_OK
и делает запись в файл-протокол,
если он определен и fl_cmt=1.
В случае ошибки возвращает код ошибки ССУДА
и делает запись в файл-протокол,
если он определен.
|
void PrgDBa_closeAll (void);
|
Закрыть все таблицы, открытые
посредством процедур PrgDBa_open
и PrgDBa_openLocal
|
short int PrgDBa_getID (short int idn);
|
Получить идентификатор таблицы в БД,
определенный в структуре с номером
idn
|
char* PrgDBa_getName (short int idn);
|
Получить имя таблицы, определенное в структуре с номером
idn.
|
unsigned short int PrgDBa_rw (int fl_op, void
*buf, long int buflen, short int *coord, short int *idn);
|
Читать данные из таблицы БД или писать данные в таблицу БД.
|
fl_op - семафор операции:
|
|
|
fl_op=0 - чтение,
|
|
|
fl_op=1 - запись;
|
|
buf - адрес буфера для данных;
|
|
buflen - размер буфера в байтах;
|
|
coord - координаты
таблицы;
|
|
idn - номер структуры, в которой
определена таблица посредством
процедуры PrgDBa_open
или PrgDBa_openLocal .
|
Дополнительные свойства:
|
делит буфер на части, не превышающие
размер 8500 и 900 байт для копии 1
и копии 3
таблицы соответственно; при этом
процедура-функция может возвратить
значение RC_ERDATA
(неправильно указаны номера столбцов
таблицы);
|
|
если БД
ССУДА возвращает значение: 0x8102
или 0x8104, то делается 2 попытки выполнить указанную
операцию (чтение или запись);
|
|
если БД ССУДА
возвращает значение 0x8000,
0x8100 или 0x8103,
то делается 3 попытки переоткрыть таблицу;
|
|
если БД
ССУДА возвращает значение 0x80F0,
то процедура-функция возвращает код RC_ECOFF
(выключен Контроллер Оборудования);
|
|
если БД ССУДА
возвращает значение 0x8101,
то процедура-функция возвращает код RC_ECNOTDB
(нет базы данных в Контроллере
Оборудования, в котором должна
располагаться указанная таблица).
|
В случае успеха возвращает значение RC_OK . В
случае ошибки делает запись в файл-протокол,
если он определен.
|
Устаревший вариант:
unsigned short int PrgDB_rw (int fl_cmt, int
fl_op, void *buf, long int buflen, short int *coord, short int *id, char
*name);
|
Читать данные из таблицы БД или писать
данные в таблицу БД. Отличие от PrgDBa_rw :
|
fl_cmt - семафор для отладки ПП:
|
|
|
fl_cmt=0 - нет вывода результата,
|
|
|
fl_cmt=1 - вывод результата в файл-протокол,;
|
|
name - заданное имя таблицы;
|
|
id - идентификатор таблицы в БД,
определенный процедурой PrgDB_open
или PrgDB_openLocal .
|
В случае успеха возвращает значение RC_OK
и делает запись в файл-протокол,
если он определен и fl_cmt=1.
В случае ошибки возвращает код ошибки ССУДА
и делает запись в файл-протокол,
если он определен.
|
Устаревший вариант:
|
Компиляция и сборка программы (файл name.c),
использующей процедуры Надстройки над БД
ССУДА:
cc name.c /prg/prglib.a /usr/usera/voevodin/rt-data/ccydalib/ccydalib.a
|
Автор © Клименков Е.В.
|
|
|
|