📄 newadoview.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 + -