当前位置: 首页>>代码示例>>C++>>正文


C++ _RecordsetPtr::GetFields方法代码示例

本文整理汇总了C++中_RecordsetPtr::GetFields方法的典型用法代码示例。如果您正苦于以下问题:C++ _RecordsetPtr::GetFields方法的具体用法?C++ _RecordsetPtr::GetFields怎么用?C++ _RecordsetPtr::GetFields使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在_RecordsetPtr的用法示例。


在下文中一共展示了_RecordsetPtr::GetFields方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: QueryByCondit

void CBllHelp::QueryByCondit(_RecordsetPtr pRecordSet,vector<string> &vecField, vector<string> &vecRecordSet, long &lFieldCounts)
{
	//判断存在记录
	if(pRecordSet == NULL)
		return ;

	if (!vecRecordSet.empty())
	{
		vecRecordSet.clear();
	}
	if (!vecField.empty())
	{
		vecField.clear();
	}
	try
	{
		//字段个数
		lFieldCounts = pRecordSet->GetFields()->GetCount();
		adoDataTypeEnum enumDataType;
		_bstr_t str;
		//字段名称、类型、大小
		for(long i = 0; i<lFieldCounts; i++)
		{
			str= pRecordSet->GetFields()->GetItem(i)->GetName();
			vecField.push_back((LPSTR)str);
			enumDataType = pRecordSet->GetFields()->GetItem(i)->GetType();
			str = GetDataTypeString(enumDataType);
			vecField.push_back((LPSTR)str);
			str = pRecordSet->GetFields()->GetItem(i)->GetDefinedSize();
			vecField.push_back((LPSTR)str);
		}
		pRecordSet->MoveFirst();

		long lCounts = 0;
		_variant_t var;
		//获取记录
		while(!pRecordSet->adoEOF)
		{
			for(long j=0; j<lFieldCounts; j++)
			{
				var=pRecordSet->GetCollect(j);
				str=(_bstr_t)(var.vt==1?"":var);
				vecRecordSet.push_back((LPSTR)str);	
			}
			pRecordSet->MoveNext();
			lCounts++;
		}
	}
	catch(_com_error e)
	{
		//AfxMessageBox("记录为空");
	}
}
开发者ID:siredblood,项目名称:tree-bumpkin-project,代码行数:53,代码来源:BllHelp.cpp

示例2: SaveBufferField

//存Buffer
bool CRsDupRgn::SaveBufferField(CBaseDBEntity *pGoods, const char* szFiledName, _RecordsetPtr &rs)
{
	if(pGoods == NULL)	return false;
	if(szFiledName == NULL) return false;

	VARIANT varBLOB;
	SAFEARRAY* psa;

	CEntityProperty* ep = pGoods->GetDataEntityManager().GetEntityProperty(string(szFiledName));
	if(NULL == ep) return false;

	BYTE* buffer = NULL;
	long dataSize = ep->GetBufSize(0);
	if(dataSize)
	{
		buffer = new BYTE[dataSize];
		ep->GetBufAttr(0, (void*)buffer, dataSize);
		
		long lSize=(long)dataSize;
		SAFEARRAYBOUND rgsabound[1];
		rgsabound[0].lLbound=0;
		rgsabound[0].cElements=lSize;
		psa=SafeArrayCreate(VT_UI1,1,rgsabound);

		for(long i=0;i<lSize;i++)
		{
			SafeArrayPutElement(psa,&i,&buffer[i]);
		}
		varBLOB.vt=VT_ARRAY|VT_UI1;
		varBLOB.parray=psa;

		try
		{
			rs->GetFields()->GetItem(szFiledName)->AppendChunk(varBLOB);
		}
		catch(_com_error e)
		{
			PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN, STR_DBS_DUPRGN_SAVERGNOBJFAIL), e);
			SAFE_DELETE_ARRAY(buffer);
			return false;
		}
		SafeArrayDestroy(psa);
	}
	SAFE_DELETE_ARRAY(buffer);
	return true;
}
开发者ID:xiongshaogang,项目名称:mmo-resourse,代码行数:47,代码来源:RsDupRgn.cpp

示例3: LoadBufferField

//读Buffer
bool CRsDupRgn::LoadBufferField(CBaseDBEntity *pGoods, const char* szFiledName, _RecordsetPtr &rs)
{
	if(pGoods == NULL)	return false;

	try
	{
		if(rs->GetadoEOF())
		{
			ReleaseRs(rs);
			return false;
		}

		long lSize=0;
		FieldsPtr fldPtr = rs->GetFields();
		FieldPtr itemPtr = fldPtr->GetItem(szFiledName);
		lSize = itemPtr->ActualSize;

		if(lSize > 0)
		{
			_variant_t varBLOB;
			varBLOB = itemPtr->GetChunk(lSize);

			BYTE *pBuf=NULL;
			SafeArrayAccessData(varBLOB.parray,(void**)&pBuf);
			SafeArrayUnaccessData(varBLOB.parray);

			// 清空SKILL
			CEntityProperty* ep = pGoods->GetDataEntityManager().GetEntityProperty(string(szFiledName));
			if(ep)
				ep->SetBufAttr(0, pBuf, lSize);
		}
	}
	catch(_com_error e)
	{
		PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_LOADRGNOBJERR), e);
		return false;
	}
	return true;
}
开发者ID:xiongshaogang,项目名称:mmo-resourse,代码行数:40,代码来源:RsDupRgn.cpp

