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

📄 sqlsetx.cpp

📁 读取oracle的blob数据. 数据库连接以ODBC连接.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	m_fld_ptr[m_col] = (void *) &value; 
	m_fld_c_type[m_col] = SQL_TINYINT;
	m_col++;

}

void CSQLSetX::SetFX_Int(LPCTSTR szName, int& value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value; 
	m_fld_c_type[m_col] = SQL_INTEGER;
	m_col++;
}

void CSQLSetX::SetFX_Long(LPCTSTR szName, long& value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value;
	m_fld_c_type[m_col] =  SQL_INTEGER ;
	m_col++;
}
void CSQLSetX::SetFX_Real(LPCTSTR szName, float & value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value;
	m_fld_c_type[m_col] = SQL_REAL;
	m_col++;
}
void CSQLSetX::SetFX_Double(LPCTSTR szName, double & value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value;
	m_fld_c_type[m_col] = SQL_DOUBLE;
	m_col++;
}
void CSQLSetX::SetFX_Date(LPCTSTR szName, CTime& value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value; 
	m_fld_c_type[m_col] = SQL_TIMESTAMP;
	m_col++;
}
void CSQLSetX::SetFX_Date(LPCTSTR szName,	TIMESTAMP_STRUCT& value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value; 
	m_fld_c_type[m_col] = SQL_TIMESTAMP;
	m_col++;

}

void CSQLSetX::SetFX_Text(LPCTSTR szName,	char * value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) value; 
	m_fld_c_type[m_col] = SQL_VARCHAR;
	m_col++;
}

void CSQLSetX::SetFX_Text(LPCTSTR szName,	CString& value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value; 
	m_fld_c_type[m_col] = SQL_VARCHAR;
	m_col++;
}

void CSQLSetX::SetFX_Text(LPCTSTR szName,	LPCTSTR value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *)value; 
	m_fld_c_type[m_col] = SQL_CHAR;
	m_col++;
}

void CSQLSetX::SetFX_Binary(LPCTSTR szName, CMyByteArray& value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value; 
	m_fld_c_type[m_col] =  SQL_LONGVARBINARY ;
	m_col++;
}

void CSQLSetX::SetFX_LongBinary(LPCTSTR szName,	CLongBinary& value)
{
	if (!SetFX_Test(szName)) return;

	strcpy(m_fld_name[m_col], szName);
	m_fld_ptr[m_col] = (void *) &value; 
	m_fld_c_type[m_col] = SQL_LONGVARBINARY;
	m_col++;

}


//到用户区:
BOOL CSQLSetX::to_user_Bool(int i)
{
	BOOL *op = (BOOL*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		*op = 0;	return TRUE;
	}
	switch (m_Type[i])
	{
		case	SQL_BIT:		*op = (BOOL)*(BOOL   *)dataptr;	break;
		case	SQL_TINYINT:	*op = (BOOL)*(BYTE   *)dataptr;	break;
		case	SQL_SMALLINT:	*op = (BOOL)*(short  *)dataptr;	break;
		case	SQL_INTEGER:	*op = (BOOL)*(long   *)dataptr;	break;
		case	SQL_REAL:		*op = (BOOL)*(float  *)dataptr; break;

		case	SQL_FLOAT:
		case	SQL_DOUBLE:		*op = (BOOL)*(double *)dataptr; break;
		
		case	SQL_DATE:		*op = *((BOOL*)(DATE_STRUCT      *)dataptr);	break;
		case	SQL_TIME:		*op = *((BOOL*)(TIME_STRUCT      *)dataptr);	break;
		case	SQL_TIMESTAMP:	*op = *((BOOL*)(TIMESTAMP_STRUCT *)dataptr);	break;

		case	SQL_GUID:
		case    SQL_SQL_NCHAR:
		case    SQL_SQL_NVARCHAR:
		case	SQL_VARCHAR:
		case	SQL_CHAR:
		case	SQL_DECIMAL:
		case	SQL_NUMERIC:	*op = (BOOL)atol((char*)dataptr);break;

		case    SQL_SQL_NTEXT:
		case	SQL_BINARY:
		case	SQL_VARBINARY:
		case	SQL_LONGVARCHAR:
		case	SQL_LONGVARBINARY:
		case	SQL_ORA_LOB:
			cbData  = to_user_Get_data(i, bit, 128);
			if (cbData)	*op = *((BOOL*)bit);
			else *op = 0;
			break;

		default:
			break;
	}
	*op = (*op & 0x00ff);	
	return TRUE;
}


BOOL CSQLSetX::to_user_Byte(int i)
{
	BYTE *op = (BYTE*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		*op = 0;	return TRUE;
	}

	switch (m_Type[i])
	{
		case	SQL_BIT:		*op = (BYTE)*(BOOL   *)dataptr;	break;
		case	SQL_TINYINT:	*op = (BYTE)*(BYTE   *)dataptr;	break;
		case	SQL_SMALLINT:	*op = (BYTE)*(short  *)dataptr;	break;
		case	SQL_INTEGER:	*op = (BYTE)*(long   *)dataptr;	break;
		case	SQL_REAL:		*op = (BYTE)*(float  *)dataptr; break;

		case	SQL_FLOAT:
		case	SQL_DOUBLE:		*op = (BYTE)*(double *)dataptr; break;
		
		case	SQL_DATE:		*op = *((BYTE*)(DATE_STRUCT      *)dataptr);	break;
		case	SQL_TIME:		*op = *((BYTE*)(TIME_STRUCT      *)dataptr);	break;
		case	SQL_TIMESTAMP:	*op = *((BYTE*)(TIMESTAMP_STRUCT *)dataptr);	break;

		case	SQL_GUID:
		case    SQL_SQL_NCHAR:
		case    SQL_SQL_NVARCHAR:
		case	SQL_VARCHAR:
		case	SQL_CHAR:
		case	SQL_DECIMAL:
		case	SQL_NUMERIC:	*op = (BYTE)*((char*)dataptr);break;

		case    SQL_SQL_NTEXT:
		case	SQL_BINARY:
		case	SQL_VARBINARY:
		case	SQL_LONGVARCHAR:
		case	SQL_LONGVARBINARY:
		case	SQL_ORA_LOB:
			cbData  = to_user_Get_data(i, bit, 128);
			if (cbData)	*op = *((BYTE*)bit);
			else *op = 0;
			break;

		default:
			break;
	}
	*op = (*op & 0x00ff);	
	return TRUE;
}

