📄 adotable.cpp
字号:
//-------------------------------------------------------------------------------------------
// 函数名:CAdoTable::ReadField
// 函数功能:从指定的字段中读取一个字符串
// 返回值:参看EV_ERR系列宏定义,仅当返回EV_ERR_OK的时候正确
// 参数说明:
// const char *fieldname : 字段名
// char* result : 返回的字符串
//-------------------------------------------------------------------------------------------
int CAdoTable::ReadField(const char *fieldname, char* result)
{
try
{
if( pRecordSet->BOF ) {
strcpy( sError, "光标在最前,无可读数据!" );
return EV_ERR_NORECORD;
}
if ( pRecordSet->adoEOF ) {
strcpy( sError, "光标在最后,无可读数据!" );
return EV_ERR_NORECORD;
}
_variant_t vtTemp;
vtTemp=pRecordSet->Fields->Item[fieldname]->Value;
if(vtTemp.vt!=VT_NULL)
{
strcpy( result, LPCTSTR( _bstr_t(vtTemp)) );
}else{
// 为空,所以置成空字符串
*result = 0;
}
}catch(_com_error &e){
dump_com_error( e, sError, ERRORSTR_LEN, "ReadField读字符串出错!" );
return EV_ERR_COM;
}
return EV_ERR_OK;
}
//-------------------------------------------------------------------------------------------
// 函数名:CAdoTable::ReadField
// 函数功能:从指定的字段中读取一个字符串
// 返回值:参看EV_ERR系列宏定义,仅当返回EV_ERR_OK的时候正确
// 参数说明:
// long lindex : 字段序号
// char* result : 返回的字符串
//-------------------------------------------------------------------------------------------
int CAdoTable::ReadField(long lindex, char* result)
{
try
{
if( pRecordSet->BOF ) {
strcpy( sError, "光标在最前,无可读数据!" );
return EV_ERR_NORECORD;
}
if ( pRecordSet->adoEOF ) {
strcpy( sError, "光标在最后,无可读数据!" );
return EV_ERR_NORECORD;
}
_variant_t vtTemp;
vtTemp=pRecordSet->Fields->Item[lindex]->Value;
if(vtTemp.vt!=VT_NULL)
{
strcpy( result, LPCTSTR( _bstr_t(vtTemp)) );
}else{
// 为空,所以置成空字符串
*result = 0;
}
}catch(_com_error &e){
dump_com_error( e, sError, ERRORSTR_LEN, "ReadField读字符串出错!" );
return EV_ERR_COM;
}
return EV_ERR_OK;
}
//-------------------------------------------------------------------------------------------
// 函数名:CAdoTable::ReadField
// 函数功能:从指定的字段中读取一个长整型数
// 返回值:参看EV_ERR系列宏定义,仅当返回EV_ERR_OK的时候正确
// 参数说明:
// const char *fieldname : 字段名
// long &result : 返回的长整型数
//-------------------------------------------------------------------------------------------
int CAdoTable::ReadField(const char *fieldname, long &result)
{
try
{
if( pRecordSet->BOF ) {
strcpy( sError, "光标在最前,无可读数据!" );
return EV_ERR_NORECORD;
}
if ( pRecordSet->adoEOF ) {
strcpy( sError, "光标在最后,无可读数据!" );
return EV_ERR_NORECORD;
}
_variant_t vtTemp;
vtTemp = pRecordSet->Fields->Item[fieldname]->Value;
if(vtTemp.vt!=VT_NULL) {
result=long( vtTemp );
}else{
strcpy ( sError, "字段值为<NULL>" );
return EV_ERR_VALUENULL;
}
}catch(_com_error &e){
dump_com_error( e, sError, ERRORSTR_LEN, "ReadField()读长整型数出错!" );
return EV_ERR_COM;
}
return EV_ERR_OK;
}
//-------------------------------------------------------------------------------------------
// 函数名:CAdoTable::ReadField
// 函数功能:从指定的字段中读取一个DWORD
// 返回值:参看EV_ERR系列宏定义,仅当返回EV_ERR_OK的时候正确
// 参数说明:
// const char *fieldname : 字段名
// long &result : 返回的DWORD
//-------------------------------------------------------------------------------------------
int CAdoTable::ReadField(const char *fieldname, DWORD &result)
{
long lRet;
int nRet = ReadField( fieldname, lRet );
result = lRet;
return nRet;
}
//-------------------------------------------------------------------------------------------
// 函数名:CAdoTable::ReadField
// 函数功能:从指定的字段中读取一个int
// 返回值:参看EV_ERR系列宏定义,仅当返回EV_ERR_OK的时候正确
// 参数说明:
// const char *fieldname : 字段名
// long &result : 返回的int
//-------------------------------------------------------------------------------------------
int CAdoTable::ReadField(const char *fieldname, int &result)
{
long lRet;
int nRet = ReadField( fieldname, lRet );
result = lRet;
return nRet;
}
//-------------------------------------------------------------------------------------------
// 函数名:CAdoTable::ReadField
// 函数功能:从指定的字段中读取一个时间
// 返回值:参看EV_ERR系列宏定义,仅当返回EV_ERR_OK的时候正确
// 参数说明:
// const char *fieldname : 字段名
// COleDateTime& result : 返回读出的时间
//-------------------------------------------------------------------------------------------
int CAdoTable::ReadField(const char *fieldname, COleDateTime& result)
{
try
{
if( pRecordSet->BOF ) {
strcpy( sError, "光标在最前,无可读数据!" );
return EV_ERR_NORECORD;
}
if ( pRecordSet->adoEOF ) {
strcpy( sError, "光标在最后,无可读数据!" );
return EV_ERR_NORECORD;
}
_variant_t vtTemp;
vtTemp = pRecordSet->Fields->Item[fieldname]->Value;
if(vtTemp.vt!=VT_NULL) {
result= COleDateTime( vtTemp );
}else{
strcpy ( sError, "字段值为<NULL>" );
return EV_ERR_VALUENULL;
}
}catch(_com_error &e){
dump_com_error( e, sError, ERRORSTR_LEN, "ReadField()读DateTime时间错!" );
return EV_ERR_COM;
}
return EV_ERR_OK;
}
//-------------------------------------------------------------------------------------------
// 函数名:CAdoTable::ReadImageField
// 函数功能:从指定的字段中读取ImageBlock,然后保存到一个文件中
// 返回值:EV_ERR_OK:正确
// EV_ERR_COM:ADO数据库操作出错
// EV_ERR_NORECORD:无可读数据
// 参数说明:
// const char *fieldname : 字段名
// char *szFileName : 目标文件名
// 备注:
//-------------------------------------------------------------------------------------------
int CAdoTable::ReadImageField(const char *fieldname, const char *szFileName )
{
try
{
if( pRecordSet->BOF ) {
strcpy( sError, "光标在最前,无可读数据!" );
return EV_ERR_NORECORD;
}
if ( pRecordSet->adoEOF ) {
strcpy( sError, "光标在最后,无可读数据!" );
return EV_ERR_NORECORD;
}
_variant_t varBLOB;
VariantInit (&varBLOB);
long lDataLength = pRecordSet->GetFields()->GetItem( fieldname )->ActualSize;
varBLOB = pRecordSet->GetFields()->GetItem( fieldname )->GetChunk ( lDataLength );
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
BYTE *pBuf = NULL;
SafeArrayAccessData (varBLOB.parray,(void **)&pBuf);
ASSERT( pBuf!=NULL );
FILE *f;
f = fopen( szFileName, "wb" );
if ( !f ) {
sprintf( sError, "ReadImageField()建立文件%s出错!", szFileName );
SafeArrayUnaccessData (varBLOB.parray);
return EV_ERR_CREATEFILE;
}
fwrite( pBuf, lDataLength, 1, f );
fclose( f );
SafeArrayUnaccessData (varBLOB.parray);
}
}catch(_com_error &e){
dump_com_error( e, sError, ERRORSTR_LEN, "ReadImageField()读Image数据错!" );
return EV_ERR_COM;
}
return EV_ERR_OK;
}
void CAdoTable::CloseRecordset()
{
try
{
pRecordSet->Close();
}
catch(...)
{
return;
}
}
bool CAdoTable::ExcuteSql(LPCTSTR szSql)
{
try
{
CloseRecordset();
pRecordSet->Open (_bstr_t(szSql), _variant_t((IDispatch*)(pConnect)),
adOpenDynamic,adLockOptimistic, adCmdText);
return true;
}
catch(...)
{
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -