⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accessdatabase.cpp

📁 访问数据的COM组件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if( m_padoConnect == 0 )
		return S_OK;

	HRESULT	hr;
	_variant_t vError( DISP_E_PARAMNOTFOUND, VT_ERROR );

	try{
		THROW_ERR( CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_INPROC_SERVER, 
			       IID_IADORecordset, (LPVOID *)ppSet) );

		THROW_ERR( (*ppSet)->putref_ActiveConnection(m_padoConnect) );	
		THROW_ERR( (*ppSet)->put_Source(bstrSQL) );

		THROW_ERR( (*ppSet)->put_CacheSize(MAX_CACHESIZE) );

		THROW_ERR( (*ppSet)->Open(vError, vError, adOpenKeyset, adLockOptimistic, adCmdText) );
	}
	catch (HRESULT hr)
	{
		//m_error.GetError(hr);

		if( *ppSet )
			CLOSE((*ppSet));

		return hr;
	}

	return S_OK;
}


STDMETHODIMP CComAccessMdb::GetTypeInfoCount(UINT* pctinfo)
{	
	return S_OK;
}

STDMETHODIMP CComAccessMdb::GetTypeInfo (UINT itinfo, LCID lcid, ITypeInfo** pptinfo)
{
	return S_OK ;
}

STDMETHODIMP CComAccessMdb::GetIDsOfNames (REFIID riid, LPOLESTR* rgszNames, UINT cNames,
		LCID lcid, DISPID* rgdispid)
{
	return S_OK;
}

STDMETHODIMP CComAccessMdb::Invoke(DISPID dispidMember, REFIID riid,
		LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
		EXCEPINFO* pexcepinfo, UINT* puArgErr)
{
	return S_OK ;
}


///////////////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////////

/*

HRESULT CComAccessMdb::Insert ( 
	BSTR bstrSQL,
	long lRow,
	long lColumn,
    VARIANT * pVar )
{
	//取出实际数据
	if(pVar == 0 || lRow == 0 || lColumn == 0 )
		return S_FALSE;

	BEGIN_ERROR

	//取得行和列
	long &row = lRow;
	long &col = lColumn;

	//连接数据库
	if( !OpenDatabase() )
		return E_FAIL;

	m_padoSet = 0;

	//打开记录集
	if( !OpenRecordset( &m_padoSet, bstrSQL ) )
		return E_FAIL;
	
	assert(m_padoSet);

	//得到字段数量和记录数量
	long field;

	ADOFields * padoFields = 0;
	m_padoSet->get_Fields(&padoFields);
	assert(padoFields);
	if( padoFields == 0 )
	{
		CLOSE(m_padoSet);
		return E_FAIL;
	}

	padoFields->get_Count(&field);

	//判断字段数量是否一致
	assert( field > 0 && field == col );
	if( !( field>0 && field==col ) )
	{
		CLOSE(m_padoSet);
		padoFields->Release();
		return E_FAIL;
	}

	//得到字段对象
	ADOField    ** ppadoField = new ADOField*[field];

	_variant_t ivar(0L);

	for(long j=0; j<field; j++)
	{
		ppadoField[j] = 0;

		ivar.lVal = j;
    	padoFields->get_Item(ivar, ppadoField+j);

		assert(ppadoField[j]);
		if( ppadoField[j] == 0 )
		{
			CLOSE(m_padoSet);
			padoFields->Release();
			while(--j>0)
				ppadoField[j]->Release();
			delete[] ppadoField;
	     	return S_FALSE;
		}
	}

	//插入数据
	_variant_t var1( DISP_E_PARAMNOTFOUND , VT_ERROR );
	_variant_t var2( DISP_E_PARAMNOTFOUND , VT_ERROR );

	HRESULT hr;
	long    pos, level;

	m_padoConnect->BeginTrans(&level);
	
	for(long i=0; i<row; i++)
	{	
		try{
	    	THROW_ERR( m_padoSet->AddNew(var1, var2) );
	      	for( j=0; j<field; j++)
			{
		    	pos = i*field+j;
	         	THROW_ERR( ppadoField[j]->put_Value(pVar[pos]) );
			}
	        THROW_ERR( m_padoSet->Update(var1, var2) );
		}
		catch(HRESULT hr)
		{
			REPORT_ERROR(hr, bstrSQL)
			m_padoSet->CancelUpdate();
		}
	}

	m_padoConnect->CommitTrans();


	//释放所有变量
	CLOSE(m_padoSet);
	padoFields->Release();
	j = 0;
	while(j<field)
		ppadoField[j++]->Release();
	delete[] ppadoField;

	return S_OK;
}

HRESULT CComAccessMdb::InsertEx ( 
	BSTR bstrSQL_D,
	BSTR bstrSQL_I,
	long lRow,
	long lColumn,
    VARIANT * pVar )
{
	//取出实际数据
	if( pVar == 0 || lRow == 0 || lColumn == 0 )
		return S_FALSE;

	BEGIN_ERROR

	//取得行和列
	long &row = lRow;
	long &col = lColumn;

	//连接数据库
	if( !OpenDatabase() )
		return E_FAIL;

	m_padoSet = 0;

	//打开记录集
	if( !OpenRecordset( &m_padoSet, bstrSQL_I ) )
		return E_FAIL;
	
	assert(m_padoSet);

	//得到字段数量和记录数量
	long field;

	ADOFields * padoFields = 0;
	m_padoSet->get_Fields(&padoFields);
	assert(padoFields);
	if( padoFields == 0 )
	{
		CLOSE(m_padoSet);
		return E_FAIL;
	}

	padoFields->get_Count(&field);

	//判断字段数量是否一致
	assert( field > 0 && field == col );
	if( !( field>0 && field==col ) )
	{
		CLOSE(m_padoSet);
		padoFields->Release();
		return E_FAIL;
	}

	//得到字段对象
	ADOField    ** ppadoField = new ADOField*[field];

	_variant_t ivar(0L);

	for(long j=0; j<field; j++)
	{
		ppadoField[j] = 0;

		ivar.lVal = j;
    	padoFields->get_Item(ivar, ppadoField+j);

		assert(ppadoField[j]);
		if( ppadoField[j] == 0 )
		{
			CLOSE(m_padoSet);
			padoFields->Release();
			while(--j>0)
				ppadoField[j]->Release();
			delete[] ppadoField;
	     	return S_FALSE;
		}
	}

	//插入数据
	_variant_t var1( DISP_E_PARAMNOTFOUND , VT_ERROR );
	_variant_t var2( DISP_E_PARAMNOTFOUND , VT_ERROR );

	HRESULT hr;
	long    pos, level;
	cbstr bstr, bstrSQL;
	char  *psql;

	psql  = bstr.ToChar(bstrSQL_D);
	char szSQL[MAX_SQL] = {'\0'};

	m_padoConnect->BeginTrans(&level);
	
	for(long i=0; i<row; i++)
	{	
		sprintf( szSQL, psql, pVar[i*field].lVal );
		try{
			m_padoConnect->BeginTrans(&level);
            THROW_ERR( m_padoConnect->Execute( bstrSQL.ToBSTR(szSQL), 0, adCmdText, 0));

			THROW_ERR( m_padoSet->AddNew(var1, var2) );
	      	for( j=0; j<field; j++)
			{
		    	pos = i*field+j;
	         	THROW_ERR( ppadoField[j]->put_Value(pVar[pos]) );
			}
	        THROW_ERR( m_padoSet->Update(var1, var2) );

			m_padoConnect->CommitTrans();
		}
		catch(HRESULT hr)
		{
			REPORT_ERROR(hr, bstrSQL_I)
			m_padoSet->CancelUpdate();
			m_padoConnect->RollbackTrans();
		}
	}

	m_padoConnect->CommitTrans();


	//释放所有变量
	CLOSE(m_padoSet);
	padoFields->Release();
	j = 0;
	while(j<field)
		ppadoField[j++]->Release();
	delete[] ppadoField;

	return S_OK;
}

HRESULT CComAccessMdb::InsertEx2 ( 
	BSTR bstrSQL_D,
	BSTR bstrSQL_I,
	long lRow,
	long lColumn,
    VARIANT * pVar )
{
	//取出实际数据
	if( pVar == 0 || lRow == 0 || lColumn == 0 )
		return S_FALSE;

	BEGIN_ERROR

	//取得行和列
	long &row = lRow;
	long &col = lColumn;

	//连接数据库
	if( !OpenDatabase() )
		return E_FAIL;

	m_padoSet = 0;

	//打开记录集
	if( !OpenRecordset( &m_padoSet, bstrSQL_I ) )
		return E_FAIL;
	
	assert(m_padoSet);

	//得到字段数量和记录数量
	long field;

	ADOFields * padoFields = 0;
	m_padoSet->get_Fields(&padoFields);
	assert(padoFields);
	if( padoFields == 0 )
	{
		CLOSE(m_padoSet);
		return E_FAIL;
	}

	padoFields->get_Count(&field);

	//判断字段数量是否一致
	assert( field > 0 && field == col );
	if( !( field>0 && field==col ) )
	{
		CLOSE(m_padoSet);
		padoFields->Release();
		return E_FAIL;
	}

	//得到字段对象
	ADOField    ** ppadoField = new ADOField*[field];

	_variant_t ivar(0L);

	for(long j=0; j<field; j++)
	{
		ppadoField[j] = 0;

		ivar.lVal = j;
    	padoFields->get_Item(ivar, ppadoField+j);

		assert(ppadoField[j]);
		if( ppadoField[j] == 0 )
		{
			CLOSE(m_padoSet);
			padoFields->Release();
			while(--j>0)
				ppadoField[j]->Release();
			delete[] ppadoField;
	     	return S_FALSE;
		}
	}

	//插入数据
	_variant_t var1( DISP_E_PARAMNOTFOUND , VT_ERROR );
	_variant_t var2( DISP_E_PARAMNOTFOUND , VT_ERROR );

	HRESULT hr;
	long    pos, level;
	long i;

	m_padoConnect->BeginTrans(&level);
    
	hr = m_padoConnect->Execute( bstrSQL_D, 0, adCmdText, 0);
	if( !SUCCEEDED(hr) )
	{
		REPORT_ERROR(hr, bstrSQL_D);
		m_padoConnect->RollbackTrans();
		goto exit_insertex2;
	}
	
	for(i=0; i<row; i++)
	{	
		try{
			THROW_ERR( m_padoSet->AddNew(var1, var2) );
	      	for( j=0; j<field; j++)
			{
		    	pos = i*field+j;
	         	THROW_ERR( ppadoField[j]->put_Value(pVar[pos]) );
			}
		}
		catch(HRESULT hr)
		{
			REPORT_ERROR(hr, bstrSQL_I)
			m_padoSet->CancelUpdate();
		}
	}

	m_padoSet->Update(var1, var2);
	m_padoConnect->CommitTrans();

exit_insertex2:
	//释放所有变量
	CLOSE(m_padoSet);
	padoFields->Release();
	j = 0;
	while(j<field)
		ppadoField[j++]->Release();
	delete[] ppadoField;

	return S_OK;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -