Beispiel #1
0
///////////////////////////////////////////////
//
//返回当前记录集的游标位置
//
//IRecordset[in] 记录集智能指针
//
//函数成功返回当前记录集的游标位置,否则返回-1
//
long CFoxBase::RecNo(_RecordsetPtr IRecordset)
{
	long pos=0;
	long i;

	if(IRecordset==NULL)
		return -1;

	if(IRecordset->adoEOF && IRecordset->BOF)
		return -1;

	while(!IRecordset->GetBOF())
	{
		pos++;
		IRecordset->MovePrevious();
	}

	i=pos;

	i--;
	IRecordset->MoveFirst();

	while(i>0)
	{
		i--;
		IRecordset->MoveNext();
	}

	return pos;
}
Beispiel #2
0
/////////////////////////////////////////////////////
//
// 在记录集的当前位置插入一条新记录
//
// 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++)
			{
				TempValue=IRecord->GetCollect(_variant_t(Item));
				FieldMap[Item]=TempValue;
			}

			IRecord->MoveNext();

			for(Item=0;Item<nCount;Item++)
			{
				IRecord->PutCollect(_variant_t(Item),FieldMap[Item]);
			}
			IRecord->Update();

			IRecord->MovePrevious();

			pos--;
			if(pos>0)
				IRecord->MovePrevious();
		}
		catch(_com_error &e)
		{
			ExceptionInfo(e);
			return FALSE;
		}
	}

	// 使最开始所指的记录内容为空
	if(pos1==0 && after==1) {IRecord->MoveNext();}
	else
	{

	try
	{
		TempValue.Clear();

		for(Item=0;Item<nCount;Item++)
		{
			IRecord->PutCollect(_variant_t(Item),newFieldMap[Item]);
		}
		IRecord->Update();
	}
	catch(_com_error &e)
	{
		ExceptionInfo(e);
		return FALSE;
	}
	}

	return TRUE;
}