www.gusucode.com > VC++编写的SQL服务端和客户端源码程序 > VC++编写的SQL服务端和客户端源码程序\code\Server\miniSQLDoc.cpp

    //Download by http://www.NewXing.com
// miniSQLDoc.cpp : implementation of the CMiniSQLDoc class
//

#include "stdafx.h"
#include "miniSQL.h"

#include "miniSQLDoc.h"
#include "miniSQLView.h"
#include "StepExec.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMiniSQLDoc

IMPLEMENT_DYNCREATE(CMiniSQLDoc, CDocument)

BEGIN_MESSAGE_MAP(CMiniSQLDoc, CDocument)
	//{{AFX_MSG_MAP(CMiniSQLDoc)
	ON_COMMAND(ID_OP_EXEC, OnOpExec)
	ON_COMMAND(ID_OP_STEP_EXEC, OnOpStepExec)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMiniSQLDoc construction/destruction

CMiniSQLDoc::CMiniSQLDoc()
{
	memset(&m_lf, 0, sizeof(m_lf));
	m_lf.lfWeight = FW_NORMAL;
	m_lf.lfCharSet = DEFAULT_CHARSET;
	m_lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
	m_lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
	m_lf.lfQuality = DEFAULT_QUALITY;
	m_lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
	strcpy(m_lf.lfFaceName, "宋体");
}

CMiniSQLDoc::~CMiniSQLDoc()
{
}

BOOL CMiniSQLDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	((CCrystalEditView* )m_viewList.GetHead())->SetWindowText("");
	m_TextBuffer.InitNew();

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CMiniSQLDoc serialization

void CMiniSQLDoc::Serialize(CArchive& ar)
{
	CCrystalEditView* pView = (CCrystalEditView*)m_viewList.GetHead();
	ASSERT_VALID(pView);
	ASSERT_KINDOF(CCrystalEditView, pView);

	if (ar.IsStoring())	
	{
	} 
	else 
	{
	}

	ASSERT_VALID(this);
}

/////////////////////////////////////////////////////////////////////////////
// CMiniSQLDoc diagnostics

#ifdef _DEBUG
void CMiniSQLDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CMiniSQLDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMiniSQLDoc commands

BOOL CMiniSQLDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	return m_TextBuffer.LoadFromFile(lpszPathName);
}

BOOL CMiniSQLDoc::OnSaveDocument(LPCTSTR lpszPathName) 
{
	return m_TextBuffer.SaveToFile(lpszPathName);
}

void CMiniSQLDoc::DeleteContents() 
{
	CDocument::DeleteContents();
	m_TextBuffer.FreeAll();
}

void CMiniSQLDoc::OnOpExec() 
{
	CMiniSQLView* pView = (CMiniSQLView *)m_viewList.GetHead();
	ASSERT_VALID( pView );
	ASSERT_KINDOF( CMiniSQLView, pView );

	CString str;
	if( m_TextBuffer.GetLineCount () > 0 )
//		&& (m_TextBuffer.GetLineLength(m_TextBuffer.GetLineCount ()-1) >0) )
		m_TextBuffer.GetText(0,0,m_TextBuffer.GetLineCount ()-1,
			m_TextBuffer.GetLineLength(m_TextBuffer.GetLineCount ()-1),str);
	else
		str = _T("");
	
	CStepExec* pExec = new CStepExec( str );
	try
	{
		pExec->Exec();
	}
	catch( Error& e )
	{
		Message( e.GetErrStr() );
		pView->SetSelection( CPoint( 0, pExec->LineNo()-1 ), 
			CPoint( m_TextBuffer.GetLineLength( pExec->LineNo()-1 ), pExec->LineNo()-1 ) );
		delete pExec;
		return ;
	}
}

void CMiniSQLDoc::OnOpStepExec() 
{
	CMiniSQLView* pView = (CMiniSQLView *)m_viewList.GetHead();
	ASSERT_VALID( pView );
	ASSERT_KINDOF( CMiniSQLView, pView );

	CString str;
	if( m_TextBuffer.GetLineCount () > 0 )
//		&& (m_TextBuffer.GetLineLength(m_TextBuffer.GetLineCount ()-1) >0) )
		m_TextBuffer.GetText(0,0,m_TextBuffer.GetLineCount ()-1,
			m_TextBuffer.GetLineLength(m_TextBuffer.GetLineCount ()-1),str);
	else
		str = _T("");
	
	CStepExec* pExec = new CStepExec( str );
	try
	{
		pExec->SingleExec();
	}
	catch( Error& e )
	{
		Message( e.GetErrStr() );
		pView->SetSelection( CPoint( 0, pExec->LineNo()-1 ), 
			CPoint( m_TextBuffer.GetLineLength( pExec->LineNo()-1 ), pExec->LineNo()-1 ) );
		delete pExec;
		return ;
	}	
}