📄 recset.cpp
字号:
case SQL_REAL:
case SQL_FLOAT:
SetFX_Real( m_Name[i], *(float *)m_Value[i]);
break;
case SQL_DOUBLE:
SetFX_Double( m_Name[i], *(double *)m_Value[i]);
break;
case SQL_DATE:
case SQL_TIME:
case SQL_TIMESTAMP:
SetFX_Date( m_Name[i], *(TIMESTAMP_STRUCT *)m_Value[i]);
break;
case SQL_SQL_NCHAR:
case SQL_CHAR:
case SQL_DECIMAL:
case SQL_NUMERIC:
SetFX_Text( m_Name[i], (char *)m_Value[i]);
break;
case SQL_GUID:
case SQL_SQL_NVARCHAR:
case SQL_VARCHAR:
SetFX_Text( m_Name[i], (char *)m_Value[i]);
break;
case SQL_SQL_NTEXT:
case SQL_BINARY:
case SQL_VARBINARY:
case SQL_LONGVARCHAR:
case SQL_LONGVARBINARY:
case SQL_ORA_LOB:
SetFX_Binary( m_Name[i], *(CMyByteArray *)m_Value[i]);
break;
default:
break;
}
}
//}}AFX_FIELD_MAP
}
//str的长度:MAXBUFFER+1
int CRecSet::getData(int icolumn, int irow, char *str)
{
SQLSMALLINT DataType;
char *tok;
int cbData;
str[0]=0;
if (IsEof()) return 0;
DataType = m_Type[icolumn];
switch (DataType)
{
case SQL_BIT:
cbData = sprintf(str,"%d", ((*(BOOL*)m_Value[icolumn])&0x00ff));
break;
case SQL_TINYINT:
cbData = sprintf(str,"%d", ((*(BYTE*)m_Value[icolumn])&0x00ff));
break;
case SQL_SMALLINT:
cbData = sprintf(str,"%d", ((*(int*)m_Value[icolumn])&0xffff));
break;
case SQL_INTEGER:
cbData = sprintf(str,"%d", *(long*)m_Value[icolumn]);
break;
case SQL_REAL:
case SQL_FLOAT:
pFloat = (float*)m_Value[icolumn];
cbData = sprintf(str,"%f", *pFloat); trim0(str);
break;
case SQL_DOUBLE:
pDouble = (double*)m_Value[icolumn];
sprintf(str,"%f", *pDouble);
cbData = trim0(str);
break;
case SQL_DATE:
date = (DATE_STRUCT *)m_Value[icolumn];
cbData = sprintf(str,"%d/%d/%d", date->year, date->month, date->day);
break;
case SQL_TIME:
time = (TIME_STRUCT *)m_Value[icolumn];
cbData = sprintf(str,"%d:%d:%d", time->hour, time->minute, time->second);
break;
case SQL_TIMESTAMP:
ts = (TIMESTAMP_STRUCT *)m_Value[icolumn];
cbData = sprintf(str,"%d/%d/%d-%d:%d:%d", ts->year, ts->month, ts->day, ts->hour, ts->minute, ts->second);
break;
case SQL_SQL_NCHAR:
case SQL_CHAR:
tok = (char *)m_Value[icolumn];
strcpy(str, tok);
cbData = strlen(str);
break;
case SQL_DECIMAL:
case SQL_NUMERIC:
tok = (char *)m_Value[icolumn];
strcpy(str, tok); trim0(str);
cbData = strlen(str);
break;
case SQL_GUID:
case SQL_SQL_NVARCHAR:
case SQL_VARCHAR:
tok = (char *)m_Value[icolumn];
strcpy(str, tok);
cbData = strlen(str);
break;
case SQL_SQL_NTEXT:
case SQL_BINARY:
case SQL_VARBINARY:
case SQL_LONGVARCHAR:
case SQL_LONGVARBINARY:
case SQL_ORA_LOB:
pByteArray = (CMyByteArray*)m_Value[icolumn];
cbData = pByteArray->GetDataSize();
if (cbData)
{
tok = (char*)pByteArray->GetData();
#if 0
//使用文件的语句
int i,l;
h = OpenFile (tok, &of, OF_READ);
l = _llseek(h,0, FILE_END); _llseek(h, 0, FILE_BEGIN);
if (l<=MAXBUFFER)
{
l = _lread(h, str, l); str[l]=0;
}
else
{
strcpy(str, tok);
}
_lclose(h);
#else
memcpy(str, tok, min(MAXBUFFER,cbData) ); str[min(MAXBUFFER, cbData)]=0;
#endif
break;
}
else
{
sprintf(str,"");
cbData = strlen(str);
}
break;
default:
cbData = 0;
AfxMessageBox("Unknow column type!");
break;
}
return cbData;
}
BOOL CRecSet::putData(int icolumn, char *str)
{
int l;
int y,m,d, h,f,s,w;
char *tok;
SQLSMALLINT DataType;
nullField[icolumn]= FALSE;
if (str[0]==0)
{
if (!nullable[icolumn])
{
return FALSE;
}
nullField[icolumn]= TRUE;
return TRUE;
}
DataType = m_Type[icolumn];
switch (DataType)
{
case SQL_BIT:
pBool = (BOOL*)m_Value[icolumn];
*pBool = (atol(str) &0x00ff);
break;
case SQL_TINYINT:
pByte = (BYTE*)m_Value[icolumn];
*pByte = (BYTE)atol(str);
break;
case SQL_SMALLINT:
pInt = (int*)m_Value[icolumn];
*pInt= (atol(str) &0xffff);
break;
case SQL_INTEGER:
pLong = (long*)m_Value[icolumn];
*pLong= atol(str);
break;
case SQL_REAL:
case SQL_FLOAT:
pFloat = (float*)m_Value[icolumn];
*pFloat= (float)atof(str);
break;
case SQL_DOUBLE:
pDouble = (double*)m_Value[icolumn];
*pDouble= atof(str);
break;
case SQL_DATE:
date = (DATE_STRUCT *)m_Value[icolumn];
ctod(str, y,m,d, h,f,s, w);
date->year = y;
date->month= m;
date->day = d;
break;
case SQL_TIME:
time = (TIME_STRUCT *)m_Value[icolumn];
ctod(str, y,m,d, h,f,s, w);
time->hour = h;
time->minute = f;
time->second = s;
break;
case SQL_TIMESTAMP:
ts = (TIMESTAMP_STRUCT *)m_Value[icolumn];
if (str[0] != '\'')
{
char scc[256];
strcpy(scc, str);
strcpy(str,"\'");
strcat(str, scc);
strcat(str,"\'");
}
ctod(str, y,m,d, h,f,s, w);
ts->year = y;
ts->month= m;
ts->day = d;
ts->hour = h;
ts->minute=f;
ts->second=s;
ts->fraction=0;
break;
case SQL_SQL_NCHAR:
case SQL_CHAR:
case SQL_DECIMAL:
case SQL_NUMERIC:
int nnnn;
nnnn=min(strlen(str), m_Width[icolumn]);
str[nnnn]=0;
tok = (char*)m_Value[icolumn];
strcpy(tok, str);
break;
case SQL_GUID:
case SQL_SQL_NVARCHAR:
case SQL_VARCHAR:
nnnn=min(strlen(str), m_Width[icolumn]);
str[nnnn]=0;
tok = (char*)m_Value[icolumn];
strcpy(tok, str);
break;
case SQL_SQL_NTEXT:
case SQL_BINARY:
case SQL_VARBINARY:
case SQL_LONGVARCHAR:
case SQL_LONGVARBINARY:
case SQL_ORA_LOB:
pByteArray = (CMyByteArray*)m_Value[icolumn];
l = strlen(str)+1;
pByteArray->SetDataSize(l);
tok = (char*)pByteArray->GetData();
strcpy(tok, str);
break;
default:
AfxMessageBox("Unknow column type!");
break;
}
return TRUE;
}
BOOL CRecSet::Open(char *sql)
{
int ii = CSQLSetX::Open(sql);
//当初始化不成功时,用基类的信息:
if (m_nFields==0)
{
m_nFields = CSQLSetX::m_nColumn;
CString m_strColumnName;
SQLPOINTER TargetValuePtr;
UINT m_lPrecision;
int m_nDataType;
int ColumnNumber = 0;
for (int i=0; i< m_nFields; i++)
{
m_strColumnName = CSQLSetX::m_strName[i];
for (int k=0; k<ColumnNumber; k++)
{
if (m_strName[k]==m_strColumnName) break;
}
if (k<ColumnNumber)
{
continue;
}
//允许null否:
nullable[ColumnNumber] = CSQLSetX::Nullable[i];
//字段的其它信息:
m_nDataType =CSQLSetX::m_Type[i];
m_lPrecision =CSQLSetX::m_Width[i];
m_Name.Add (CSQLSetX::m_Name[i]);
m_Width.Add(m_lPrecision );
m_Type.Add ( m_nDataType);
m_strName.Add( m_strColumnName );//label
m_strType.Add( CSQLSetX::m_strType[i]); //原始类型
m_strTable.Add(CSQLSetX::m_strTable[i]);
switch (m_nDataType)
{
case SQL_BIT:
TargetValuePtr = new BOOL;
m_Value.Add(TargetValuePtr);
break;
case SQL_TINYINT:
TargetValuePtr = new BYTE;
m_Value.Add(TargetValuePtr);
break;
case SQL_SMALLINT:
TargetValuePtr = new int;
m_Value.Add(TargetValuePtr);
break;
case SQL_INTEGER:
TargetValuePtr = new long;
m_Value.Add(TargetValuePtr);
break;
case SQL_REAL:
case SQL_FLOAT:
TargetValuePtr = new float;
m_Value.Add(TargetValuePtr);
break;
#ifdef SQL_NUMERIC_BIND_DOUBLE
case SQL_DECIMAL:
case SQL_NUMERIC:
#endif
case SQL_DOUBLE:
TargetValuePtr = new double;
m_Value.Add(TargetValuePtr);
break;
case SQL_DATE:
TargetValuePtr = new DATE_STRUCT;
m_Value.Add(TargetValuePtr);
break;
case SQL_TIME:
TargetValuePtr = new TIME_STRUCT;
m_Value.Add(TargetValuePtr);
break;
case SQL_TIMESTAMP:
TargetValuePtr = new TIMESTAMP_STRUCT;
m_Value.Add(TargetValuePtr);
break;
case SQL_SQL_NCHAR:
case SQL_CHAR:
#ifndef SQL_NUMERIC_BIND_DOUBLE
case SQL_DECIMAL:
case SQL_NUMERIC:
#endif
TargetValuePtr = new char[(WORD)m_lPrecision+1];
m_Value.Add(TargetValuePtr);
break;
case SQL_SQL_NVARCHAR:
case SQL_VARCHAR:
TargetValuePtr = new char[(WORD)m_lPrecision+1];
m_Value.Add(TargetValuePtr);
break;
case SQL_SQL_NTEXT:
case SQL_BINARY:
case SQL_VARBINARY:
case SQL_LONGVARCHAR:
case SQL_LONGVARBINARY:
case SQL_ORA_LOB:
TargetValuePtr = new CMyByteArray;
m_Value.Add(TargetValuePtr);
break;
default:
TargetValuePtr = new BOOL;
m_Value.Add(TargetValuePtr);
break;
}
ColumnNumber++;
}
//告诉基类,当前的变量地址
CSQLSetX::m_col = 0;
m_nFields = ColumnNumber; //实际绑定的字段数目
DoFieldExchange(NULL);
}
return ii;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -