📄 sqlsetx.cpp
字号:
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 + -