DBDOC.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // DBDoc.cpp : implementation of the CDBViewDoc class
  2. //
  3. // This is a part of the Microsoft Foundation Classes and
  4. // Templates (MFC&T).
  5. // Copyright (C) 1998 Microsoft Corporation
  6. // All rights reserved.
  7. //
  8. // This source code is only intended as a supplement to the
  9. // MFC&T Reference and related electronic documentation provided
  10. // with the library.  See these sources for detailed information
  11. // regarding the MFC&T product.
  12. //
  13. #include "stdafx.h"
  14. #include "DBViewer.h"
  15. #include "DBDoc.h"
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CDBViewDoc
  23. IMPLEMENT_DYNCREATE(CDBViewDoc, CDocument)
  24. BEGIN_MESSAGE_MAP(CDBViewDoc, CDocument)
  25. //{{AFX_MSG_MAP(CDBViewDoc)
  26. ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  27. //}}AFX_MSG_MAP
  28. END_MESSAGE_MAP()
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CDBViewDoc construction/destruction
  31. CDBViewDoc::CDBViewDoc()
  32. {
  33. m_pListView = NULL;
  34. m_pTreeView = NULL;
  35. }
  36. CDBViewDoc::~CDBViewDoc()
  37. {
  38. m_pListView = NULL;
  39. m_pTreeView = NULL;
  40. }
  41. BOOL CDBViewDoc::OnNewDocument()
  42. {
  43. if (!CDocument::OnNewDocument())
  44. return FALSE;
  45. // TODO: add reinitialization code here
  46. // (SDI documents will reuse this document)
  47. return TRUE;
  48. }
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CDBViewDoc serialization
  51. void CDBViewDoc::Serialize(CArchive& ar)
  52. {
  53. if (ar.IsStoring())
  54. {
  55. // TODO: add storing code here
  56. }
  57. else
  58. {
  59. // TODO: add loading code here
  60. }
  61. }
  62. /////////////////////////////////////////////////////////////////////////////
  63. // CDBViewDoc diagnostics
  64. #ifdef _DEBUG
  65. void CDBViewDoc::AssertValid() const
  66. {
  67. CDocument::AssertValid();
  68. }
  69. void CDBViewDoc::Dump(CDumpContext& dc) const
  70. {
  71. CDocument::Dump(dc);
  72. }
  73. #endif //_DEBUG
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CDBViewDoc commands
  76. void CDBViewDoc::RefreshViews()
  77. {
  78. if (m_pListView)
  79. m_pListView->EraseList();
  80. if (m_pTreeView)
  81. m_pTreeView->PopulateTree();
  82. }
  83. BOOL CDBViewDoc::OnOpenDocument(LPCTSTR lpszPathName)
  84. {
  85. if (m_Session.m_spOpenRowset != NULL)
  86. m_Session.m_spOpenRowset.Release();
  87. m_strConnect = _T("");
  88. if (m_Connect.Open(AfxGetMainWnd()->GetSafeHwnd()) != S_OK)
  89. {
  90. AfxMessageBox(_T("Unable to connect to data source"));
  91. return FALSE;
  92. }
  93. else
  94. {
  95. USES_CONVERSION;
  96. if (m_Session.Open(m_Connect) != S_OK)
  97. {
  98. AfxMessageBox(_T("Couldn't create session on data source"));
  99. return FALSE;
  100. }
  101. CComVariant var;
  102. m_Connect.GetProperty(DBPROPSET_DATASOURCEINFO, DBPROP_DATASOURCENAME, &var);
  103. m_strConnect = OLE2T(var.bstrVal);
  104. m_pTreeView->m_pSession = &m_Session;
  105. m_pListView->m_pSession = &m_Session;
  106. RefreshViews();
  107. return TRUE;
  108. }
  109. return FALSE;
  110. }
  111. CString CDBViewDoc::GetDSN()
  112. {
  113. // pull DSN from database connect string
  114. CString string = m_strConnect;
  115. //  string = string.Right(string.GetLength() - (string.Find(_T("DSN=")) + 4));
  116. //  string = string.Left(string.Find(_T(";")));
  117. return string;
  118. }
  119. CString CDBViewDoc::GetConnect()
  120. {
  121. return m_strConnect;
  122. }
  123. void CDBViewDoc::OnFileOpen()
  124. {
  125. OnOpenDocument(NULL);
  126. }
  127. CDataSource* CDBViewDoc::GetDataSource()
  128. {
  129. return &m_Connect;
  130. }