BOOL CSQLSetX::to_user_Short(int i)
{	
	short *op = (short*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		*op = 0;	return TRUE;
	}

	switch (m_Type[i])
	{
		case	SQL_BIT:		*op = (short)((*(BOOL   *)dataptr)&0x00ff);	break;
		case	SQL_TINYINT:	*op = (short)((*(BYTE   *)dataptr)&0x00ff);	break;
		case	SQL_SMALLINT:	*op = (short)((*(short  *)dataptr)&0xffff);	break;
		case	SQL_INTEGER:	*op = (short)*(long   *)dataptr;	break;
		case	SQL_REAL:		*op = (short)*(float  *)dataptr; break;

		case	SQL_FLOAT:
		case	SQL_DOUBLE:		*op = (short)*(double *)dataptr; break;
		
		case	SQL_DATE:		*op = *((short*)(DATE_STRUCT      *)dataptr);	break;
		case	SQL_TIME:		*op = *((short*)(TIME_STRUCT      *)dataptr);	break;
		case	SQL_TIMESTAMP:	*op = *((short*)(TIMESTAMP_STRUCT *)dataptr);	break;

		case	SQL_GUID:
		case    SQL_SQL_NCHAR:
		case    SQL_SQL_NVARCHAR:
		case	SQL_VARCHAR:
		case	SQL_CHAR:
		case	SQL_DECIMAL:
		case	SQL_NUMERIC:	*op = (short)atol((char*)dataptr);break;

		case    SQL_SQL_NTEXT:
		case	SQL_BINARY:
		case	SQL_VARBINARY:
		case	SQL_LONGVARCHAR:
		case	SQL_LONGVARBINARY:
		case	SQL_ORA_LOB:
			cbData  = to_user_Get_data(i, bit, 128);
			if (cbData)	*op = *((short*)bit);
			else *op = 0;
			break;


		default:
			break;
	}
	return TRUE;
}
BOOL CSQLSetX::to_user_Long(int i)
{
	long *op = (long*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		*op = 0;	return TRUE;
	}

	switch (m_Type[i])
	{
		case	SQL_BIT:		*op = (long)((*(BOOL   *)dataptr)&0x00ff);	break;
		case	SQL_TINYINT:	*op = (long)((*(BYTE   *)dataptr)&0x00ff);	break;
		case	SQL_SMALLINT:	*op = (long)((*(short  *)dataptr)&0xffff);	break;
		case	SQL_INTEGER:	*op = (long)*(long   *)dataptr;	break;
		case	SQL_REAL:		*op = (long)*(float  *)dataptr; break;

		case	SQL_FLOAT:
		case	SQL_DOUBLE:		*op = (long)*(double *)dataptr; break;
		
		case	SQL_DATE:		*op = *((long*)(DATE_STRUCT      *)dataptr);	break;
		case	SQL_TIME:		*op = *((long*)(TIME_STRUCT      *)dataptr);	break;
		case	SQL_TIMESTAMP:	*op = *((long*)(TIMESTAMP_STRUCT *)dataptr);	break;

		case	SQL_GUID:
		case    SQL_SQL_NCHAR:
		case    SQL_SQL_NVARCHAR:
		case	SQL_VARCHAR:
		case	SQL_CHAR:
		case	SQL_DECIMAL:
		case	SQL_NUMERIC:	*op = (long)atol((char*)dataptr);break;

		case    SQL_SQL_NTEXT:
		case	SQL_BINARY:
		case	SQL_VARBINARY:
		case	SQL_LONGVARCHAR:
		case	SQL_LONGVARBINARY:
		case	SQL_ORA_LOB:
			cbData  = to_user_Get_data(i, bit, 128);
			if (cbData)	*op = *((long*)bit);
			else *op = 0;
			break;

		default:
			break;
	}
	return TRUE;
}
BOOL CSQLSetX::to_user_Float(int i)
{
	float *op = (float*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		*op = 0;	return TRUE;
	}

	switch (m_Type[i])
	{
		case	SQL_BIT:		*op = (float)((*(BOOL   *)dataptr)&0x00ff);	break;
		case	SQL_TINYINT:	*op = (float)((*(BYTE   *)dataptr)&0x00ff);	break;
		case	SQL_SMALLINT:	*op = (float)((*(short  *)dataptr)&0xffff);	break;
		case	SQL_INTEGER:	*op = (float)*(long   *)dataptr;	break;
		case	SQL_REAL:		*op = (float)*(float  *)dataptr; break;

		case	SQL_FLOAT:
		case	SQL_DOUBLE:		*op = (float)*(double *)dataptr; break;
		
		case	SQL_DATE:		*op = *((float*)(DATE_STRUCT      *)dataptr);	break;
		case	SQL_TIME:		*op = *((float*)(TIME_STRUCT      *)dataptr);	break;
		case	SQL_TIMESTAMP:	*op = *((float*)(TIMESTAMP_STRUCT *)dataptr);	break;

		case	SQL_GUID:
		case    SQL_SQL_NCHAR:
		case    SQL_SQL_NVARCHAR:
		case	SQL_VARCHAR:
		case	SQL_CHAR:
		case	SQL_DECIMAL:
		case	SQL_NUMERIC:	*op = (float)atof((char*)dataptr);break;

		case    SQL_SQL_NTEXT:
		case	SQL_BINARY:
		case	SQL_VARBINARY:
		case	SQL_LONGVARCHAR:
		case	SQL_LONGVARBINARY:
		case	0:
			cbData  = to_user_Get_data(i, bit, 128);
			if (cbData)	*op = *((float*)bit);
			else *op = 0;
			break;


		default:
			break;
	}
	return TRUE;
}
BOOL CSQLSetX::to_user_Double(int i)
{

	double *op = (double*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		*op = 0;	return TRUE;
	}

	switch (m_Type[i])
	{
		case	SQL_BIT:		*op = (double)((*(BOOL   *)dataptr)&0x00ff);	break;
		case	SQL_TINYINT:	*op = (double)((*(BYTE   *)dataptr)&0x00ff);	break;
		case	SQL_SMALLINT:	*op = (double)((*(short  *)dataptr)&0xffff);	break;
		case	SQL_INTEGER:	*op = (double)*(long   *)dataptr;	break;
		case	SQL_REAL:		*op = (double)*(float  *)dataptr; break;

		case	SQL_FLOAT:
		case	SQL_DOUBLE:		*op = (double)*(double *)dataptr; break;
		
		case	SQL_DATE:		*op = *((double*)(DATE_STRUCT      *)dataptr);	break;
		case	SQL_TIME:		*op = *((double*)(TIME_STRUCT      *)dataptr);	break;
		case	SQL_TIMESTAMP:	*op = *((double*)(TIMESTAMP_STRUCT *)dataptr);	break;

		case	SQL_GUID:
		case    SQL_SQL_NCHAR:
		case    SQL_SQL_NVARCHAR:
		case	SQL_VARCHAR:
		case	SQL_CHAR:
		case	SQL_DECIMAL:
		case	SQL_NUMERIC:	*op = (double)atof((char*)dataptr);break;

		case    SQL_SQL_NTEXT:
		case	SQL_BINARY:
		case	SQL_VARBINARY:
		case	SQL_LONGVARCHAR:
		case	SQL_LONGVARBINARY:
		case	SQL_ORA_LOB:
			cbData  = to_user_Get_data(i, bit, 128);
			if (cbData)	*op = *((double*)bit);
			else *op = 0;
			break;


		default:
			break;
	}
	return TRUE;
}

//拷贝到用户:
SDWORD CSQLSetX::to_user_Get_data(int i, char *obit, int nbyte)
{
	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		if (obit)	obit[0]=0;
		return 0;
	}

	switch (m_Type[i])
	{
		case	SQL_BIT:	
			cbData = sprintf(obit,"%d",((*(BOOL *)m_Value[i])&0x00ff));	break;

		case	SQL_TINYINT:
			cbData = sprintf(obit,"%d", ((*(BYTE *)m_Value[i])&0x00ff));	break;

		case	SQL_SMALLINT:
			cbData = sprintf(obit,"%d", ((*(short *)m_Value[i])&0xffff));	break;

		case	SQL_INTEGER:
			cbData = sprintf(obit,"%d", *(long *)m_Value[i]);	break;

		case	SQL_REAL:
			cbData = sprintf(obit,"%.5f", *(float *)m_Value[i]);break;

		case	SQL_FLOAT:
		case	SQL_DOUBLE:
			cbData = sprintf(obit,"%.8f", *(double *)m_Value[i]);break;

		case	SQL_DATE:
			cbData = sprintf(obit,"%04d/%02d/%02d", 	((DATE_STRUCT *)m_Value[i])->year,((DATE_STRUCT *)m_Value[i])->month, ((DATE_STRUCT *)m_Value[i])->day);
			break;

		case	SQL_TIME:
			cbData = sprintf(obit,"%02d:%02d:%02d", 	((TIME_STRUCT *)m_Value[i])->hour, ((TIME_STRUCT *)m_Value[i])->minute,((TIME_STRUCT *)m_Value[i])->second);
			break;

		case	SQL_TIMESTAMP:
			if (
			((TIMESTAMP_STRUCT *)m_Value[i])->hour ||
			((TIMESTAMP_STRUCT *)m_Value[i])->minute ||
			((TIMESTAMP_STRUCT *)m_Value[i])->second )
			{
			cbData = sprintf(obit,"%04d/%02d/%02d-%2d:%02d:%02d", 
						((TIMESTAMP_STRUCT *)m_Value[i])->year,
						((TIMESTAMP_STRUCT *)m_Value[i])->month,
						((TIMESTAMP_STRUCT *)m_Value[i])->day,
						((TIMESTAMP_STRUCT *)m_Value[i])->hour,
						((TIMESTAMP_STRUCT *)m_Value[i])->minute,
						((TIMESTAMP_STRUCT *)m_Value[i])->second );
			}
			else
			{
			cbData = sprintf(obit,"%04d/%02d/%02d", 
						((TIMESTAMP_STRUCT *)m_Value[i])->year,
						((TIMESTAMP_STRUCT *)m_Value[i])->month,
						((TIMESTAMP_STRUCT *)m_Value[i])->day );
			}
			break;

		case	SQL_GUID:
		case    SQL_SQL_NCHAR:
		case    SQL_SQL_NVARCHAR:
		case	SQL_CHAR:
		case	SQL_DECIMAL:
		case	SQL_NUMERIC:
		case	SQL_VARCHAR:
				strcpy(obit, (char *)m_Value[i]);
				cbData = strlen(obit);
			break;

		case    SQL_SQL_NTEXT:
		case	SQL_BINARY:
		case	SQL_VARBINARY:
		case	SQL_LONGVARCHAR:
		case	SQL_LONGVARBINARY:
		case	SQL_ORA_LOB:
			getLongBinary(i);

			return cbData;

		default:
			break;
	}
	return cbData;

}

BOOL CSQLSetX::to_user_Date(int i)
{
	int  y,m,d, h,f,s,w;

	DATE_STRUCT *op = (DATE_STRUCT*)m_fld_ptr[i];


	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		op->year = 1987;
		op->month= 1;
		op->day  = 1;
		return TRUE;
	}

	to_user_Get_data(i, bit, 128);

	bit[128]=0;

	ctod(bit, y,m,d, h,f,s, w);
	op->year = min(max(_MIN_Y_,y), 2038);
	op->month= m;
	op->day  = d;

	return TRUE;
}
BOOL CSQLSetX::to_user_Time(int i)
{
	int  y,m,d, h,f,s,w;

	TIME_STRUCT *op = (TIME_STRUCT*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		//应该置缺省值
		op->hour  = 0;
		op->minute= 0;
		op->second= 0;
		return TRUE;
	}

	to_user_Get_data(i, bit, 128 );

	bit[128]=0;

	ctod(bit, y,m,d, h,f,s, w);
	op->hour = h;
	op->minute= f;
	op->second  = s;
	return TRUE;
}
BOOL CSQLSetX::to_user_TimeStamp(int i)
{
	int  y,m,d, h,f,s,w;

	TIMESTAMP_STRUCT *opTimeStamp = (TIMESTAMP_STRUCT*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		//应该置缺省值
		CTime t=CTime::GetCurrentTime();
		opTimeStamp->day = t.GetDay();
		opTimeStamp->month=t.GetMonth();
		opTimeStamp->year =t.GetYear();
		opTimeStamp->hour  = t.GetHour();
		opTimeStamp->minute= t.GetMinute();
		opTimeStamp->second  = 0;
		opTimeStamp->fraction = 0;
		return TRUE;
	}

	to_user_Get_data(i,bit, 128);

	bit[128]=0;

	ctod(bit, y,m,d, h,f,s, w);

	opTimeStamp->day = d;
	opTimeStamp->month=m;
	opTimeStamp->year =min(max(_MIN_Y_,y), 2037);
	opTimeStamp->hour = h;
	opTimeStamp->minute= f;
	opTimeStamp->second  = s;
	opTimeStamp->fraction = 0;
	return TRUE;
}


BOOL CSQLSetX::to_user_Char(int i)
{
	char *opChar = (char*)m_fld_ptr[i];

	if (StrLen_or_IndPtr[i]==SQL_NULL_DATA)
	{
		//应该置缺省值
		opChar[0]=0;
		return TRUE;

⌨️ 快捷键说明

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