📄 ora_context.~cpp
字号:
int convert_Connected_Database;
int convert_display;
char convert_log_name[256] ;
protected:
char m_context_name[40];
int m_threadid;
char m_CurrentDir[256];
};
#endif
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sys\types.h>
#include "GlobalVar.h"
#include "mutex.h"
ora_context::ora_context(char* classname,int threadid)
{
strcpy(m_context_name,classname);
m_threadid = threadid;
GetCurrentDirectory(256,m_CurrentDir);
convert_Connected_Database= DATABASE_STATUS_DISCONNECTED;
convert_display=1;
sprintf(convert_log_name,"VNConvert_ERR");
convert_error_flag=0;
//???????need to declare error handler?
/* EXEC SQL ENABLE THREADS ; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 0;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
}
/* EXEC SQL WHENEVER SQLERROR DO on_error(); */
/* EXEC SQL CONTEXT ALLOCATE :m_context; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 1;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )20;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&m_context;
sqlstm.sqhstl[0] = (unsigned int )sizeof(void *);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) on_error();
}
}
ora_context::~ora_context()
{
//???????need to declare error handler?
/* EXEC SQL WHENEVER SQLERROR DO on_error(); */
/* EXEC SQL CONTEXT FREE :m_context; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 1;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.stmt = "";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )39;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)&m_context;
sqlstm.sqhstl[0] = (unsigned int )sizeof(void *);
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) on_error();
}
}
int ora_context::DisplayConvertInGUI(char *info)
{
if((convert_display==1)&&(info))//&&(g_SGIP_HWND)
{
// CString *msg = new CString(info);
// ::PostMessage(g_SGIP_HWND,WM_LOGMSG,(WPARAM)msg,0);
printf("%s\n",info);
}
return 0;
}
int ora_context::errorlogwrite (char *log_name,const char *data)
{
FILE* fp;
time_t timer;
struct tm *tblock;
char mytime[20];
char filename[256];
sprintf(filename,"%s\\%s%d.log",m_CurrentDir,log_name,m_threadid);
if((fp = fopen(filename,"a")) == NULL)
{
return 0;
}
timer = time(NULL);
tblock = localtime(&timer);
strftime(mytime, 20, "%Y:%m:%d %H:%M:%S", tblock);
fprintf(fp,"%s,线程%s --- %s\n",mytime,m_context_name,data);
fflush(fp);
fclose(fp);
return 1;
}
void ora_context::on_error(void)
{//when dealing error need not use context, see examples of oracle
char db_error[200];
memset(db_error,0,sizeof(db_error));
convert_error_flag = -1;
/* EXEC SQL CONTEXT USE :m_context; */
/* EXEC SQL WHENEVER SQLERROR CONTINUE; */
sprintf(db_error,"线程%s,Convert Oracle error detected : % .70s\n", m_context_name,sqlca.sqlerrm.sqlerrmc);
/* EXEC SQL ROLLBACK WORK RELEASE; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 1;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )58;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt(&m_context, &sqlctx, &sqlstm, &sqlfpn);
}
convert_Connected_Database = DATABASE_STATUS_DISCONNECTED;
DisplayConvertInGUI(db_error);
errorlogwrite(convert_log_name,db_error);
}
int ora_context::conn_db(char* user,char* pwd,char* conn)
{
/* EXEC SQL BEGIN DECLARE SECTION; */
char db_username[40];
char db_password[80];
char db_conn[80];
/* EXEC SQL END DECLARE SECTION; */
static mutex excluder;
//need not memset these variable?
strncpy(db_username,user,18);
strncpy(db_password,pwd,38);
strncpy(db_conn,conn,38);
/* EXEC SQL CONTEXT USE :m_context; */
convert_error_flag=0;
if(excluder.get_in()==SUCCESS)
{
/* EXEC SQL WHENEVER SQLERROR DO on_error(); */
/* EXEC SQL CONNECT :db_username IDENTIFIED BY :db_password USING :db_conn; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )73;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)db_username;
sqlstm.sqhstl[0] = (unsigned int )40;
sqlstm.sqhsts[0] = ( int )40;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)db_password;
sqlstm.sqhstl[1] = (unsigned int )80;
sqlstm.sqhsts[1] = ( int )80;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)db_conn;
sqlstm.sqhstl[2] = (unsigned int )80;
sqlstm.sqhsts[2] = ( int )80;
sqlstm.sqindv[2] = ( void *)0;
sqlstm.sqinds[2] = ( int )0;
sqlstm.sqharm[2] = (unsigned int )0;
sqlstm.sqadto[2] = (unsigned short )0;
sqlstm.sqtdso[2] = (unsigned short )0;
sqlstm.sqphsv = sqlstm.sqhstv;
sqlstm.sqphsl = sqlstm.sqhstl;
sqlstm.sqphss = sqlstm.sqhsts;
sqlstm.sqpind = sqlstm.sqindv;
sqlstm.sqpins = sqlstm.sqinds;
sqlstm.sqparm = sqlstm.sqharm;
sqlstm.sqparc = sqlstm.sqharc;
sqlstm.sqpadto = sqlstm.sqadto;
sqlstm.sqptdso = sqlstm.sqtdso;
sqlcxt(&m_context, &sqlctx, &sqlstm, &sqlfpn);
if (sqlca.sqlcode < 0) on_error();
}
excluder.get_out();
}
else
{
convert_error_flag=-1;
return -1;
}
if(convert_error_flag==-1) return -1;
else return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -