Проектирование схемы БД в среде ERwin. Проблема избыточности данных. Проблема обновления данных. Проблема удаления данных., страница 26

sword open(connection *conn_param);     sword close();     sword parse(const text *stmt)

{ return (oparse(&cda, (text *)stmt, (sb4)-1, 

DEFER_PARSE, (ub4) VERSION_7)); }

/* bind an input variable */

sword bind_by_position(sword sqlvnum, ub1 *progvar, sword progvarlen,                             sword datatype, sword scale, sb2 *indicator)

{ return (obndrn(&cda, sqlvnum, progvar, progvarlen, datatype, scale,                       indicator, (text *)0, -1, -1)); }

/* define an output variable */

sword define_by_position(sword position, ub1 *buf, sword bufl, 

sword datatype, sword scale, sb2 *indicator,                                ub2 *rlen, ub2 *rcode)

{ return (odefin(&cda, position, buf, bufl, datatype, scale, indicator,

(text *)0, -1, -1, rlen, rcode)); }

sword describe(sword position, sb4 *dbsize, sb2 *dbtype, sb1 *cbuf,                 sb4 *cbufl, sb4 *dsize, sb2 *prec, sb2 *scale, sb2 *nullok)

{ return (odescr(&cda, position, dbsize, dbtype, cbuf, cbufl, dsize,                        prec, scale, nullok)); }     sword execute()       { return (oexec(&cda)); }     sword fetch()

{ return (ofetch(&cda)); }     sword get_error_code() const       { return (cda.rc); }

void display_error( FILE* file) const;   private:

Cda_Def cda;     connection *conn;     enum cursor_state

{

not_opened,       opened

};

cursor_state state;

};

/*

* Error number macros

*/

#define CONERR_ALRCON -1                                        /* already connected */ 

#define CONERR_NOTCON -2                                            /* not connected */ 

#define CURERR_ALROPN -3       /* cursor is already open */ #define CURERR_NOTOPN -4         /* cursor is not opened */.

Приложение 4. Пример файлов очереди и CDR-файла.

Листинг файла rq.txt.

CDR20001.cdr

CDR20002.cdr

CDR20003.cdr 

CDR20004.cdr

CDR20005.cdr

CDR20006.cdr 

CDR20007.cdr

CDR20008.cdr 

Листинг файла CDR20001.cdr.

20001      10022004105523I1    79031927464 79047687000 21

20001     10022005105545I3    79031927464 79047687000 21

20001      10022005105555I5    79031927463 79047687001 21

20001      10022005113455I10  79031927463 79047687002 21

Приложение 5. Код утилиты для формирования pin-кодов и выгрузки  информации о картах экспресс-оплаты

Листинг файла pin.cpp.

#include<stdio.h>

#include<iostream.h>

#include<math.h>

#include<stdlib.h>

#include <conio.h>

#include <windows.h>

extern "C"

{

#include "string.h"

#include "oratypes.h"

#include "ocidfn.h"

#include "ocidem.h"

#include "ociapr.h"

}

#define  DEFER_PARSE        1

#define  NATIVE             1

#define  VERSION_7          2

text *username; text *password; text *server;

text *insert = (text *) "INSERT INTO cards(CARD_ID, PIN, NOMINAL) VALUES

(SQ$CARDS_N.NEXTVAL, :pin, 

:nominal)"; Lda_Def lda;

ub4     hda[HDA_SIZE/sizeof(ub4)]; Cda_Def cda1;

int start_point = 1; float mask; float mask1; int result[100];

int pin_num;  //число карточек int num=12; //число знаков в PIN'е char qqq[2];

//---------------------

int category=0; //разряд числа mask struct PIN_card

{

char PIN_code[100];

int nominal;        // номинал карточки в выбранной валюте              int currency_code;  //код валюты номинала карточки

}; void main()

{

// ------------ считывание пароля с реестра ------------------------

HKEY hk;

DWORD dw;

DWORD dw2;

DWORD dw3;

char un[80];  char pwd[80];  char srv[80];  strcpy(un, "");  strcpy(pwd, "");  strcpy(srv, "");

RegCreateKey(HKEY_LOCAL_MACHINE,

"SOFTWARE\\Kate\\PIN_generator\\dbconnect", &hk);

if (RegQueryValueEx(hk, "Username", 0, 0, (LPBYTE) un, &dw))                       

{

RegSetValueEx(hk, "Username", 0, REG_EXPAND_SZ, (LPBYTE) un, strlen(un)+1);

}

if (RegQueryValueEx(hk, "Password", 0, 0, (LPBYTE) pwd, &dw2))