ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.04.2021

Просмотров: 1869

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

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"); 


background image

!

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, 


background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

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); 


background image

!

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"); 


background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

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);