home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / database / catalog / catalvw.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  4KB  |  159 lines

  1. // catalvw.cpp : implementation of the CCatalogView class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13.  
  14. #include "stdafx.h"
  15. #include "catalog.h"
  16.  
  17. #include "tableset.h"
  18. #include "columnst.h"
  19. #include "cataldoc.h"
  20. #include "catalvw.h"
  21.  
  22. #ifdef _DEBUG
  23. #undef THIS_FILE
  24. static char BASED_CODE THIS_FILE[] = __FILE__;
  25. #endif
  26.  
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CCatalogView
  29.  
  30. IMPLEMENT_DYNCREATE(CCatalogView, CRecordView)
  31.  
  32. BEGIN_MESSAGE_MAP(CCatalogView, CRecordView)
  33.     //{{AFX_MSG_MAP(CCatalogView)
  34.     ON_UPDATE_COMMAND_UI(ID_APP_EXIT, OnUpdateAppExit)
  35.     //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37.  
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CCatalogView construction/destruction
  40.  
  41. CCatalogView::CCatalogView()
  42.     : CRecordView(CCatalogView::IDD)
  43. {
  44.     //{{AFX_DATA_INIT(CCatalogView)
  45.     m_pSet = NULL;
  46.     //}}AFX_DATA_INIT
  47.     // TODO: add construction code here
  48. }
  49.  
  50. CCatalogView::~CCatalogView()
  51. {
  52. }
  53.  
  54. void CCatalogView::DoDataExchange(CDataExchange* pDX)
  55. {
  56.     CRecordView::DoDataExchange(pDX);
  57.     //{{AFX_DATA_MAP(CCatalogView)
  58.     DDX_Control(pDX, IDC_COLUMNS, m_lbColumns);
  59.     DDX_FieldText(pDX, IDC_NAME, m_pSet->m_strName, m_pSet);
  60.     DDX_FieldText(pDX, IDC_OWNER, m_pSet->m_strOwner, m_pSet);
  61.     DDX_FieldText(pDX, IDC_TYPE, m_pSet->m_strType, m_pSet);
  62.     DDX_FieldText(pDX, IDC_REMARK, m_pSet->m_strRemarks, m_pSet);
  63.     //}}AFX_DATA_MAP
  64. }
  65.  
  66. void CCatalogView::OnInitialUpdate()
  67. {
  68.     m_pSet = &GetDocument()->m_tableSet;
  69.     m_pSet->m_strTypeParam = "'TABLE'";
  70.     CRecordView::OnInitialUpdate();
  71.  
  72.     try
  73.     {
  74.         if (m_pSet->IsOpen())
  75.         {
  76.             // Flush pending results for drivers that don't
  77.             // support multiple hstmt's
  78.             m_pSet->MoveLast();
  79.             m_pSet->MoveFirst();
  80.             FillColumnsListBox();
  81.         }
  82.         else
  83.             m_pSet->ThrowDBException(AFX_SQL_ERROR_CONNECT_FAIL);
  84.     }
  85.  
  86.     catch( CDBException* e )
  87.     {
  88.         e->ReportError(MB_ICONEXCLAMATION);
  89.     }
  90. }
  91.  
  92.  
  93. #ifdef _DEBUG
  94. void CCatalogView::AssertValid() const
  95. {
  96.     CRecordView::AssertValid();
  97. }
  98.  
  99. void CCatalogView::Dump(CDumpContext& dc) const
  100. {
  101.     CRecordView::Dump(dc);
  102. }
  103.  
  104. CCatalogDoc* CCatalogView::GetDocument() // non-debug version is inline
  105. {
  106.     return STATIC_DOWNCAST(CCatalogDoc, m_pDocument);
  107. }
  108. #endif //_DEBUG
  109.  
  110. /////////////////////////////////////////////////////////////////////////////
  111. // CCatalogView database support
  112.  
  113. CRecordset* CCatalogView::OnGetRecordset()
  114. {
  115.     return m_pSet;
  116. }
  117.  
  118. BOOL CCatalogView::OnMove(UINT nIDMoveCommand)
  119. {
  120.     if (!CRecordView::OnMove(nIDMoveCommand))
  121.         return FALSE;
  122.  
  123.     FillColumnsListBox();
  124.     return TRUE;
  125. }
  126.  
  127. void CCatalogView::FillColumnsListBox()
  128. {
  129.     ASSERT(!m_Columns.IsOpen());
  130.  
  131.     m_Columns.m_strQualifierParam = m_pSet->m_strQualifier;
  132.     m_Columns.m_strOwnerParam = m_pSet->m_strOwner;
  133.     m_Columns.m_strTableNameParam = m_pSet->m_strName;
  134.  
  135.     if (m_Columns.m_pDatabase == NULL)
  136.         m_Columns.m_pDatabase = m_pSet->m_pDatabase;
  137.  
  138.     if (!m_Columns.Open())
  139.         return;
  140.  
  141.     m_lbColumns.ResetContent();
  142.     while (!m_Columns.IsEOF())
  143.     {
  144.         m_lbColumns.AddString(m_Columns.m_strColumnName +
  145.             " (" + m_Columns.m_strTypeName + ')');
  146.         m_Columns.MoveNext();
  147.     }
  148.  
  149.     m_Columns.Close();
  150. }
  151.  
  152. /////////////////////////////////////////////////////////////////////////////
  153. // CCatalogView message handlers
  154.  
  155. void CCatalogView::OnUpdateAppExit(CCmdUI* pCmdUI)
  156. {
  157.     pCmdUI->Enable(TRUE);
  158. }
  159.