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

📄 listexportdlg.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
// ListExportDlg.cpp : implementation file
//

#include "stdafx.h"

#include "ListExportDlg.h"
#include <io.h>

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

/////////////////////////////////////////////////////////////////////////////
// class CExportDB

CExportDB::CExportDB( )
{
	m_pTableDef		=	NULL;
	m_pRecord		=	NULL;
}

CExportDB::~CExportDB( )
{
	CloseAllDB( );
}

CString CExportDB::ESCString( CString &string )
{
	CString	strResult;
	for( int i=0; i<string.GetLength(); i++ )
	{
		char ch = string.GetAt(i);
		if( ch == '\\' || ch == '\'' )
			strResult	+=	"\\";
		strResult	+=	ch;
	}
	return strResult;
}

CString CExportDB::ESCCSVString( CString &string )
{
	CString	strResult;
	for( int i=0; i<string.GetLength(); i++ )
	{
		char ch = string.GetAt(i);
		if( ch == '\\' || ch == '\'' || ch == ',' )
			strResult	+=	"\\";
		strResult	+=	ch;
	}
	return strResult;
}

BOOL CExportDB::ExecuteODBCFile( CString strODBCDest )
{
	if( -1 != strODBCDest.Find( "DSN=Excel" )
		|| -1 != strODBCDest.Find( "DSN=MS Access Database" ) )
	{
		int nIndex	=	strODBCDest.Find( "DBQ=" );
		if( -1 != nIndex )
		{
			CString	strDBQ	=	strODBCDest.Mid( nIndex+4 );
			nIndex	=	strDBQ.Find( ";" );
			if( -1 != nIndex )
				strDBQ	=	strDBQ.Left( nIndex );
			ShellExecute( NULL, "open", strDBQ, NULL, NULL, SW_SHOW );
			return TRUE;
		}
	}
	else
	{
		int nIndex	=	strODBCDest.Find( "DefaultDir=" );
		if( -1 != nIndex )
		{
			CString	strDefaultDir	=	strODBCDest.Mid( nIndex + 11 );
			nIndex	=	strDefaultDir.Find( ";" );
			if( -1 != nIndex )
				strDefaultDir	=	strDefaultDir.Left( nIndex );
			ShellExecute( NULL, "open", strDefaultDir, NULL, NULL, SW_SHOW );
			return TRUE;
		}
	}
	return FALSE;
}

BOOL CExportDB::SetTableColumn( CStringArray & astrColumnName, CUIntArray & anWidth )
{
	ASSERT( astrColumnName.GetSize() == anWidth.GetSize() );
	if( astrColumnName.GetSize() != anWidth.GetSize() )
		return FALSE;

	m_astrColumnName.Copy( astrColumnName );
	m_anColumnWidth.Copy( anWidth );
	ASSERT( m_astrColumnName.GetSize() > 0 );
	return m_astrColumnName.GetSize() > 0;
}

BOOL CExportDB::OpenTxtDB( LPCTSTR lpszTxtDest, BOOL bTxtPath )
{
	if( NULL == lpszTxtDest || strlen(lpszTxtDest) <= 0 )
	{
		ASSERT( FALSE );
		return FALSE;
	}
	if( bTxtPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( lpszTxtDest ) )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	CloseTxtDB( );
	m_strTxtDest	=	lpszTxtDest;
	m_bTxtPath		=	bTxtPath;
	return TRUE;
}

