📄 listexportdlg.cpp.svn-base
字号:
ASSERT( FALSE );
return FALSE;
}
TRY
{
if( !m_dbODBC.IsOpen() || m_astrColumnName.GetSize() <= 0 )
{
ASSERT( FALSE );
return FALSE;
}
CloseODBCTable();
// Get Next Table Name
CString strTableName = lpszTableName;
BOOL bCreateNew = bOverwrite;
if( !bOverwrite )
{
try {
CRecordset rec( &m_dbODBC );
if( !rec.Open( CRecordset::dynaset, "SELECT * FROM \"" + strTableName + "\"" ) )
bCreateNew = TRUE;
else
{
if( m_astrColumnName.GetSize() != rec.GetODBCFieldCount() )
bCreateNew = TRUE;
CODBCFieldInfo fieldinfo;
for( int i=0; i<rec.GetODBCFieldCount(); i++ )
{
rec.GetODBCFieldInfo( i, fieldinfo );
bCreateNew |= ( 0 != fieldinfo.m_strName.Compare(m_astrColumnName[i]) );
}
rec.Close();
}
}catch( CDaoException * e) {
e->Delete();
bCreateNew = TRUE;
}
}
if( bCreateNew )
{
// Craete New Table
int nCount = 1;
while( TRUE )
{
try {
if( 1 != nCount )
strTableName.Format( "%s%d", lpszTableName, nCount );
CRecordset rec( &m_dbODBC );
if( !rec.Open( CRecordset::dynaset, "SELECT * FROM \"" + strTableName + "\"" ) )
break;
rec.Close( );
}catch ( CDBException * e ){
e->Delete();
break;
}
nCount ++;
}
// Create Table
CString sqlCreateTable = "CREATE TABLE \"" + strTableName + "\" (";
for( int k=0; k<m_astrColumnName.GetSize(); k++ )
sqlCreateTable += ( "\"" + ESCString(m_astrColumnName[k]) + "\"" + ( k==m_astrColumnName.GetSize()-1 ? " VARCHAR(255))" : " VARCHAR(255)," ) );
m_dbODBC.ExecuteSQL( sqlCreateTable );
// CreateNew End
}
m_strODBCTableName = strTableName;
// Test
CRecordset rs( &m_dbODBC );
if( !rs.Open( CRecordset::dynaset, "SELECT * FROM \"" + strTableName + "\"" ) )
return FALSE;
rs.Close();
return TRUE;
}
CATCH(CException, e)
{
CloseODBCTable( );
if(e) e->ReportError( );
return FALSE;
}
END_CATCH
}
BOOL CExportDB::AddItemTxt( CStringArray &astrItemText )
{
if( CFile::hFileNull != m_fileTxt.m_hFile )
{
m_fileTxt.SeekToEnd();
int nStrLenTotal = 0, cxTotal = 0;
for( int nCol=0; nCol < astrItemText.GetSize() && nCol < m_anColumnWidth.GetSize(); nCol ++ )
{
int nColWidth = m_anColumnWidth[nCol];
CString strText = astrItemText.ElementAt(nCol);
strText = " " + 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;
}
return FALSE;
}
BOOL CExportDB::AddItemMdb( CStringArray &astrItemText )
{
TRY {
if( m_pRecord && m_pRecord->IsOpen() && m_mdb.IsOpen() )
{
m_pRecord->AddNew( );
for( int i=0; i<astrItemText.GetSize(); i++ )
{
CString strText = astrItemText.ElementAt(i);
if( strText.GetLength() >= 255 )
strText = strText.Left( 254 );
if( strText.GetLength() > 0 && strText.GetLength() < 255 )
m_pRecord->SetFieldValue( i, LPCTSTR(ESCString(strText)) );
}
m_pRecord->Update( );
return TRUE;
}
}CATCH( CException, e ) {
e->Delete();
}END_CATCH
return FALSE;
}
BOOL CExportDB::AddItemCsv( CStringArray &astrItemText )
{
if( CFile::hFileNull != m_fileCsv.m_hFile )
{
m_fileCsv.SeekToEnd();
CString strText;
for( int nCol=0; nCol < astrItemText.GetSize() && nCol < m_anColumnWidth.GetSize(); nCol ++ )
{
int nColWidth = m_anColumnWidth[nCol];
if( strText.GetLength() > 0 )
strText += ",";
strText += ESCCSVString(astrItemText.ElementAt(nCol));
}
m_fileCsv.WriteString( strText );
m_fileCsv.WriteString( "\n" );
return TRUE;
}
return FALSE;
}
BOOL CExportDB::AddItemODBC( CStringArray &astrItemText )
{
if( m_dbODBC.IsOpen() )
{
CString sqlInsert = "INSERT INTO \"" + m_strODBCTableName + "\" VALUES(";
for( int k=0; k<astrItemText.GetSize(); k++ )
sqlInsert += ( "\'" + ESCString(astrItemText[k]) + ( k==astrItemText.GetSize()-1 ? "\')" : "\'," ) );
TRY {
m_dbODBC.ExecuteSQL( sqlInsert );
return TRUE;
} CATCH ( CException, e ) {
e->Delete();
} END_CATCH
}
return FALSE;
}
void CExportDB::CloseTxtDB( )
{
CloseTxtTable();
m_strTxtDest.Empty();
m_bTxtPath = FALSE;
}
void CExportDB::CloseTxtTable( )
{
if( CFile::hFileNull != m_fileTxt.m_hFile )
m_fileTxt.Close();
}
void CExportDB::CloseMdbDB( )
{
try
{
CloseMdbTable();
if( m_mdb.IsOpen() )
m_mdb.Close();
}
catch( CDaoException * e )
{
e->Delete();
TRACE( "Close Mdb Exception\n" );
}
}
void CExportDB::CloseMdbTable( )
{
try
{
if( m_pRecord && m_pRecord->IsOpen() )
m_pRecord->Close();
if( m_pRecord )
{
delete m_pRecord;
m_pRecord = NULL;
}
if( m_pTableDef && m_pTableDef->IsOpen() )
m_pTableDef->Close();
if( m_pTableDef )
{
delete m_pTableDef;
m_pTableDef = NULL;
}
}
catch( CDaoException * e )
{
e->Delete();
TRACE( "Close Mdb Exception\n" );
}
}
void CExportDB::CloseCsvDB( )
{
CloseCsvTable( );
m_strCsvDest.Empty();
m_bCsvPath = FALSE;
}
void CExportDB::CloseCsvTable( )
{
if( CFile::hFileNull != m_fileCsv.m_hFile )
m_fileCsv.Close();
}
void CExportDB::CloseODBCDB( )
{
try
{
CloseODBCTable( );
if( m_dbODBC.IsOpen() )
m_dbODBC.Close();
}
catch(...)
{
TRACE(_T("Errors occurred.\n"));
}
}
void CExportDB::CloseODBCTable( )
{
TRY
{
if( m_dbODBC.IsOpen() )
{
// Close and Reopen to Flush Data
CString strConnect = m_dbODBC.GetConnect();
m_dbODBC.Close();
m_dbODBC.Open( strConnect, FALSE, FALSE, _T("ODBC;"), FALSE);
}
}
CATCH(CException, e)
{
if(e) e->ReportError( );
}
END_CATCH
}
BOOL CExportDB::OpenAllDB(CString strTxt, BOOL bTxtPath, CString strMdb,
CString strCsv, BOOL bCsvPath, CString strODBC, BOOL bReportError )
{
BOOL bRet = TRUE;
if( strTxt.GetLength() > 0 )
{
bRet &= OpenTxtDB( strTxt, bTxtPath );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRTXTDEST, MB_OK | MB_ICONINFORMATION );
}
if( strMdb.GetLength() > 0 )
{
bRet &= OpenMdbDB( strMdb );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRMDBDEST, MB_OK | MB_ICONINFORMATION );
}
if( strCsv.GetLength() > 0 )
{
bRet &= OpenCsvDB( strCsv, bCsvPath );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRCSVDEST, MB_OK | MB_ICONINFORMATION );
}
if( strODBC.GetLength() > 0 )
{
bRet &= OpenODBCDB( strODBC );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRODBCDEST, MB_OK | MB_ICONINFORMATION );
}
if( !bRet )
CloseAllDB( );
return bRet;
}
BOOL CExportDB::OpenAllTable( LPCTSTR lpszTableName, BOOL bOverwrite, BOOL bReportError )
{
if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
{
ASSERT( FALSE );
return FALSE;
}
BOOL bRet = TRUE;
if( m_strTxtDest.GetLength() > 0 )
{
bRet &= OpenTxtTable( lpszTableName, bOverwrite );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRTXTDEST, MB_OK | MB_ICONINFORMATION );
}
if( m_mdb.IsOpen() )
{
bRet &= OpenMdbTable( lpszTableName, bOverwrite );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRMDBDEST, MB_OK | MB_ICONINFORMATION );
}
if( m_strCsvDest.GetLength() > 0 )
{
bRet &= OpenCsvTable( lpszTableName, bOverwrite );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRCSVDEST, MB_OK | MB_ICONINFORMATION );
}
if( m_dbODBC.IsOpen() )
{
bRet &= OpenODBCTable( lpszTableName, bOverwrite );
if( !bRet && bReportError )
AfxMessageBox( IDS_EXPORTDB_ERRODBCDEST, MB_OK | MB_ICONINFORMATION );
}
if( !bRet )
CloseAllTable( );
return bRet;
}
BOOL CExportDB::AddItem( CStringArray &astrItemText )
{
BOOL bRet = TRUE;
if( CFile::hFileNull != m_fileTxt.m_hFile )
{
bRet &= AddItemTxt( astrItemText );
}
if( m_pRecord && m_pRecord->IsOpen() && m_mdb.IsOpen() )
{
bRet &= AddItemMdb( astrItemText );
}
if( CFile::hFileNull != m_fileCsv.m_hFile )
{
bRet &= AddItemCsv( astrItemText );
}
if( m_dbODBC.IsOpen() )
{
bRet &= AddItemODBC( astrItemText );
}
return bRet;
}
void CExportDB::CloseAllDB( )
{
CloseTxtDB( );
CloseMdbDB( );
CloseCsvDB( );
CloseODBCDB( );
}
void CExportDB::CloseAllTable( )
{
CloseTxtTable( );
CloseMdbTable( );
CloseCsvTable( );
CloseODBCTable( );
}
/////////////////////////////////////////////////////////////////////////////
// CListExportDlg dialog
void CListExportDlg::StoreProfile( )
{
AfxGetApp()->WriteProfileInt( "listexportdlg", "txtcheck", m_bTxtCheck );
AfxGetApp()->WriteProfileInt( "listexportdlg", "mdbcheck", m_bMdbCheck );
AfxGetApp()->WriteProfileInt( "listexportdlg", "csvcheck", m_bCsvCheck );
AfxGetApp()->WriteProfileInt( "listexportdlg", "odbccheck", m_bODBCCheck );
AfxGetApp()->WriteProfileString( "listexportdlg", "txtdest", m_strTxtDest );
AfxGetApp()->WriteProfileString( "listexportdlg", "mdbdest", m_strMdbDest );
AfxGetApp()->WriteProfileString( "listexportdlg", "csvdest", m_strCsvDest );
AfxGetApp()->WriteProfileString( "listexportdlg", "odbcdest", m_strODBCDest );
AfxGetApp()->WriteProfileInt( "listexportdlg", "exeonfinish", m_bExeOnFinish );
AfxGetApp()->WriteProfileInt( "listexportdlg", "overwrite", m_bOverwrite );
}
void CListExportDlg::LoadProfile( )
{
// Initial Data
m_bTxtCheck = TRUE;
m_bExeOnFinish = TRUE;
m_bOverwrite = TRUE;
m_strTxtDest = AfxGetProfile().GetExportPath() + "StockList.txt";
m_strMdbDest = AfxGetProfile().GetExportPath() + "StockList.mdb";
m_strCsvDest = AfxGetProfile().GetExportPath() + "StockList.csv";
m_strODBCDest = "ODBC;DSN=Excel Files;DBQ="
+ AfxGetProfile().GetExportPath()
+ "StockList.xls;DefaultDir="
+ AfxGetProfile().GetExportPath()
+ ";DriverId=790;MaxBufferSize=2048;PageTimeout=5;";
m_bTxtCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "txtcheck", m_bTxtCheck );
m_bMdbCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "mdbcheck", m_bMdbCheck );
m_bCsvCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "csvcheck", m_bCsvCheck );
m_bODBCCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "odbccheck", m_bODBCCheck );
m_strTxtDest = AfxGetApp()->GetProfileString( "listexportdlg", "txtdest", m_strTxtDest );
m_strMdbDest = AfxGetApp()->GetProfileString( "listexportdlg", "mdbdest", m_strMdbDest );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -