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

📄 newadoview.cpp

📁 随着计算机信息技术的飞速发展
💻 CPP
字号:
// NewADOView.cpp : implementation of the CNewADOView class
//

#include "stdafx.h"
#include "NewADO.h"

#include "NewADODoc.h"
#include "NewADOView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CNewADOView

IMPLEMENT_DYNCREATE(CNewADOView, CListView)

BEGIN_MESSAGE_MAP(CNewADOView, CListView)
	//{{AFX_MSG_MAP(CNewADOView)
	ON_WM_CREATE()
	ON_WM_RBUTTONDOWN()
	ON_COMMAND(ID_SHOW_TABLE, OnShowTable)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNewADOView construction/destruction

CNewADOView::CNewADOView()
{
	// TODO: add construction code here

}

CNewADOView::~CNewADOView()
{
}

BOOL CNewADOView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CNewADOView drawing

void CNewADOView::OnDraw(CDC* pDC)
{
	CNewADODoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}
/*
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
   no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>

// Note 1
inline void TESTHR( HRESULT _hr ) 
   { if FAILED(_hr) _com_issue_error(_hr); }

void main(void)
{
   CoInitialize(NULL);
   try 
   {
   _RecordsetPtr   pRs("ADODB.Recordset");
   _ConnectionPtr  pCn("ADODB.Connection");
   _variant_t      vtTableName("authors"),
                   vtCriteria;
   long            ix[1];
   SAFEARRAY       *pSa = NULL;

   pCn->Open("DSN=pubs;Integrated Security=SSPI;
      Provider=MSDASQL;", "", "", 
               adConnectUnspecified);
// Note 2, Note 3
   pSa = SafeArrayCreateVector(VT_VARIANT, 1, 4);
   if (!pSa) _com_issue_error(E_OUTOFMEMORY);

// Specify TABLE_NAME in the third array element (index of 2). 

   ix[0] = 2;      
   TESTHR(SafeArrayPutElement(pSa, ix, &vtTableName));

//   There is no Variant constructor for a SafeArray, so manually set the 
//   type (SafeArray of Variant) and value (pointer to a SafeArray).

   vtCriteria.vt = VT_ARRAY | VT_VARIANT;
   vtCriteria.parray = pSa;

   pRs = pCn->OpenSchema(adSchemaColumns, vtCriteria, vtMissing);

   long limit = pRs->GetFields()->Count;
   for (long x = 0; x < limit; x++)
      printf("%d: %s\n", x+1, 
         ((char*) pRs->GetFields()->Item[x]->Name));
// Note 4
   pRs->Close();
   pCn->Close();
   }
   catch (_com_error &e)
   {
   printf("Error:\n");
   printf("Code = %08lx\n", e.Error());
   printf("Code meaning = %s\n", (char*) e.ErrorMessage());
   printf("Source = %s\n", (char*) e.Source());
   printf("Description = %s\n", (char*) e.Description());
   }
   CoUninitialize();
*/

void CNewADOView::OnInitialUpdate()
{
	CListView::OnInitialUpdate();

	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
	/*
	CListCtrlEx &ctlList =(CListCtrlEx &)GetListCtrl();
	ctlList.AddColumn("First Column",0);
	ctlList.AddColumn("Second Column",1);
	ctlList.AddColumn("Third Column",3);
	ctlList.AddItem(0,0,"First Row");
	ctlList.AddItem(1,0,"Second Row");
	*/
	//ShowTable(CString("订单明细"));
	//ShowTable(CString("客户"));
	//ShowTable(CString("运货商"));
	//ShowTable(CString("产品"));
	//ShowTable(CString("Employer"));
	//Retrieve(CString("Employer"));
	OnShowTable();
}

/////////////////////////////////////////////////////////////////////////////
// CNewADOView printing

BOOL CNewADOView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CNewADOView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CNewADOView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CNewADOView diagnostics

#ifdef _DEBUG
void CNewADOView::AssertValid() const
{
	CListView::AssertValid();
}

void CNewADOView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CNewADODoc* CNewADOView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNewADODoc)));
	return (CNewADODoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CNewADOView message handlers



int CNewADOView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	lpCreateStruct->style |= LVS_REPORT;
 	//lpCreateStruct->dwExStyle|=LVS_REPORT;
	if (CListView::OnCreate(lpCreateStruct) == -1)
		return -1;
	//ShowTable();
	return 0;
}

