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

#define UploadN_pos (10)  // номер выгрузки

#define fd_pos (14)       

// время совершения звонка

#define Direct_pos (1) либо O

// направление (вх\исх), может принимать значения I

#define dur_pos (5) 

//  длительность звонка

#define Anum_pos (12)

// номер отправителя

#define Bnum_pos (12)

// номер получателя

#define servicekey_pos (2) // код услуги в скобках указаны размеры полей (количество символов в текстовом файле CDR) символа перехода на нов. строку в конце файла быть не должно.

Приложение 3. Код утилиты для выгрузки CDR-файлов

Листинг файла CDEMO6.CPP.

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

#include <string.h>

#include <conio.h>

#include <windows.h> #include <time.h> extern "C"

{

#include "string.h"

#include "oratypes.h"

#include "ocidfn.h"

#include "ocidem.h"

#include "ociapr.h"

}

/* exit status upon failure */

#define  DEFER_PARSE        1

#define  NATIVE             1

#define  VERSION_7          2

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

text *insert = (text *) "INSERT INTO calls(N, UPLOADN, FD, DIRECT, DURATION,

ANUM, BNUM, SK) VALUES (SQ$CALLS_N.NEXTVAL, :uploadn, to_date(:fd,

'ddmmyyyyhh24miss'), :direct, :duration, :anum, :bnum, :sk)"; // Define an LDA, a HDA,  and two cursors.  Lda_Def lda;

ub4     hda[HDA_SIZE/sizeof(ub4)]; Cda_Def cda1; void err_report(); void do_exit(); void myfflush();

// определяем формат CDR-файла с числом символов для каждого параметра

#define UploadN_pos (10)

#define fd_pos (14)  

#define Direct_pos (1)

#define dur_pos (5)

#define Anum_pos (12)

#define Bnum_pos (12) #define servicekey_pos (2) struct CDR_record

{

char uploadN[11];       // номер выгрузки     char fd[15];        // дата звонка      char Direct[3];            // направление оказания услуги          char dur[6];                 // длительность звонка             char Anum[13];                      // номер отправителя  char Bnum[13];                       // номер получателя

char servicekey[3]; // код услуги

}; int main()

{

char CDRname[128]; char CDRnameTmp[128];

int len = 12;  // длина имени CDR-файла в символах char qqq[2]; int count1 = 10; int count = 0;

int i=0;         // счетчик записей в файле очереди int CDRNum = 0;  // количество записей в файле очереди

char tmpbuf[128];

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

HKEY hk;

HKEY hk1;

DWORD dw;

DWORD dw2;

DWORD dw3;

DWORD dw4;

DWORD dw5;

char un[80];  char pwd[80];  char srv[80];   char FileNameRQ[80];  char FileNameRQTmp[] = "rqtmp.txt";  strcpy(FileNameRQ, "");      strcpy(un, "");  strcpy(pwd, "");  strcpy(srv, "");

RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Kate\\Charger\\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))                      

{

RegSetValueEx(hk, "Password", 0, REG_EXPAND_SZ, (LPBYTE) pwd, strlen(pwd)+1);

}

if (RegQueryValueEx(hk, "Server", 0, 0, (LPBYTE) srv, &dw3))                         {

RegSetValueEx(hk, "Server", 0, REG_EXPAND_SZ, (LPBYTE) srv, strlen(srv)+1);

}

RegCloseKey(hk); 

RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Kate\\Charger", &hk1);

if (RegQueryValueEx(hk, "RQfile", 0, 0, (LPBYTE) FileNameRQ, &dw4))                      

{

RegSetValueEx(hk1, "RQfile", 0, REG_EXPAND_SZ, (LPBYTE) FileNameRQ, strlen(FileNameRQ)+1);

}