BOOL CExportDB::OpenTxtTable( LPCTSTR lpszTableName, BOOL bOverwrite )
{
	if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	if( m_strTxtDest.GetLength() == 0		/* Txt DB Not Open */
		|| m_astrColumnName.GetSize() == 0	/* Not Set Table Column */ )
	{
		ASSERT( FALSE );
		return FALSE;
	}
	
	// Path Txt DB
	if( m_bTxtPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( m_strTxtDest ) )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	CloseTxtTable( );

	// Path Txt DB
	CString	strTxtFile	=	m_strTxtDest;
	if( m_bTxtPath )
		strTxtFile	=	m_strTxtDest + lpszTableName + ".txt";

	UINT nOpenFlags = CFile::modeCreate | CFile::modeWrite;
	if( !bOverwrite )
		nOpenFlags	|=	CFile::modeNoTruncate;
	if( !m_fileTxt.Open( strTxtFile, nOpenFlags ) )
		return FALSE;

	m_fileTxt.SeekToEnd();

	if( bOverwrite )
	{
		m_fileTxt.WriteString( CString(lpszTableName) + "\n"/*STRING_CRLF*/ );

		int	nStrLenTotal = 0, cxTotal = 0;
		for( int nCol=0; nCol < m_astrColumnName.GetSize(); nCol ++ )
		{
			int	nColWidth	=	m_anColumnWidth[nCol];
			CString	strText	=	m_astrColumnName.ElementAt(nCol);
			strText	+=	" ";
			while( ( (nStrLenTotal+strText.GetLength()) * 6 ) < cxTotal+nColWidth )
				strText	=	" " + strText;

			m_fileTxt.WriteString( strText );
			nStrLenTotal	+=	strText.GetLength();
			cxTotal			+=	nColWidth;
		}
		m_fileTxt.WriteString( "\n"/*STRING_CRLF*/ );
	}
	return TRUE;
}

BOOL CExportDB::OpenMdbDB( LPCTSTR lpszMdbDest )
{
	if( NULL == lpszMdbDest || strlen(lpszMdbDest) <= 0 )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	TRY
	{
		CloseMdbDB( );

		if( 0 == access( lpszMdbDest, 0 ) )
			m_mdb.Open( lpszMdbDest );
		else
			m_mdb.Create( lpszMdbDest );
	}
	CATCH( CDaoException, e )
	{
		CloseMdbDB();
		e->ReportError( );
		return FALSE;
	}
	END_CATCH

	return m_mdb.IsOpen();
}

BOOL CExportDB::OpenMdbTable( LPCTSTR lpszTableName, BOOL bOverwrite )
{
	if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
	{
		ASSERT( FALSE );
		return FALSE;
	}
	TRY
	{
		if( !m_mdb.IsOpen() || m_astrColumnName.GetSize() <= 0 )
		{
			ASSERT( FALSE );
			return FALSE;
		}
		CloseMdbTable();

		CString	strTableName	=	lpszTableName;

		BOOL	bCreateNew	=	bOverwrite;
		if( !bOverwrite )
		{
			try {
				CDaoTableDefInfo	tabledefinfo;
				m_mdb.GetTableDefInfo( strTableName, tabledefinfo );

				CDaoTableDef	tabledef( &m_mdb );
				tabledef.Open( strTableName );
				if( !tabledef.IsOpen() )
					bCreateNew	=	TRUE;
				else
				{
					if( m_astrColumnName.GetSize() != tabledef.GetFieldCount() )
						bCreateNew	=	TRUE;
					CDaoFieldInfo	fieldinfo;
					for( int i=0; i<tabledef.GetFieldCount(); i++ )
					{
						tabledef.GetFieldInfo( i, fieldinfo, AFX_DAO_ALL_INFO );
						bCreateNew	|=	( 0 != fieldinfo.m_strName.Compare(m_astrColumnName[i]) );
						bCreateNew	|=	( dbText != fieldinfo.m_nType );
						bCreateNew	|=	( 255 != fieldinfo.m_lSize );
						bCreateNew	|=	(! ( (dbVariableField | dbUpdatableField) & fieldinfo.m_lAttributes) );
					}
					tabledef.Close();
				}
			}catch( CDaoException * e ) {
				e->Delete();
				bCreateNew	=	TRUE;
			}
		}

		if( bCreateNew )
		{
			// Create New Table
			int	nCount	=	1;
			while( TRUE )
			{
				try {
					if( 1 != nCount )
						strTableName.Format( "%s%d", lpszTableName, nCount );
					CDaoTableDefInfo	tabledefinfo;
					m_mdb.GetTableDefInfo( strTableName, tabledefinfo );
				}catch ( CDaoException * e){
					e->Delete();
					break;
				}
				nCount	++;
			}

			//	create strTableName.
			CDaoTableDef	tabledef( &m_mdb );
			tabledef.Create( strTableName );

			//	def strTableName's field.
			CDaoFieldInfo	fieldinfo;

			fieldinfo.m_bRequired	=	false;
			fieldinfo.m_lCollatingOrder	=	dbSortGeneral;
			fieldinfo.m_strSourceTable	=	strTableName;
			for( int i=0; i<m_astrColumnName.GetSize(); i++ )
			{
				fieldinfo.m_bAllowZeroLength	=	true;
				fieldinfo.m_nOrdinalPosition	=	i+1;
				fieldinfo.m_strName	=	ESCString(m_astrColumnName[i]);
				fieldinfo.m_lSize	=	255;
				fieldinfo.m_nType		=	dbText;
				fieldinfo.m_lAttributes	=	dbVariableField | dbUpdatableField;
				fieldinfo.m_strSourceField	=	ESCString(m_astrColumnName[i]);
				tabledef.CreateField( fieldinfo );
			}
			tabledef.Append( );
			tabledef.Close( );
			// CreateNew End
		}

		//	Open Table
		if( !m_mdb.IsOpen( ) )
			return FALSE;
		m_pTableDef	=	new	CDaoTableDef( &m_mdb );
		m_pTableDef->Open( strTableName );
		m_pRecord	=	new	CDaoRecordset( &m_mdb );
		m_pRecord->Open( m_pTableDef, dbOpenDynaset );
		if( !m_pRecord->IsOpen() || !m_pTableDef->IsOpen() )
		{
			CloseMdbTable();
			return FALSE;
		}
	}
	CATCH( CDaoException, e )
	{
		CloseMdbTable();
		e->ReportError( );
		return FALSE;
	}
	END_CATCH

	return TRUE;
}

