Закрыть канал

Назначение
 

Команда CLOS предназначена для освобождения главного или подчиненного канала связи (соединения или курсора) между приложением и ядром СУБД ЛИНТЕР.

Параметры вызова

inter(CBL, NULL, NULL, [CondBuf], NULL);

Входные данные

Входными данными является контрольный блок CBL.

В нем должны быть заполнены поля:

Имя поля Значение
NumChan Номер закрываемого канала
Command "CLOS"
Node Имя ЛИНТЕР-сервера
Выходные данные

Выходными данными является контрольный блок CBL.

В нем будут возвращены:

Имя поля Значение
CodErr Код завершения запроса к СУБД ЛИНТЕР
SysErr Код состояния ОС
Описание

Команда CLOS делает канал неактивным и освобождает все связанные с ним ресурсы. Закрытый канал может быть использован другим приложением либо повторно тем же самым приложением.

Курсоры могут закрываться независимо друг от друга.

При закрытии главного канала СУБД ЛИНТЕР автоматически закрывает все подчиненные каналы (курсоры).

Право на закрытие канала имеет только то приложение, которое открыло этот канал.

Если в момент закрытия канала в нем имеется незавершенная транзакция, то она будет завершена командой COMT автоматически.

Коды завершения
Код Описание
DupCurName Дубликат имени курсора
Пример формирования команды
#include < string.h >
#include < stdlib.h >
#include "inter.h"


L_LONG LinterCLOS(TCBL * pCBL)
  {
  memcpy(pCBL- >Command, "CLOS", 4);
  pCBL- >PrzExe &= ~Q_ASYNC;
  inter(pCBL, NULL, NULL, NULL, NULL);
  return pCBL- >CodErr;

  }
Пример использования команды
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "inter.h"
#include "exlib.h"

#ifndef WINCE
int    main()
#else
int    exclos()
#endif
  {
  TCBL    CBLconnect;
  L_CHAR    Name_Pass[] = "SYSTEM/MANAGER8";
  L_CHAR    Node[] = "        ";
  L_WORD    Priority = 0;
  L_LONG  PrzExe = M_EXCLUSIVE | Q_ENCODE | M_BINARY;
  L_LONG  Err;

  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 = LinterCLOS(&CBLconnect);
  if (Err != NORMAL)
    PrintError(&CBLconnect);
  printf("Close Channel\n");

  printf("End Example\n");

  return 0;
  }