示例4: PutTbValue

/////////////////////////////////////////////////////////////////////////////////////////
//
// 在记录集中当前游标位置设置指定的字段的值
//
// IRecordset[in]	记录集智能指针	
// FieldsName[in]	字段名
// Value[in]		新的值
//
// 如果有异常将调用ExceptionInfo函数
//
// 如果Value为空或全为空格字符,当指定的字段的类型为字符串型时,字段的值为空
// 如果字段的类型为数字型,字段的值为0
//
void CFoxBase::PutTbValue(_RecordsetPtr IRecordset, _variant_t FieldsName, CString Value)
{
	adoDataTypeEnum DataType;

	if(IRecordset==NULL)
		return;

	Value.TrimLeft();
	Value.TrimRight();

	try
	{
		if(Value.IsEmpty())
		{
			IRecordset->GetFields()->GetItem(FieldsName)->get_Type(&DataType);
			
			if(DataType==adBSTR || DataType==adChar || DataType==adVarChar || 
			   DataType==adVarWChar ||DataType==adWChar)
			{
				Value=_T("");
			}
			else
			{
				Value=_T("0");
			}
		}

		IRecordset->PutCollect(FieldsName,_variant_t(Value));
		IRecordset->Update();
	}
	catch(_com_error /*&e*/)
	{
//		ExceptionInfo(e);
		throw;
	}

}
开发者ID:uesoft,项目名称:AutoIPED,代码行数:50,代码来源:FoxBase.cpp

示例5: InsertNew

/////////////////////////////////////////////////////
//
// 在记录集的当前位置插入一条新记录
//
// IRecord[in]	记录集智能指针
//
// 函数成功返回TRUE,否则返回FALSE
// 如果有异常将调用ExceptionInfo函数
//
// 函数成功后记录集将指向新插入的空记录
//
BOOL CFoxBase::InsertNew(_RecordsetPtr &IRecord,int after)
{
	int pos;
	CMap<short,short&,_variant_t,_variant_t&> FieldMap;
	CMap<short,short&,_variant_t,_variant_t&> newFieldMap;		//将新增加的记录的值记下来
	_variant_t TempValue;
	short Item;
	FieldsPtr IFields;
	FieldPtr IField;
    int pos1;
	int	nCount;		//字段个数.

	if(IRecord==NULL)
	{
		ExceptionInfo(_T("Recordset cann't be empty"));
		return FALSE;
	}

	//如果记录集为空将插入一条新记录
	if(IRecord->adoEOF && IRecord->BOF)
	{
		try
		{
			IRecord->AddNew();
			IRecord->Update();
		}
		catch(_com_error &e)
		{
			ExceptionInfo(e);
			return FALSE;
		}
		return TRUE;
	}
	else if(IRecord->adoEOF)
	{
		IRecord->AddNew();
		IRecord->Update();
		IRecord->MoveLast();
		return true;
	}

	for(pos=0; !IRecord->adoEOF ;pos++)
	{
		try
		{
			IRecord->MoveNext();
		}
		catch(_com_error &e)
		{
			ExceptionInfo(e);
			return FALSE;
		}
	}

	//
	// 查如一条新记录,并将刚开始所指的以后的记录向后移
	//
	try
	{
		IRecord->AddNew();
		IRecord->Update();
		IRecord->MoveLast();

		//将新增加的记录的值记下来.
		IFields = IRecord->GetFields();
		nCount = IFields->GetCount();   //字段个数

		for (Item = 0; Item < nCount; Item++)
		{
			newFieldMap[Item] = IRecord->GetCollect(_variant_t(Item));
		}
		IFields.Release();
		//		

		IRecord->MovePrevious();
	}
	catch(_com_error &e)
	{
		ExceptionInfo(e);
		return FALSE;
	}
	if(after==1)
    pos--;  //使pos再减一,变成在指针的当前位置上加入一条新记录,insert blank
	pos1=pos;
	while(pos>0)
	{
		try
		{
			for(Item=0;Item<nCount;Item++)
//.........这里部分代码省略.........
开发者ID:uesoft,项目名称:AutoIPED,代码行数:101,代码来源:FoxBase.cpp


注:本文中的_RecordsetPtr::GetFields方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。