home *** CD-ROM | disk | FTP | other *** search
- // DragItem.cpp : implementation file
- //
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
-
- #include "stdafx.h"
- #include "DaoView.h"
- #include "DragItem.h"
- #include "renamedl.h"
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // CDragItem
-
- CDragItem::CDragItem()
- {
- m_nItemType = itemNull;
- }
-
- CDragItem::CDragItem(WORD nItemType, LPCTSTR lpszDBName, LPCTSTR lpszDBConnect, LPCTSTR lpszItemName )
- {
- m_nItemType = nItemType;
- m_strDBName = lpszDBName;
- m_strDBConnect = lpszDBConnect;
- m_strItemName = lpszItemName;
- }
-
- CDragItem::~CDragItem()
- {
- }
-
- void CDragItem::Serialize(CArchive& ar)
- {
- CObject::Serialize(ar);
-
- if (ar.IsStoring())
- {
- ar << m_nItemType;
- ar << m_strDBName;
- ar << m_strDBConnect;
- ar << m_strItemName;
- }
- else
- {
- ar >> m_nItemType;
- ar >> m_strDBName;
- ar >> m_strDBConnect;
- ar >> m_strItemName;
- }
- }
-
- BOOL CDragItem::Transfer(CDaoTreeView* pTreeView,CDaoDatabase* pDBTarget)
- {
- CWaitCursor curWait;
-
- CDaoDatabase dbSource;
-
- try
- {
- dbSource.Open(m_strDBName,FALSE,TRUE,m_strDBConnect);
- }
- catch (CDaoException* e)
- {
- DisplayDaoException(e);
- e->Delete();
- return FALSE;
- }
-
- switch (m_nItemType)
- {
- case CDaoTreeView::IID_TABLE:
- if (CopyTable(&dbSource,pDBTarget))
- pTreeView->AddItem(m_nItemType,m_strItemName);
- break;
- case CDaoTreeView::IID_QUERYDEF:
- if (CopyQueryDef(&dbSource,pDBTarget))
- pTreeView->AddItem(m_nItemType,m_strItemName);
- break;
- }
-
- if (dbSource.IsOpen())
- dbSource.Close();
-
- return TRUE;
- }
-
- BOOL CDragItem::CopyTable(CDaoDatabase* pDBSource,CDaoDatabase* pDBTarget)
- {
- CRenameDlg dlgRename;
- dlgRename.m_strName = m_strItemName;
-
- // Find out if the table exists already
- CDaoTableDefInfo tabInfo;
- int nTableCount = pDBTarget->GetTableDefCount();
- for (int i=0; i < nTableCount; i++)
- {
- pDBTarget->GetTableDefInfo(i,tabInfo);
- if (tabInfo.m_strName == dlgRename.m_strName)
- {
- if (dlgRename.DoModal() == IDCANCEL)
- return FALSE;
- i--;
- }
- }
-
- CDaoTableDef tdSource(pDBSource);
- CDaoTableDef tdTarget(pDBTarget);
-
- tdSource.Open(m_strItemName);
- pDBSource->GetTableDefInfo(m_strItemName,tabInfo,AFX_DAO_SECONDARY_INFO);
-
- tdTarget.Create(
- dlgRename.m_strName,
- tabInfo.m_lAttributes,
- tabInfo.m_strSrcTableName,
- tabInfo.m_strConnect);
-
- // Enumerate fields and append to new table
- CDaoFieldInfo fieldInfo;
- int nFieldCount = tdSource.GetFieldCount();
- for (i=0; i < nFieldCount; i++)
- {
- try{
- tdSource.GetFieldInfo(i,fieldInfo);
- tdTarget.CreateField(
- fieldInfo.m_strName,
- fieldInfo.m_nType,
- fieldInfo.m_lSize);
- }
- catch (CDaoException* e)
- {
- DisplayDaoException(e);
- e->Delete();
- }
- }
-
- tdTarget.Append();
-
- // Now attempt to copy the data
- CDaoRecordset rsSource(pDBSource);
- CDaoRecordset rsTarget(pDBTarget);
- try
- {
- CString strSel1,strSel2;
- strSel1 = strSel2 = (_T("Select * From ["));
- strSel1 += m_strItemName;
- strSel1 += _T("]");
- strSel2 += dlgRename.m_strName;
- strSel2 += _T("]");
-
- rsSource.Open(dbOpenDynaset,strSel1);
- rsTarget.Open(dbOpenDynaset,strSel2);
- while (!rsSource.IsEOF()) {
- COleVariant var;
- rsTarget.AddNew();
- for (int i=0; i < nFieldCount; i++)
- {
- var = rsSource.GetFieldValue(i);
- rsTarget.SetFieldValue(i,var);
- }
-
- rsTarget.Update();
-
- rsSource.MoveNext();
- }
- }
- catch (CDaoException* e)
- {
- DisplayDaoException(e);
- e->Delete();
- }
-
- rsSource.Close();
- rsTarget.Close();
-
- tdTarget.Close();
- tdSource.Close();
-
- m_strItemName = dlgRename.m_strName;
- return TRUE;
- }
-
- BOOL CDragItem::CopyQueryDef(CDaoDatabase* pDBSource,CDaoDatabase* pDBTarget)
- {
- CRenameDlg dlgRename;
- dlgRename.m_strName = m_strItemName;
-
- // Find out if the querydef exists already
- CDaoQueryDefInfo queryInfo;
- int nQueryDefCount = pDBTarget->GetQueryDefCount();
- for (int i=0; i < nQueryDefCount; i++)
- {
- pDBTarget->GetQueryDefInfo(i,queryInfo);
- if (queryInfo.m_strName == dlgRename.m_strName)
- {
- if (dlgRename.DoModal() == IDCANCEL)
- return FALSE;
- i--;
- }
- }
-
- CDaoQueryDef qdTarget(pDBTarget);
-
- try
- {
- pDBSource->GetQueryDefInfo(m_strItemName,queryInfo,AFX_DAO_ALL_INFO);
-
- qdTarget.Create(dlgRename.m_strName,queryInfo.m_strSQL);
-
- qdTarget.Append();
- qdTarget.Close();
- }
- catch (CDaoException* e)
- {
- DisplayDaoException(e);
- e->Delete();
- }
-
- m_strItemName = dlgRename.m_strName;
- return TRUE;
- }
-