⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.cpp

📁 中间件编程,该程序用于传输客户端数据到服务器,可运行于WINDOWS2000,2003,XP,98等系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/***************************************************************
**	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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -