?? database.cpp
字號:
/***************************************************************
** database.cpp: The database operation function
**
** zhoushijie
**
** 2000/2
****************************************************************/
#include "stdafx.h"
//#include "database.h"
BindFieldInfo m_bindfieldinfo[20];
OUTRECORDS m_getrecord[1];
CBZSFBZDY m_sfbz;
CBZSFYGXX m_sfyz;
CBZRKZBHB m_sfzz;
CBCDSQMS m_sqms;
CBZSFYPBB m_sfypb;
CBZSFZYZZ m_zysfz;
CBZSFCWSJ m_cwsj;
CBZBCDMDY m_bcdy;
CBZZYZHZZ m_zyzfz;
CBZSFSJDY m_sfsj;
CBZYZLJBZ m_yzljb;
CBZYZZPXB m_yzzxh;
CBZCLYHXX m_bzyh;
CBZKHMDXX m_bzkh;
CBZXFLDYB m_xfdy;
CBZCZYHXX m_czyh;
CCENTEMP m_centemp;
int tyear,tmon,tday,thour,tmin,tsec;
int total_fee1,total_fee2,total_fee3,total_fee4,total_fee5;
int ntotal_fee1,ntotal_fee2,ntotal_fee3,ntotal_fee4,ntotal_fee5;
char ThisToll[5];
int shiftcount = 0;
char g_cwsj[6];
/*
**--------------------------------------------------------------------
** opendbs():open the database with the databaseID,and connetion string
** through the standar ODBC
**--------------------------------------------------------------------
*/
int OpenDBS( DatabaseID *m_baseid,ConnString m_constring)
{
SQLRETURN retcode;
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_baseid->henv);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLSetEnvAttr(m_baseid->henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
/* Allocate connection handle */
retcode = SQLAllocHandle(SQL_HANDLE_DBC, m_baseid->henv, &m_baseid->hdbc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
/* Set login timeout to 5 seconds.*/
SQLSetConnectAttr(m_baseid->hdbc,5 ,(void*)SQL_LOGIN_TIMEOUT, 0);
/*Connect to data source */
retcode = SQLConnect(m_baseid->hdbc, (SQLCHAR*) m_constring.m_servername, SQL_NTS,
(SQLCHAR*) m_constring.m_uid, SQL_NTS,
(SQLCHAR*) m_constring.m_pwd, SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("the DBA opened success!\n");
return 0;
}
else
{
printf("open DBA failed!\n");
return 1;
}
}
else
printf("Allocate connection handle failed!\n");
}
else
printf("Set the ODBC version environment attribute failed!\n");
}
else
printf("Allocate environment handle failed!\n");
return 1;
}
/*
--------------------------------------------------------
closedbs():close the opened database
--------------------------------------------------------
*/
void CloseDBS(DatabaseID *m_baseid)
{
if(m_baseid->hdbc)
{
SQLDisconnect(m_baseid->hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, m_baseid->hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, m_baseid->henv);
}
return ;
}
/*
---------------------------------------------------------------------------
selectRecord():select fieldsinfo from m_table where condition=m_condition
---------------------------------------------------------------------------
*/
int SelectRecord(DatabaseID *m_baseid, TABLE_FIELDSINFO m_fieldsinfo, char *m_tablename,char *m_condition)
{
SQLRETURN retcode;
char TempFieldVal[20];
memset(TempFieldVal,0,sizeof(TempFieldVal));
unsigned short j;
if(strlen(m_tablename) <1 )
return -1;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, m_baseid->hdbc, &m_baseid->hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
char m_sql[]="select ";
char m_sql2[200],m_fields[101];
memset(m_fields,0,sizeof(m_fields));
/*
----------------------------------------------
Form the selected fields string
----------------------------------------------
*/
for(j=0;j<m_fieldsinfo.fieldcount;j++)
if(j==0)
sprintf(m_fields,"%s",m_fieldsinfo.m_fieldinfo[j].fieldname);
else
sprintf(m_fields,"%s,%s",m_fields,m_fieldsinfo.m_fieldinfo[j].fieldname);
/*
--------------------------------------------------------
from the select clause(with or withour where condition)
--------------------------------------------------------
*/
if(strlen(m_condition) >2)
sprintf(m_sql2,"%s %s from %s where %s ",m_sql,m_fields,m_tablename,m_condition);
else
sprintf(m_sql2,"%s %s from %s",m_sql,m_fields,m_tablename);
SQLINTEGER m_outlen[20];
int InfactRecNO=0;
retcode=SQLPrepare(m_baseid->hstmt,(unsigned char *)m_sql2,strlen(m_sql2));
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode=SQLExecDirect(m_baseid->hstmt,(unsigned char *)m_sql2,strlen(m_sql2));
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
for(j=1;j<=m_fieldsinfo.fieldcount;j++)
{
switch(m_fieldsinfo.m_fieldinfo[j-1].fieldtype)
{
case MSQL_UNKNOWN_TYPE:
break;
case MSQL_CHAR:
memset(m_bindfieldinfo[j-1].m_fieldvalue1,'\0',sizeof(m_bindfieldinfo[j-1].m_fieldvalue1));
m_bindfieldinfo[j-1].m_fieldtype=MSQL_CHAR;
SQLBindCol(m_baseid->hstmt, j,MSQL_CHAR, m_bindfieldinfo[j-1].m_fieldvalue1,sizeof(m_fieldsinfo.m_fieldinfo[j-1].fieldsize), &m_outlen[j-1]);
break;
case MSQL_NUMERIC:
break;
case MSQL_DECIMAL:
break;
case MSQL_INTEGER:
m_bindfieldinfo[j-1].m_fieldtype=MSQL_INTEGER;
SQLBindCol(m_baseid->hstmt, j,MSQL_INTEGER, &m_bindfieldinfo[j-1].m_fieldvalue2,0, &m_outlen[j-1]);
break;
case MSQL_SMALLINT:
break;
case MSQL_FLOAT:
break;
case MSQL_REAL:
m_bindfieldinfo[j-1].m_fieldtype=MSQL_REAL;
SQLBindCol(m_baseid->hstmt, j,MSQL_REAL, &m_bindfieldinfo[j-1].m_fieldvalue3,0, &m_outlen[j-1]);
break;
case MSQL_DOUBLE:
break;
case MSQL_DATETIME:
break;
case MSQL_VARCHAR:
break;
default :
break;
}//end switch
}//end for
int m_recordover;
char lll[5000];
m_getrecord[0].recordscontent=lll;
while(InfactRecNO<=MAX_OUTRES)
{
retcode = SQLFetch(m_baseid->hstmt);
m_recordover=1;
InfactRecNO++;
m_recordover=1;
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
for(j=0;j<m_fieldsinfo.fieldcount;j++)
{
if(j !=0)
m_recordover=0;
switch(m_bindfieldinfo[j].m_fieldtype)
{
case MSQL_CHAR:
memset(TempFieldVal,0,sizeof(TempFieldVal));
memset(TempFieldVal,32,m_fieldsinfo.m_fieldinfo[j].fieldsize+2);
sprintf(TempFieldVal,"'%s'",m_bindfieldinfo[j].m_fieldvalue1);
if(j==0 && InfactRecNO==1)
sprintf(m_getrecord[0].recordscontent,"%s",TempFieldVal);
else if(m_recordover ==0)
sprintf(m_getrecord[0].recordscontent,"%s,%s",m_getrecord[0].recordscontent,TempFieldVal);
else
sprintf(m_getrecord[0].recordscontent,"%s%s",m_getrecord[0].recordscontent,TempFieldVal);
break;
case MSQL_INTEGER:
memset(TempFieldVal,0,sizeof(TempFieldVal));
memset(TempFieldVal,32,m_fieldsinfo.m_fieldinfo[j].fieldsize);
sprintf(TempFieldVal,"%4d",m_bindfieldinfo[j].m_fieldvalue2);
if(j==0 && InfactRecNO==1)
sprintf(m_getrecord[0].recordscontent,"%s",TempFieldVal);
else
if(m_recordover ==0)
sprintf(m_getrecord[0].recordscontent,"%s,%s",m_getrecord[0].recordscontent,TempFieldVal);
else
sprintf(m_getrecord[0].recordscontent,"%s%s",m_getrecord[0].recordscontent,TempFieldVal);
break;
case MSQL_REAL:
memset(TempFieldVal,0,sizeof(TempFieldVal));
memset(TempFieldVal,32,m_fieldsinfo.m_fieldinfo[j].fieldsize);
sprintf(TempFieldVal,"%4f",m_bindfieldinfo[j].m_fieldvalue3);
if(j==0 && InfactRecNO==1)
sprintf(m_getrecord[0].recordscontent,"%s",TempFieldVal);
else
if(m_recordover ==0)
sprintf(m_getrecord[0].recordscontent,"%s,%s",m_getrecord[0].recordscontent,TempFieldVal);
else
sprintf(m_getrecord[0].recordscontent,"%s%s",m_getrecord[0].recordscontent,TempFieldVal);
break;
default :
printf("not find a fit of the field data_type\n");
break;
}
m_recordover=1;
}
}
else
{
printf("the record fetched overed\n");
SQLFreeHandle(SQL_HANDLE_STMT, m_baseid->hstmt);
m_getrecord[0].totalcount=InfactRecNO -1;
m_getrecord[0].recordlen=strlen(m_getrecord[0].recordscontent)/m_getrecord[0].totalcount;
return 0;
}
}
}
}
printf("select not success\n");
SQLFreeHandle(SQL_HANDLE_STMT, m_baseid->hstmt);
}
return 1;
}
/*
-----------------------------------------------------------------------
SelectSQL():select m_fileds from m_tablename where conditon=m_condition
-----------------------------------------------------------------------
*/
int SelectSQL(DatabaseID *m_baseid,char *m_fields,char * m_tablename,char m_condition[])
{
SQLRETURN retcode;
int j;
if(strlen(m_tablename) <1 ||strlen(m_fields)<1)
return -1;
retcode = SQLAllocHandle(SQL_HANDLE_STMT, m_baseid->hdbc, &m_baseid->hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
char m_sql[]="select" ;
char m_sql2[100];
memset(m_sql2,0,sizeof(m_sql2));
if(strlen(m_condition) >3)
sprintf(m_sql2,"%s %s from %s where rksjz=(select max(rksjz) from cdrkcljl where pkhmz ='%s') ",m_sql,m_fields,m_tablename,m_condition);
else
{
SQLFreeHandle(SQL_HANDLE_STMT, m_baseid->hstmt);
memset(m_condition,0,sizeof(m_condition));
return 1;
}
SQLCHAR m_rkzbh[5],m_rksjz[20],m_cxdmz[2],m_cldmz[2],m_pkdmz[2];
memset(m_rkzbh,0,sizeof(m_rkzbh));
memset(m_rksjz,0,sizeof(m_rkzbh));
memset(m_cxdmz,0,sizeof(m_rkzbh));
memset(m_cldmz,0,sizeof(m_rkzbh));
memset(m_pkdmz,0,sizeof(m_rkzbh));
SQLINTEGER m_rkzbhlen,m_rksjzlen,m_cxdmzlen,m_cldmzlen,m_pkdmzlen;
retcode=SQLPrepare(m_baseid->hstmt,(unsigned char *)m_sql2,strlen(m_sql2));
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode=SQLExecDirect(m_baseid->hstmt,(unsigned char *)m_sql2,strlen(m_sql2));
if(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode=SQLBindCol(m_baseid->hstmt, 1, SQL_C_CHAR, m_rkzbh, 5, &m_rkzbhlen);
retcode=SQLBindCol(m_baseid->hstmt, 2, SQL_C_CHAR, m_rksjz, 20, &m_rksjzlen);
retcode=SQLBindCol(m_baseid->hstmt, 3, SQL_C_CHAR, m_cxdmz, 2, &m_cxdmzlen);
retcode=SQLBindCol(m_baseid->hstmt, 4, SQL_C_CHAR, m_cldmz, 2, &m_cldmzlen);
retcode=SQLBindCol(m_baseid->hstmt, 5, SQL_C_CHAR, m_pkdmz, 2, &m_pkdmzlen);
for(j=1;j<2;j++)
{
retcode = SQLFetch(m_baseid->hstmt);
if (retcode == SQL_SUCCESS || SQL_SUCCESS_WITH_INFO )
{
memset(m_condition,0,sizeof(m_condition));
if(strlen((char *)m_rkzbh)>1)
sprintf(m_condition,"0%4s%20s%1s%1s%1s",m_rkzbh,m_rksjz,m_cxdmz,m_cldmz,m_pkdmz);
else
sprintf(m_condition,"1");
SQLFreeHandle(SQL_HANDLE_STMT, m_baseid->hstmt);
return 0;
}
else if(retcode ==SQL_ERROR)
{
SQLFreeHandle(SQL_HANDLE_STMT, m_baseid->hstmt);
memset(m_condition,0,sizeof(m_condition));
return 1;
}
else
{
printf("the record fetched overed\n");
memset(m_condition,0,sizeof(m_condition));
sprintf(m_condition,"1");
SQLFreeHandle(SQL_HANDLE_STMT, m_baseid->hstmt);
return 0;
}
}
}
}
printf("select not success\n");
SQLFreeHandle(SQL_HANDLE_STMT, m_baseid->hstmt);
}
memset(m_condition,0,sizeof(m_condition));
return 1;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -