ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.04.2021
Просмотров: 1869
Скачиваний: 3

!
!
П
ра
кт
ич
ес
ко
е
за
ня
ти
е
11.
Ос
но
вн
ые
пр
ие
м
ы
ис
по
ль
зо
ва
ни
я
Li
n
A
PI
!
61
E-
mai
l:
ma
rke
t@
rele
x.r
u
processing_error(lRet, 0, nCurs, 0,"Error
ExecuteDirect");
printf("Inserting [");
if (lRet = LINTER_ExecuteDirect(nCurs, "insert into
PRAC12_STUDENT values (1, 'Petrov A.I.', 5, 6);", 0,
NULL,NULL))
processing_error(lRet, 0, nCurs, 0,"Error
ExecuteDirect");
printf(".");
if (lRet = LINTER_ExecuteDirect(nCurs, "insert into
PRAC12_STUDENT values (2, 'Voronin M.V.', 2, 1);", 0,
NULL,NULL))
processing_error(lRet, 0, nCurs, 0,"Error
ExecuteDirect");
printf(".");
if (lRet = LINTER_ExecuteDirect(nCurs, "insert into
PRAC12_STUDENT values (3, 'Dzuba R.A.', 3, 4);", 0,
NULL,NULL))
processing_error(lRet, 0, nCurs, 0,"Error
ExecuteDirect");
printf(".");
printf("]\n");
printf("Cursor closing\n");
if (lRet = LINTER_CloseCursor(nCurs))
processing_error(lRet, 0, nCurs, 0,"Error CloseCursor");
printf("Connection closing\n");
if (lRet = LINTER_CloseConnect(nConn))
processing_error(lRet, nConn, 0, 0, "ERROR
CloseConnect");
printf("LINTER_CloseAPI\n");

!
62
П
ра
кт
ич
ес
ко
е
за
ня
ти
е
11.
Ос
но
вн
ые
пр
ие
м
ы
ис
по
ль
зо
ва
ни
я
Li
n
A
PI
!
!
E-
mai
l:
ma
rke
t@
rele
x.r
u
LINTER_CloseAPI(); /* Free library resource */
printf("Done.\n");
return 0;
/* End */
}
Скомпилируем
этот
файл
:
gcc prac12_e1.c -I /export/home/lindesk/linter5923/linter/
intlib/ -llinapi -lsocket -lm -L /export/home/lindesk/
linter5923/linter/intlib/ -o prac12_e1
Задача
1.
(
Студенты
выполняют
самостоятельно
)
Модифицировать
данный
пример
таким
образом
,
чтобы
входные
данные
задавались
пользователем
,
а
первичный
ключ
определялся
приложением
,
как
минимальный
из
положительных
чисел
.
11.3.
Использование
параметризованных
запросов
Ниже
представлен
пример
(prac12_e2.c),
в
котором
консольное
приложение
позволяет
пользователю
ввести
маску
для
поиска
данных
в
таблице
,
и
,
используя
оператор
,
выполняет
параметризированный
запрос
.
#include <stdio.h>
#include <stdlib.h>
#include "linapi.h"
#if defined(VXWORKS) /* 05.03.02 */
#include "vxstart.h"
#endif
#ifdef _BCPP_
extern unsigned _stklen = 16383;
#endif
/* function for error processing for LinAPI */
void processing_error(LONG ret_cod,
WORD con_id,

!
!
П
ра
кт
ич
ес
ко
е
за
ня
ти
е
11.
Ос
но
вн
ые
пр
ие
м
ы
ис
по
ль
зо
ва
ни
я
Li
n
A
PI
!
63
E-
mai
l:
ma
rke
t@
rele
x.r
u
WORD cur_id,
WORD stmt_id,
char * message)
{
LONG lRet;
LONG apierr = 0, error = 0, syserr = 0;
if ( ret_cod == LINAPI_ERROR )
{
/* getting error codes for required object */
if (lRet = LINTER_Error(con_id, cur_id, stmt_id,
&apierr, &error, &syserr, NULL, NULL))
printf("diagnostic error %ld\n",lRet);
else
{
printf("ApiErr = %ld, LinErr = %ld, SysErr = %ld\n%s
\n",
apierr, error, syserr, message);
if ( (apierr == eLinterError) && error > 2000 && error
< 3000)
{
/* getting string and position if syntax error is */
printf("Syntax error : line %d, position %d\n",
(short)syserr, *(short*)((char*)&syserr +2));
}
}
LINTER_CloseAPI(); /* Free library resource */
exit(1);
}
else
printf("Return code = %ld\n",ret_cod);

!
64
П
ра
кт
ич
ес
ко
е
за
ня
ти
е
11.
Ос
но
вн
ые
пр
ие
м
ы
ис
по
ль
зо
ва
ни
я
Li
n
A
PI
!
!
E-
mai
l:
ma
rke
t@
rele
x.r
u
}
#define MAXSTRLEN 100
#if defined(VXWORKS) /* 05.03.02 */
MainStart(apidata, 32*1024, UninitLinterClient)
#else
int main(void)
#endif
{
WORD nConn; /* connection identifier */
WORD nCurs; /* cursor identifier */
WORD nStmt; /* statement identifier */
LONG lRet; /* return code */
char szMask[MAXSTRLEN] = "Y";
char nullInd[4];
nullInd[0] = 0;
LONG parLen = MAXSTRLEN;
LONG recCount;
LONG realLen = 0;
int i = 0;
/* Establish connection */
printf("\nConnect\n");
if (lRet = LINTER_Connect("SYSTEM", 0, "MANAGER", 0,
NULL, mAutocommit, &nConn))
processing_error(lRet, nConn, 0, 0, "ERROR
Linter_Connect");
/* cursor opening for query processing */
printf("Open cursor\n");

!
!
П
ра
кт
ич
ес
ко
е
за
ня
ти
е
11.
Ос
но
вн
ые
пр
ие
м
ы
ис
по
ль
зо
ва
ни
я
Li
n
A
PI
!
65
E-
mai
l:
ma
rke
t@
rele
x.r
u
if (lRet = LINTER_OpenCursor(nConn, &nCurs, NULL, 0,
mAutocommit))
processing_error(lRet, nConn, 0, 0, "Error open
cursor");
printf("Create statement\n");
if (lRet = LINTER_CreateStatement(nCurs, "select * from
PRAC12_STUDENT where FIO like :S;", 0, &nStmt))
processing_error(lRet, 0, nCurs, 0,"Error
CreateStatement");
printf("Bind parameter\n");
if (lRet = LINTER_BindParameter(nCurs, nStmt, 1, 0, 0,
szMask, 1, 1, tString, 0, &parLen))
processing_error(lRet, 0, nCurs, 0,"Error
BindParameter");
while (!strcmp(szMask, "Y") || !strcmp(szMask, "y"))
{
printf("Input mask for student name \n");
gets(szMask);
parLen = strlen(szMask) + 1;
printf("Mask is %s, It's lenght is %d\n", szMask,
parLen);
printf("Execute statement \n", nStmt);
if (lRet = LINTER_ExecuteStatement(nCurs, nStmt, 0, 0,
0))
processing_error(lRet, 0, nCurs, 0,"Error
ExecuteStatement");
realLen = sizeof(recCount);