Дать параметры курсора
Назначение
Команда
FCUR
предназначена для получения информации о заданном курсоре.
Параметры вызова
inter(CBL, VarBuf, NULL, [CondBuf], RowBuf);
Входные данные
Входными данными являются:
-
контрольный блок
CBL
; -
буфер описания параметров
VarBuf
.
В контрольном блоке должны быть заполнены поля:
Имя поля | Значение | |
---|---|---|
NumChan
| Номер канала | |
Command
|
"FCUR"
| |
LnBufRow
| Длина буфера выборки данных | |
Node
| Имя ЛИНТЕР-сервера |
Буфер описания параметров
VarBuf
должен содержать имя курсора (не больше MAX_ID_LEN символов).
Примечание
Строка имени курсора в
VarBuf
должна заканчиваться двоичным нулем.
Выходные данные
Выходными данными являются:
-
контрольный блок
CBL
; -
буфер выборки данных
RowBuf
.
В контрольном блоке будут возвращены:
Имя поля | Значение | |
---|---|---|
CodErr
| Код завершения запроса к СУБД ЛИНТЕР | |
LnBufRow
| Фактическая длина буфера выборки данных | |
SysErr
| Код состояния ОС |
Информация в буфере выборки данных
RowBuf
будет представлена в следующем виде:
struct FCUR_OUT { L_WORD Channel; L_BYTE Updatable; L_BYTE Process; L_LONG AnsCnt; };
В полях буфера выборки данных будет содержаться:
Имя поля | Значение | |
---|---|---|
Channel
| Номер канала, соответствующий заданному курсору | |
Updatable
| Признак обновляемости курсора: 1 – курсор обновляемый, 0 – не обновляемый | |
Process
| Идентификатор текущего процесса, выполняемого в канале, соответствующем курсору | |
AnsCnt
| Количество записей в заданном курсоре, если текущим процессом является выполнение SELECT-запроса, в противном случае значение не определено |
Описание
Команда
FCUR
канальная. Она может быть подана только по главному родительскому
каналу или по любому подканалу, подчиненному этому главному.
Если в качестве имени курсора задана пустая строка (нулевой длины
или заполненная пробелами), то
FCUR
возвращает
описание того канала, по которому она подана.
Коды завершения
Код | Описание | |
---|---|---|
NORMAL | Нормальное завершение | |
SMALLBUFKOR | Недостаточный размер буфера выборки данных | |
EORR | Указанное имя курсора не найдено или команда была подана по недопустимому каналу | |
ERRTRANSLSTR | Ошибка перекодирования имени курсора |
Пример формирования команды
#include < string.h > #include < stdlib.h > #include "inter.h" L_LONG LinterFCUR(TCBL * pCBL, L_CHAR * NameCur, FCUR_OUT * pOut) { memcpy(pCBL- >Command, "FCUR", 4); pCBL- >LnBufRow = sizeof(FCUR_OUT); pCBL- >PrzExe &= ~Q_ASYNC; inter(pCBL, NameCur, NULL, NULL, pOut); return pCBL- >CodErr; }
Пример использования команды
#include < stdio.h > #include < stdlib.h > #include < string.h > #include "inter.h" #include "exlib.h" #ifndef WINCE int main() #else int exfcur() #endif { TCBL CBLconnect, CBL1; L_CHAR Name_Pass[] = "SYSTEM/MANAGER8"; L_CHAR Node[] = " "; L_CHAR NameCur[] = "Cursor1"; L_WORD Priority = 0; L_LONG PrzExe = M_EXCLUSIVE | Q_ENCODE | M_BINARY; L_LONG Err; FCUR_OUT FCUR_Out; memset(&CBLconnect,0,sizeof(TCBL)); Err = LinterOPEN(&CBLconnect, Name_Pass, Node, Priority, PrzExe); if (Err != NORMAL) PrintError(&CBLconnect); printf("Connect to RDBMS Linter\n"); Err = LinterOCUR(&CBL1, CBLconnect.NumChan, Priority, PrzExe); if (Err != NORMAL) PrintError(&CBL1); printf("Open Channel\n"); Err = LinterSETO(&CBL1, NameCur); if (Err != NORMAL) PrintError(&CBL1); printf("Set Name for Channel\n"); Err = LinterFCUR(&CBLconnect, NameCur, &FCUR_Out); if (Err != NORMAL) PrintError(&CBLconnect); printf("FCUR:\n"); printf("\tChannel=%d\n\tUpdatable=%hd\n\tProcess=%hd\n\tAnsCnt=%ld\n", FCUR_Out.Channel, FCUR_Out.Updatable, FCUR_Out.Process, FCUR_Out.AnsCnt); printf("End Example\n"); return 0; }