BOOL CExportDB::OpenCsvDB( LPCTSTR lpszCsvDest, BOOL bCsvPath )
{
	if( NULL == lpszCsvDest || strlen(lpszCsvDest) <= 0 )
	{
		ASSERT( FALSE );
		return FALSE;
	}
	if( bCsvPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( lpszCsvDest ) )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	CloseCsvDB( );
	m_strCsvDest	=	lpszCsvDest;
	m_bCsvPath		=	bCsvPath;
	return TRUE;
}

BOOL CExportDB::OpenCsvTable( LPCTSTR lpszTableName, BOOL bOverwrite )
{
	if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	if( m_strCsvDest.GetLength() == 0		/* Csv DB Not Open */
		|| m_astrColumnName.GetSize() == 0	/* Not Set Table Column */ )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	// Path Csv DB
	if( m_bCsvPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( m_strCsvDest ) )
	{
		ASSERT( FALSE );
		return FALSE;
	}

	CloseCsvTable( );

	CString	strCsvFile	=	m_strCsvDest;
	if( m_bCsvPath )
		strCsvFile	=	m_strCsvDest + lpszTableName + ".csv";

	UINT nOpenFlags = CFile::modeCreate | CFile::modeWrite;
	if( !bOverwrite )
		nOpenFlags	|=	CFile::modeNoTruncate;
	if( !m_fileCsv.Open( strCsvFile, nOpenFlags ) )
	{
		return FALSE;
	}

	m_fileCsv.SeekToEnd();

	if( bOverwrite )
	{
		m_fileCsv.WriteString( CString(lpszTableName) + "\n" );
		
		CString	strText;
		for( int nCol=0; nCol < m_astrColumnName.GetSize(); nCol ++ )
		{
			int	nColWidth	=	m_anColumnWidth[nCol];
			if( strText.GetLength() > 0 )
				strText	+=	",";
			strText	+=	m_astrColumnName.ElementAt(nCol);
		}
		m_fileCsv.WriteString( strText );
		m_fileCsv.WriteString( "\n" );
	}
	return TRUE;
}

BOOL CExportDB::OpenODBCDB( LPCTSTR lpszDSN )
{
	TRY
	{
		CloseODBCDB( );

		if( !m_dbODBC.Open(lpszDSN, FALSE, FALSE, _T("ODBC;"), FALSE) )
			return FALSE;

		return TRUE;
	}
	CATCH(CException, e)
	{
		CloseODBCDB( );
		if(e)	e->ReportError( );
		return FALSE;
	}
	END_CATCH
}

BOOL CExportDB::OpenODBCTable( LPCTSTR lpszTableName, BOOL bOverwrite )
{
	if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
	{

⌨️ 快捷键说明

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