Дать описание кода завершения СУБД
Назначение
Команда
GETE
возвращает текстовое описание кода завершения операции СУБД ЛИНТЕР.
Параметры вызова
inter(CBL, NULL, NULL, [CondBuf], RowBuf);
Входные данные
Входными данными является контрольный блок
CBL
.
В нем должны быть заполнены поля:
Имя поля | Значение | |
---|---|---|
Command
|
"GETE"
| |
RowId
| Числовое значение кода завершения СУБД | |
LnBufRow
| Длина буфера выборки данных | |
Node
| Имя ЛИНТЕР-сервера |
Выходные данные
Выходными данными являются:
-
контрольный блок
CBL
; -
буфер выборки данных
RowBuf
.
В контрольном блоке будут возвращены:
Имя поля | Значение | |
---|---|---|
CodErr
| Код завершения операции СУБД ЛИНТЕР | |
LnBufRow
| Фактическая длина буфера выборки данных | |
SysErr
| Код состояния ОС |
Текстовое описание кода завершения возвращается в буфере выборки
данных
RowBuf
.
Для кодов завершения СУБД, относящихся к созданию (модификации) триггеров и хранимых процедур, вместо текста выдается другая информация (пункт «Обработка ошибок трансляции хранимых процедур (триггеров)»).
Описание
При выполнении команды
GETE
используется таблица ERRORS, содержащая текстовые описания кодов
завершения.
Если эта таблица отсутствует в БД, или задан несуществующий числовой
код завершения, то в
RowBuf
возвращается следующий текст:
Linter error NNNN
где NNNN – указанный в команде GETE числовой код завершения.
Примечание
Для создания таблицы ERRORS, в случае ее отсутствия в БД,
необходимо выполнить командный файл
cerrors.sql
и
затем
загрузить в созданную таблицу данные из файла
errors.lod
. Указанные файлы входят в состав дистрибутива СУБД ЛИНТЕР.
Коды завершения
Код | Описание | |
---|---|---|
NORMAL | Нормальное завершение | |
SMALLBUFKOR | Недостаточный размер буфера выборки данных |
Пример формирования команды
#include < string.h > #include < stdlib.h > #include "inter.h" L_LONG LinterGETE(TCBL *pCBL, L_LONG CodErr, void *Str, L_WORD StrLen) { memcpy(pCBL- >Command, "GETE", 4); pCBL- >LnBufRow=StrLen; pCBL- >RowId=CodErr; pCBL- >PrzExe &= ~Q_ASYNC; inter(pCBL, NULL, NULL, NULL, Str); *((char*)Str + ((pCBL- >LnBufRow >StrLen)?(StrLen-1):(pCBL- >LnBufRow))) = 0; return pCBL- >CodErr; }
Пример использования команды
#include < stdio.h > #include < stdlib.h > #include < string.h > #include "inter.h" #include "exlib.h" #ifndef WINCE int main() #else int exgete() #endif { TCBL CBLconnect; L_CHAR Name_Pass[] = "SYSTEM/MANAGER8"; L_CHAR Node[] = " "; L_WORD Priority = 0; L_LONG PrzExe = M_EXCLUSIVE | M_BINARY; L_LONG Err; L_CHAR Str[256]; L_CHAR Query[] = "select ERROR NAME,FIRSTNAM,SEX from PERSON;"; /* ошибка */ memset(&CBLconnect,0,sizeof(TCBL)); Err=LinterOPEN(&CBLconnect, Name_Pass, Node, Priority, PrzExe); if (Err != NORMAL) PrintError(&CBLconnect); printf("Connect to RDBMS Linter\n"); LinterSLCT(&CBLconnect, PrzExe, Query, NULL, L_MAXWORD, NULL); Err=LinterGETE(&CBLconnect, CBLconnect.CodErr, Str, 255); if (Err != NORMAL) PrintError(&CBLconnect); printf("GETE: %s\n", Str); printf("End Example\n"); return 0; }