void CNewADOView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	Retrieve(CString("Employer"),CString("  姓名  "),CString("  性别  "),CString(""),CString("姓名"),CString("性别"),CString(""));
	CListView::OnRButtonDown(nFlags, point);

}
/*
void CNewADOView::Retrieve(CString &sTablename)
{
	_RecordsetPtr pRecordSet;
	CNewADODoc * pDoc;
	pDoc = GetDocument();
	sTablename="SELECT * FROM "+sTablename;
	//_bstr_t bstrQuery("SELECT * FROM 客户");
	_bstr_t bstrQuery((LPCTSTR)sTablename);
	_variant_t vRecsAffected(0L);
	
	try
	{
		pRecordSet = pDoc->m_pConnection->Execute(bstrQuery, &vRecsAffected,\
			adOptionUnspecified);
		if (!pRecordSet->GetadoEOF())
		{
			CListCtrlEx& ctlList = (CListCtrlEx&) GetListCtrl();
			ctlList.DeleteAllItems();
			while(ctlList.DeleteColumn(0));
			
			ctlList.AddColumn("  姓名  ",0);
			ctlList.AddColumn("  性别   ",1);
			
			int i = 0;
			_variant_t vFirstName;
			_variant_t vLastName;
			while (!pRecordSet->GetadoEOF())
			{
				vFirstName = pRecordSet->GetCollect(L"姓名");
				ctlList.AddItem(i,0,(_bstr_t) vFirstName);
				vLastName = pRecordSet->GetCollect(L"性别");//单位数量");
				ctlList.AddItem(i,1,(_bstr_t) vLastName);
				i++;
				pRecordSet->MoveNext();
			}
		}
		pRecordSet->Close();
	}
	catch( _com_error &e )
	{
		// Get info from _com_error
		_bstr_t bstrSource(e.Source());
		_bstr_t bstrDescription(e.Description());
		TRACE( "Exception thrown for classes generated by #import" );
		TRACE( "\tCode = %08lx\n", e.Error());
		TRACE( "\tCode meaning = %s\n", e.ErrorMessage());
		TRACE( "\tSource = %s\n", (LPCTSTR) bstrSource);
		TRACE( "\tDescription = %s\n", (LPCTSTR) bstrDescription);
	}
	catch(...)
	{
		TRACE( "*** Unhandled Exception ***" );
	}
}
*/
void CNewADOView::Retrieve( const CString &sFirst, ...)
{
   //if( bReset )
   //int i = iFirst;
	_RecordsetPtr pRecordSet;
	CNewADODoc * pDoc;
	pDoc = GetDocument();
	CString sTemp = sFirst;
	CString sTablename="SELECT * FROM "+sTemp;
	_bstr_t bstrQuery((LPCTSTR)sTablename);
	_variant_t vRecsAffected(0L);
	try
	{
		pRecordSet = pDoc->m_pConnection->Execute(bstrQuery, &vRecsAffected,\
			adOptionUnspecified);
		if (!pRecordSet->GetadoEOF())
		{
			CListCtrlEx& ctlList = (CListCtrlEx&) GetListCtrl();
			ctlList.DeleteAllItems();
			while(ctlList.DeleteColumn(0));
			va_list marker;
			va_start( marker, sFirst );     /* Initialize variable arguments. */
			int j=0;
			do
			{
				sTemp = va_arg( marker, CString);
				int i = 0;
				_variant_t vName;
				vName = pRecordSet->GetCollect((_bstr_t)sTemp);
				ctlList.AddItem(i++,j,(_bstr_t) vName);
			}while( sTemp.IsEmpty() );
			va_start( marker, sTemp );     /* Initialize variable arguments. */
			while (!pRecordSet->GetadoEOF())
			{
				va_start( marker, sTemp );     /* Initialize variable arguments. */
				CString sTemp1;
				do
				{
					sTemp1 = va_arg( marker, CString);
					int i = 0;
					_variant_t vName;
					vName = pRecordSet->GetCollect((_bstr_t)sTemp1);
					ctlList.AddItem(i++,j,(_bstr_t) vName);
				}
				while(sTemp1.IsEmpty() );
				va_end( marker );              /* Reset variable arguments.      */		
				j++;
			}
		}
		pRecordSet->Close();
	}
	catch( _com_error &e )
	{
		// Get info from _com_error
		_bstr_t bstrSource(e.Source());
		_bstr_t bstrDescription(e.Description());
		TRACE( "Exception thrown for classes generated by #import" );
		TRACE( "\tCode = %08lx\n", e.Error());
		TRACE( "\tCode meaning = %s\n", e.ErrorMessage());
		TRACE( "\tSource = %s\n", (LPCTSTR) bstrSource);
		TRACE( "\tDescription = %s\n", (LPCTSTR) bstrDescription);
	}
	catch(...)
	{
		TRACE( "*** Unhandled Exception ***" );
	}
}

void CNewADOView::ShowTable(const CString &sTablename)
{
	_RecordsetPtr pRecordSet;
	CNewADODoc * pDoc;
	pDoc = GetDocument();
	CString sCommand = "SELECT * FROM "+m_SelDlg.m_sTablename;
	//_bstr_t bstrQuery("SELECT * FROM 客户");
	_bstr_t bstrQuery((LPCTSTR)sCommand);
	_variant_t vRecsAffected(0L);
	
	try
	{
		pRecordSet = pDoc->m_pConnection->Execute(bstrQuery, &vRecsAffected,\
			adOptionUnspecified);
		if (!pRecordSet->GetadoEOF())
		{
			CListCtrlEx& ctlList = (CListCtrlEx&) GetListCtrl();
			ctlList.DeleteAllItems();
			while(ctlList.DeleteColumn(0));
			
			//long limit = pRs->GetFields()->Count;
			for (long x = 0; x < pRecordSet->GetFields()->Count; x++){
				CString sCol= (LPCTSTR)pRecordSet->GetFields()->Item[x]->Name;
				int iLength=pRecordSet->GetFields()->Item[x]->DefinedSize;
				sCol=CString(' ',(iLength-sCol.GetLength()+1)/2)+sCol+CString(' ',(iLength-sCol.GetLength()+1)/2);
				ctlList.AddColumn( (LPCTSTR)sCol ,(int)x); 
			}
			int i = 0;
			while (!pRecordSet->GetadoEOF())
			{
				for (long x = 0; x < pRecordSet->GetFields()->Count; x++){
					_variant_t vValue=pRecordSet->GetCollect((LPCTSTR)pRecordSet->GetFields()->Item[x]->Name);
					ctlList.AddItem(i,(int)x,(_bstr_t) vValue);
				}				
				i++;
				pRecordSet->MoveNext();
			}
		}
		pRecordSet->Close();
	}
	catch( _com_error &e )
	{
		// Get info from _com_error
		_bstr_t bstrSource(e.Source());
		_bstr_t bstrDescription(e.Description());
		TRACE( "Exception thrown for classes generated by #import" );
		TRACE( "\tCode = %08lx\n", e.Error());
		TRACE( "\tCode meaning = %s\n", e.ErrorMessage());
		TRACE( "\tSource = %s\n", (LPCTSTR) bstrSource);
		TRACE( "\tDescription = %s\n", (LPCTSTR) bstrDescription);
	}
	catch(...)
	{
		TRACE( "*** Unhandled Exception ***" );
	}
}


void CNewADOView::SelectTable()
{
	CNewADODoc * pDoc;
	pDoc = GetDocument();
	if(pDoc->m_IsConnectionOpen){

		try
		{
			_RecordsetPtr pRstSchema;
			pRstSchema = pDoc->m_pConnection->OpenSchema(adSchemaTables);
			
			while(!pRstSchema->adoEOF)
			{
				_bstr_t table_name = pRstSchema->Fields->GetItem("TABLE_NAME")->Value;
				
				m_SelDlg.m_ListBox.InsertString(-1,(LPCSTR)table_name);
				//printf("Table Name: %s\n",(LPCSTR) table_name);
				
				pRstSchema->MoveNext();
				
			}
			pRstSchema->Close();
		}
		catch (_com_error &e)
		{
			// Notify the user of errors if any.
			// Pass a connection pointer accessed from the Connection.        
			
			ErrorPtr    pErr  = NULL;
			
			if( (pDoc->m_pConnection->Errors->Count) > 0)
			{
				long nCount = pDoc->m_pConnection->Errors->Count;
				// Collection ranges from 0 to nCount -1.
				for(long i = 0;i < nCount;i++)
				{
					pErr = pDoc->m_pConnection->Errors->GetItem(i);
					TRACE("\t Error number: %x\t%s", pErr->Number,\
						pErr->Description);
				}
			}
		}
	}
}

void CNewADOView::OnShowTable() 
{
	CNewADODoc * pDoc;
	pDoc = GetDocument();
	m_SelDlg.m_IsConnectionOpen = pDoc->m_IsConnectionOpen;
	m_SelDlg.m_pConnection = pDoc->m_pConnection;
	if(m_SelDlg.DoModal()==IDOK&&!m_SelDlg.m_sTablename.IsEmpty()){
		ShowTable(CString(m_SelDlg.m_sTablename));
	}
}
	
//DEL void CNewADOView::OnFileOpen() 
//DEL {
//DEL 	CView::OnFileOpen();
//DEL 	CNewADODoc * pDoc;
//DEL 	pDoc = GetDocument();
//DEL 	pDoc->OnOpenDocument(pDoc->m_sMDBFile);
//DEL 	OnShowTable();
//DEL }
/*
void CNewADOView::OnFileOpen() 
{
 	CNewADODoc * pDoc;
 	pDoc = GetDocument();
 	pDoc->OnOpenDocument(pDoc->m_sMDBFile);
 	ShowTable();	
}
*/

⌨️ 快捷键说明

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