Дать параметры курсора

Назначение
 

Команда 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;
  }