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

📄 democopyhelper.cpp

📁 Data Replication Prototype Using ADO
💻 CPP
字号:
// DemoCopyHelper.cpp: implementation of the CDemoCopyHelper class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ETLdemo.h"
#include "DemoCopyHelper.h"

#include "Products.h"
#include "Suppliers.h"
#include "Categories.h"
#include "Orders.h"
#include "Customers.h"
#include "Employees.h"
#include "Shippers.h"
#include "OrderDetails.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


template<> class CTypedOrderVarDesc<CProducts> : public CTypedOrderVariant<CProducts>
{
public:
	CTypedOrderVarDesc() { SetUIChoiceKind(uiAskChoice); }
};

template<> class CTypedOrderVarDesc<CCustomers> : public CTypedOrderVariant<CCustomers>
{
public:
	CTypedOrderVarDesc() 
	{ 
		SetUIChoiceKind(uiAskChoice); 
		SetAbandonDependants();
	}

	void FirstSubType()
	{
		if (!static_cast<CDemoCopyHelper*>(GetTblCopyHelper())
				->IsCustomersOrEmployeesOrders())
			SetConvertOnly();
	}

	bool SetUniqueName()
	{
		CTableHolder tempHolder;
		tempHolder.SetDBManager(GetTblCopyHelper()->GetHolderTo()->GetDBManager());
		CDBTable* pTblTemp = GetCopyTableId().GetDBTable(&tempHolder);

		WCHAR id[6] = {0};
		pTblTemp->CopyDataFromTable(GetTblCopyTo());
		while(pTblTemp->FindFirst(fltUniqueIndex))
		{
			pTblTemp->CopyDataFromTable(GetTblCopyTo());
			for (int i = 0; i < 5; i++)
				id[i] = 'A' + rand() % ('Z' - 'A' + 1);
			pTblTemp->SetIdentityValue(fltUniqueIndex, 
				tempHolder.GetIdentity(id));
		}
		if(id[0] != 0)
			GetTblCopyTo()->SetIdentityValue(fltUniqueIndex, 
				GetTblCopyHelper()->GetHolderTo()->GetIdentity(id));
		return true;
	}
};

template<> class CTypedOrderVarDesc<CEmployees> : public CTypedOrderVariant<CEmployees>
{
public:
	CTypedOrderVarDesc() 
	{ 
		SetAbandonDependants();
		SetUpdateDestination();
	}
	void FirstSubType()
	{
		if (!static_cast<CDemoCopyHelper*>(GetTblCopyHelper())
				->IsCustomersOrEmployeesOrders())
			SetConvertOnly();
	}
};

template<> class CTypedOrderVarDesc<COrders> : public CTypedOrderVariant<COrders>
{
public:
	bool IsObsoleteByRefs() 
	{
		return ID_NULL == GetTblCopyTo()->GetIdentityValue(COrders::fltCustomerID)
			|| ID_NULL == GetTblCopyTo()->GetIdentityValue(COrders::fltEmployeeID);
	}
};

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDemoCopyHelper::CDemoCopyHelper()
{
	m_bCustomersOrEmployeesOrders = FALSE;
}

CDemoCopyHelper::~CDemoCopyHelper()
{
}

void CDemoCopyHelper::Init(const CCopyIterator& iterCustomers, DWORD fltCustomers,
		const CCopyIterator& iterEmployees, DWORD fltEmployees, BOOL bCustomersOrEmployeesOrders)
{
	m_bCustomersOrEmployeesOrders = bCustomersOrEmployeesOrders;

	COPY_RLINK(Suppliers, Products, CProducts::fltSupplierID);
	COPY_RLINK(Categories, Products, CProducts::fltCategoryID);

	if (fltCustomers == (fltCustomers & (fltAutoNumber | fltPrimaryKey)))
		COPY_ENTRY_PK(iterCustomers, Customers, fltPrimaryKey);
	else
		COPY_ENTRY(ID_NOT_DEF, ID_NOT_DEF, Customers, 0, fltCustomers);

	COPY_LINK(Customers, Orders, COrders::fltCustomerID, COrders::fltCustomerID);
	COPY_XLINK(Customers, Orders, COrders::fltCustomerID);


	if (fltEmployees == (fltEmployees & (fltAutoNumber | fltPrimaryKey)))
		COPY_ENTRY_PK(iterEmployees, Employees, fltPrimaryKey);
	else
		COPY_ENTRY(ID_NOT_DEF, ID_NOT_DEF, Employees, 0, fltEmployees);

	COPY_LINK(Employees, Orders, COrders::fltEmployeeID, COrders::fltEmployeeID);
	COPY_XLINK(Employees, Orders, COrders::fltEmployeeID);

	COPY_RLINK(Employees, Employees, CEmployees::fltReportsTo);
	COPY_RLINK(Shippers, Orders, COrders::fltShipVia);

	COPY_LINK(Orders, OrderDetails, COrderDetails::fltOrderID, COrderDetails::fltOrderID);
	COPY_RLINK(Products, OrderDetails, COrderDetails::fltProductID);
}

⌨️ 快捷键说明

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