ListExportDlg.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:32k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // ListExportDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ListExportDlg.h"
  5. #include <io.h>
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // class CExportDB
  13. CExportDB::CExportDB( )
  14. {
  15. m_pTableDef = NULL;
  16. m_pRecord = NULL;
  17. }
  18. CExportDB::~CExportDB( )
  19. {
  20. CloseAllDB( );
  21. }
  22. CString CExportDB::ESCString( CString &string )
  23. {
  24. CString strResult;
  25. for( int i=0; i<string.GetLength(); i++ )
  26. {
  27. char ch = string.GetAt(i);
  28. if( ch == '\' || ch == ''' )
  29. strResult += "\";
  30. strResult += ch;
  31. }
  32. return strResult;
  33. }
  34. CString CExportDB::ESCCSVString( CString &string )
  35. {
  36. CString strResult;
  37. for( int i=0; i<string.GetLength(); i++ )
  38. {
  39. char ch = string.GetAt(i);
  40. if( ch == '\' || ch == ''' || ch == ',' )
  41. strResult += "\";
  42. strResult += ch;
  43. }
  44. return strResult;
  45. }
  46. BOOL CExportDB::ExecuteODBCFile( CString strODBCDest )
  47. {
  48. if( -1 != strODBCDest.Find( "DSN=Excel" )
  49. || -1 != strODBCDest.Find( "DSN=MS Access Database" ) )
  50. {
  51. int nIndex = strODBCDest.Find( "DBQ=" );
  52. if( -1 != nIndex )
  53. {
  54. CString strDBQ = strODBCDest.Mid( nIndex+4 );
  55. nIndex = strDBQ.Find( ";" );
  56. if( -1 != nIndex )
  57. strDBQ = strDBQ.Left( nIndex );
  58. ShellExecute( NULL, "open", strDBQ, NULL, NULL, SW_SHOW );
  59. return TRUE;
  60. }
  61. }
  62. else
  63. {
  64. int nIndex = strODBCDest.Find( "DefaultDir=" );
  65. if( -1 != nIndex )
  66. {
  67. CString strDefaultDir = strODBCDest.Mid( nIndex + 11 );
  68. nIndex = strDefaultDir.Find( ";" );
  69. if( -1 != nIndex )
  70. strDefaultDir = strDefaultDir.Left( nIndex );
  71. ShellExecute( NULL, "open", strDefaultDir, NULL, NULL, SW_SHOW );
  72. return TRUE;
  73. }
  74. }
  75. return FALSE;
  76. }
  77. BOOL CExportDB::SetTableColumn( CStringArray & astrColumnName, CUIntArray & anWidth )
  78. {
  79. ASSERT( astrColumnName.GetSize() == anWidth.GetSize() );
  80. if( astrColumnName.GetSize() != anWidth.GetSize() )
  81. return FALSE;
  82. m_astrColumnName.Copy( astrColumnName );
  83. m_anColumnWidth.Copy( anWidth );
  84. ASSERT( m_astrColumnName.GetSize() > 0 );
  85. return m_astrColumnName.GetSize() > 0;
  86. }
  87. BOOL CExportDB::OpenTxtDB( LPCTSTR lpszTxtDest, BOOL bTxtPath )
  88. {
  89. if( NULL == lpszTxtDest || strlen(lpszTxtDest) <= 0 )
  90. {
  91. ASSERT( FALSE );
  92. return FALSE;
  93. }
  94. if( bTxtPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( lpszTxtDest ) )
  95. {
  96. ASSERT( FALSE );
  97. return FALSE;
  98. }
  99. CloseTxtDB( );
  100. m_strTxtDest = lpszTxtDest;
  101. m_bTxtPath = bTxtPath;
  102. return TRUE;
  103. }
  104. BOOL CExportDB::OpenTxtTable( LPCTSTR lpszTableName, BOOL bOverwrite )
  105. {
  106. if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
  107. {
  108. ASSERT( FALSE );
  109. return FALSE;
  110. }
  111. if( m_strTxtDest.GetLength() == 0 /* Txt DB Not Open */
  112. || m_astrColumnName.GetSize() == 0 /* Not Set Table Column */ )
  113. {
  114. ASSERT( FALSE );
  115. return FALSE;
  116. }
  117. // Path Txt DB
  118. if( m_bTxtPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( m_strTxtDest ) )
  119. {
  120. ASSERT( FALSE );
  121. return FALSE;
  122. }
  123. CloseTxtTable( );
  124. // Path Txt DB
  125. CString strTxtFile = m_strTxtDest;
  126. if( m_bTxtPath )
  127. strTxtFile = m_strTxtDest + lpszTableName + ".txt";
  128. UINT nOpenFlags = CFile::modeCreate | CFile::modeWrite;
  129. if( !bOverwrite )
  130. nOpenFlags |= CFile::modeNoTruncate;
  131. if( !m_fileTxt.Open( strTxtFile, nOpenFlags ) )
  132. return FALSE;
  133. m_fileTxt.SeekToEnd();
  134. if( bOverwrite )
  135. {
  136. m_fileTxt.WriteString( CString(lpszTableName) + "n"/*STRING_CRLF*/ );
  137. int nStrLenTotal = 0, cxTotal = 0;
  138. for( int nCol=0; nCol < m_astrColumnName.GetSize(); nCol ++ )
  139. {
  140. int nColWidth = m_anColumnWidth[nCol];
  141. CString strText = m_astrColumnName.ElementAt(nCol);
  142. strText += " ";
  143. while( ( (nStrLenTotal+strText.GetLength()) * 6 ) < cxTotal+nColWidth )
  144. strText = " " + strText;
  145. m_fileTxt.WriteString( strText );
  146. nStrLenTotal += strText.GetLength();
  147. cxTotal += nColWidth;
  148. }
  149. m_fileTxt.WriteString( "n"/*STRING_CRLF*/ );
  150. }
  151. return TRUE;
  152. }
  153. BOOL CExportDB::OpenMdbDB( LPCTSTR lpszMdbDest )
  154. {
  155. if( NULL == lpszMdbDest || strlen(lpszMdbDest) <= 0 )
  156. {
  157. ASSERT( FALSE );
  158. return FALSE;
  159. }
  160. TRY
  161. {
  162. CloseMdbDB( );
  163. if( 0 == access( lpszMdbDest, 0 ) )
  164. m_mdb.Open( lpszMdbDest );
  165. else
  166. m_mdb.Create( lpszMdbDest );
  167. }
  168. CATCH( CDaoException, e )
  169. {
  170. CloseMdbDB();
  171. e->ReportError( );
  172. return FALSE;
  173. }
  174. END_CATCH
  175. return m_mdb.IsOpen();
  176. }
  177. BOOL CExportDB::OpenMdbTable( LPCTSTR lpszTableName, BOOL bOverwrite )
  178. {
  179. if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
  180. {
  181. ASSERT( FALSE );
  182. return FALSE;
  183. }
  184. TRY
  185. {
  186. if( !m_mdb.IsOpen() || m_astrColumnName.GetSize() <= 0 )
  187. {
  188. ASSERT( FALSE );
  189. return FALSE;
  190. }
  191. CloseMdbTable();
  192. CString strTableName = lpszTableName;
  193. BOOL bCreateNew = bOverwrite;
  194. if( !bOverwrite )
  195. {
  196. try {
  197. CDaoTableDefInfo tabledefinfo;
  198. m_mdb.GetTableDefInfo( strTableName, tabledefinfo );
  199. CDaoTableDef tabledef( &m_mdb );
  200. tabledef.Open( strTableName );
  201. if( !tabledef.IsOpen() )
  202. bCreateNew = TRUE;
  203. else
  204. {
  205. if( m_astrColumnName.GetSize() != tabledef.GetFieldCount() )
  206. bCreateNew = TRUE;
  207. CDaoFieldInfo fieldinfo;
  208. for( int i=0; i<tabledef.GetFieldCount(); i++ )
  209. {
  210. tabledef.GetFieldInfo( i, fieldinfo, AFX_DAO_ALL_INFO );
  211. bCreateNew |= ( 0 != fieldinfo.m_strName.Compare(m_astrColumnName[i]) );
  212. bCreateNew |= ( dbText != fieldinfo.m_nType );
  213. bCreateNew |= ( 255 != fieldinfo.m_lSize );
  214. bCreateNew |= (! ( (dbVariableField | dbUpdatableField) & fieldinfo.m_lAttributes) );
  215. }
  216. tabledef.Close();
  217. }
  218. }catch( CDaoException * e ) {
  219. e->Delete();
  220. bCreateNew = TRUE;
  221. }
  222. }
  223. if( bCreateNew )
  224. {
  225. // Create New Table
  226. int nCount = 1;
  227. while( TRUE )
  228. {
  229. try {
  230. if( 1 != nCount )
  231. strTableName.Format( "%s%d", lpszTableName, nCount );
  232. CDaoTableDefInfo tabledefinfo;
  233. m_mdb.GetTableDefInfo( strTableName, tabledefinfo );
  234. }catch ( CDaoException * e){
  235. e->Delete();
  236. break;
  237. }
  238. nCount ++;
  239. }
  240. // create strTableName.
  241. CDaoTableDef tabledef( &m_mdb );
  242. tabledef.Create( strTableName );
  243. // def strTableName's field.
  244. CDaoFieldInfo fieldinfo;
  245. fieldinfo.m_bRequired = false;
  246. fieldinfo.m_lCollatingOrder = dbSortGeneral;
  247. fieldinfo.m_strSourceTable = strTableName;
  248. for( int i=0; i<m_astrColumnName.GetSize(); i++ )
  249. {
  250. fieldinfo.m_bAllowZeroLength = true;
  251. fieldinfo.m_nOrdinalPosition = i+1;
  252. fieldinfo.m_strName = ESCString(m_astrColumnName[i]);
  253. fieldinfo.m_lSize = 255;
  254. fieldinfo.m_nType = dbText;
  255. fieldinfo.m_lAttributes = dbVariableField | dbUpdatableField;
  256. fieldinfo.m_strSourceField = ESCString(m_astrColumnName[i]);
  257. tabledef.CreateField( fieldinfo );
  258. }
  259. tabledef.Append( );
  260. tabledef.Close( );
  261. // CreateNew End
  262. }
  263. // Open Table
  264. if( !m_mdb.IsOpen( ) )
  265. return FALSE;
  266. m_pTableDef = new CDaoTableDef( &m_mdb );
  267. m_pTableDef->Open( strTableName );
  268. m_pRecord = new CDaoRecordset( &m_mdb );
  269. m_pRecord->Open( m_pTableDef, dbOpenDynaset );
  270. if( !m_pRecord->IsOpen() || !m_pTableDef->IsOpen() )
  271. {
  272. CloseMdbTable();
  273. return FALSE;
  274. }
  275. }
  276. CATCH( CDaoException, e )
  277. {
  278. CloseMdbTable();
  279. e->ReportError( );
  280. return FALSE;
  281. }
  282. END_CATCH
  283. return TRUE;
  284. }
  285. BOOL CExportDB::OpenCsvDB( LPCTSTR lpszCsvDest, BOOL bCsvPath )
  286. {
  287. if( NULL == lpszCsvDest || strlen(lpszCsvDest) <= 0 )
  288. {
  289. ASSERT( FALSE );
  290. return FALSE;
  291. }
  292. if( bCsvPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( lpszCsvDest ) )
  293. {
  294. ASSERT( FALSE );
  295. return FALSE;
  296. }
  297. CloseCsvDB( );
  298. m_strCsvDest = lpszCsvDest;
  299. m_bCsvPath = bCsvPath;
  300. return TRUE;
  301. }
  302. BOOL CExportDB::OpenCsvTable( LPCTSTR lpszTableName, BOOL bOverwrite )
  303. {
  304. if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
  305. {
  306. ASSERT( FALSE );
  307. return FALSE;
  308. }
  309. if( m_strCsvDest.GetLength() == 0 /* Csv DB Not Open */
  310. || m_astrColumnName.GetSize() == 0 /* Not Set Table Column */ )
  311. {
  312. ASSERT( FALSE );
  313. return FALSE;
  314. }
  315. // Path Csv DB
  316. if( m_bCsvPath && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( m_strCsvDest ) )
  317. {
  318. ASSERT( FALSE );
  319. return FALSE;
  320. }
  321. CloseCsvTable( );
  322. CString strCsvFile = m_strCsvDest;
  323. if( m_bCsvPath )
  324. strCsvFile = m_strCsvDest + lpszTableName + ".csv";
  325. UINT nOpenFlags = CFile::modeCreate | CFile::modeWrite;
  326. if( !bOverwrite )
  327. nOpenFlags |= CFile::modeNoTruncate;
  328. if( !m_fileCsv.Open( strCsvFile, nOpenFlags ) )
  329. {
  330. return FALSE;
  331. }
  332. m_fileCsv.SeekToEnd();
  333. if( bOverwrite )
  334. {
  335. m_fileCsv.WriteString( CString(lpszTableName) + "n" );
  336. CString strText;
  337. for( int nCol=0; nCol < m_astrColumnName.GetSize(); nCol ++ )
  338. {
  339. int nColWidth = m_anColumnWidth[nCol];
  340. if( strText.GetLength() > 0 )
  341. strText += ",";
  342. strText += m_astrColumnName.ElementAt(nCol);
  343. }
  344. m_fileCsv.WriteString( strText );
  345. m_fileCsv.WriteString( "n" );
  346. }
  347. return TRUE;
  348. }
  349. BOOL CExportDB::OpenODBCDB( LPCTSTR lpszDSN )
  350. {
  351. TRY
  352. {
  353. CloseODBCDB( );
  354. if( !m_dbODBC.Open(lpszDSN, FALSE, FALSE, _T("ODBC;"), FALSE) )
  355. return FALSE;
  356. return TRUE;
  357. }
  358. CATCH(CException, e)
  359. {
  360. CloseODBCDB( );
  361. if(e) e->ReportError( );
  362. return FALSE;
  363. }
  364. END_CATCH
  365. }
  366. BOOL CExportDB::OpenODBCTable( LPCTSTR lpszTableName, BOOL bOverwrite )
  367. {
  368. if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
  369. {
  370. ASSERT( FALSE );
  371. return FALSE;
  372. }
  373. TRY
  374. {
  375. if( !m_dbODBC.IsOpen() || m_astrColumnName.GetSize() <= 0 )
  376. {
  377. ASSERT( FALSE );
  378. return FALSE;
  379. }
  380. CloseODBCTable();
  381. // Get Next Table Name
  382. CString strTableName = lpszTableName;
  383. BOOL bCreateNew = bOverwrite;
  384. if( !bOverwrite )
  385. {
  386. try {
  387. CRecordset rec( &m_dbODBC );
  388. if( !rec.Open( CRecordset::dynaset, "SELECT * FROM "" + strTableName + """ ) )
  389. bCreateNew = TRUE;
  390. else
  391. {
  392. if( m_astrColumnName.GetSize() != rec.GetODBCFieldCount() )
  393. bCreateNew = TRUE;
  394. CODBCFieldInfo fieldinfo;
  395. for( int i=0; i<rec.GetODBCFieldCount(); i++ )
  396. {
  397. rec.GetODBCFieldInfo( i, fieldinfo );
  398. bCreateNew |= ( 0 != fieldinfo.m_strName.Compare(m_astrColumnName[i]) );
  399. }
  400. rec.Close();
  401. }
  402. }catch( CDaoException * e) {
  403. e->Delete();
  404. bCreateNew = TRUE;
  405. }
  406. }
  407. if( bCreateNew )
  408. {
  409. // Craete New Table
  410. int nCount = 1;
  411. while( TRUE )
  412. {
  413. try {
  414. if( 1 != nCount )
  415. strTableName.Format( "%s%d", lpszTableName, nCount );
  416. CRecordset rec( &m_dbODBC );
  417. if( !rec.Open( CRecordset::dynaset, "SELECT * FROM "" + strTableName + """ ) )
  418. break;
  419. rec.Close( );
  420. }catch ( CDBException * e ){
  421. e->Delete();
  422. break;
  423. }
  424. nCount ++;
  425. }
  426. // Create Table
  427. CString sqlCreateTable = "CREATE TABLE "" + strTableName + "" (";
  428. for( int k=0; k<m_astrColumnName.GetSize(); k++ )
  429. sqlCreateTable += ( """ + ESCString(m_astrColumnName[k]) + """ + ( k==m_astrColumnName.GetSize()-1 ? " VARCHAR(255))" : " VARCHAR(255)," ) );
  430. m_dbODBC.ExecuteSQL( sqlCreateTable );
  431. // CreateNew End
  432. }
  433. m_strODBCTableName = strTableName;
  434. // Test
  435. CRecordset rs( &m_dbODBC );
  436. if( !rs.Open( CRecordset::dynaset, "SELECT * FROM "" + strTableName + """ ) )
  437. return FALSE;
  438. rs.Close();
  439. return TRUE;
  440. }
  441. CATCH(CException, e)
  442. {
  443. CloseODBCTable( );
  444. if(e) e->ReportError( );
  445. return FALSE;
  446. }
  447. END_CATCH
  448. }
  449. BOOL CExportDB::AddItemTxt( CStringArray &astrItemText )
  450. {
  451. if( CFile::hFileNull != m_fileTxt.m_hFile )
  452. {
  453. m_fileTxt.SeekToEnd();
  454. int nStrLenTotal = 0, cxTotal = 0;
  455. for( int nCol=0; nCol < astrItemText.GetSize() && nCol < m_anColumnWidth.GetSize(); nCol ++ )
  456. {
  457. int nColWidth = m_anColumnWidth[nCol];
  458. CString strText = astrItemText.ElementAt(nCol);
  459. strText = " " + strText;
  460. while( ( (nStrLenTotal+strText.GetLength()) * 6 ) < cxTotal+nColWidth )
  461. strText = " " + strText;
  462. m_fileTxt.WriteString( strText );
  463. nStrLenTotal += strText.GetLength();
  464. cxTotal += nColWidth;
  465. }
  466. m_fileTxt.WriteString( "n"/*STRING_CRLF*/ );
  467. return TRUE;
  468. }
  469. return FALSE;
  470. }
  471. BOOL CExportDB::AddItemMdb( CStringArray &astrItemText )
  472. {
  473. TRY {
  474. if( m_pRecord && m_pRecord->IsOpen() && m_mdb.IsOpen() )
  475. {
  476. m_pRecord->AddNew( );
  477. for( int i=0; i<astrItemText.GetSize(); i++ )
  478. {
  479. CString strText = astrItemText.ElementAt(i);
  480. if( strText.GetLength() >= 255 )
  481. strText = strText.Left( 254 );
  482. if( strText.GetLength() > 0 && strText.GetLength() < 255 )
  483. m_pRecord->SetFieldValue( i, LPCTSTR(ESCString(strText)) );
  484. }
  485. m_pRecord->Update( );
  486. return TRUE;
  487. }
  488. }CATCH( CException, e ) {
  489. e->Delete();
  490. }END_CATCH
  491. return FALSE;
  492. }
  493. BOOL CExportDB::AddItemCsv( CStringArray &astrItemText )
  494. {
  495. if( CFile::hFileNull != m_fileCsv.m_hFile )
  496. {
  497. m_fileCsv.SeekToEnd();
  498. CString strText;
  499. for( int nCol=0; nCol < astrItemText.GetSize() && nCol < m_anColumnWidth.GetSize(); nCol ++ )
  500. {
  501. int nColWidth = m_anColumnWidth[nCol];
  502. if( strText.GetLength() > 0 )
  503. strText += ",";
  504. strText += ESCCSVString(astrItemText.ElementAt(nCol));
  505. }
  506. m_fileCsv.WriteString( strText );
  507. m_fileCsv.WriteString( "n" );
  508. return TRUE;
  509. }
  510. return FALSE;
  511. }
  512. BOOL CExportDB::AddItemODBC( CStringArray &astrItemText )
  513. {
  514. if( m_dbODBC.IsOpen() )
  515. {
  516. CString sqlInsert = "INSERT INTO "" + m_strODBCTableName + "" VALUES(";
  517. for( int k=0; k<astrItemText.GetSize(); k++ )
  518. sqlInsert += ( "'" + ESCString(astrItemText[k]) + ( k==astrItemText.GetSize()-1 ? "')" : "'," ) );
  519. TRY {
  520. m_dbODBC.ExecuteSQL( sqlInsert );
  521. return TRUE;
  522. } CATCH ( CException, e ) {
  523. e->Delete();
  524. } END_CATCH
  525. }
  526. return FALSE;
  527. }
  528. void CExportDB::CloseTxtDB( )
  529. {
  530. CloseTxtTable();
  531. m_strTxtDest.Empty();
  532. m_bTxtPath = FALSE;
  533. }
  534. void CExportDB::CloseTxtTable( )
  535. {
  536. if( CFile::hFileNull != m_fileTxt.m_hFile )
  537. m_fileTxt.Close();
  538. }
  539. void CExportDB::CloseMdbDB( )
  540. {
  541. try
  542. {
  543. CloseMdbTable();
  544. if( m_mdb.IsOpen() )
  545. m_mdb.Close();
  546. }
  547. catch( CDaoException * e )
  548. {
  549. e->Delete();
  550. TRACE( "Close Mdb Exceptionn" );
  551. }
  552. }
  553. void CExportDB::CloseMdbTable( )
  554. {
  555. try
  556. {
  557. if( m_pRecord && m_pRecord->IsOpen() )
  558. m_pRecord->Close();
  559. if( m_pRecord )
  560. {
  561. delete m_pRecord;
  562. m_pRecord = NULL;
  563. }
  564. if( m_pTableDef && m_pTableDef->IsOpen() )
  565. m_pTableDef->Close();
  566. if( m_pTableDef )
  567. {
  568. delete m_pTableDef;
  569. m_pTableDef = NULL;
  570. }
  571. }
  572. catch( CDaoException * e )
  573. {
  574. e->Delete();
  575. TRACE( "Close Mdb Exceptionn" );
  576. }
  577. }
  578. void CExportDB::CloseCsvDB( )
  579. {
  580. CloseCsvTable( );
  581. m_strCsvDest.Empty();
  582. m_bCsvPath = FALSE;
  583. }
  584. void CExportDB::CloseCsvTable( )
  585. {
  586. if( CFile::hFileNull != m_fileCsv.m_hFile )
  587. m_fileCsv.Close();
  588. }
  589. void CExportDB::CloseODBCDB( )
  590. {
  591. try
  592. {
  593. CloseODBCTable( );
  594. if( m_dbODBC.IsOpen() )
  595. m_dbODBC.Close();
  596. }
  597. catch(...)
  598. {
  599. TRACE(_T("Errors occurred.n"));
  600. }
  601. }
  602. void CExportDB::CloseODBCTable( )
  603. {
  604. TRY
  605. {
  606. if( m_dbODBC.IsOpen() )
  607. {
  608. // Close and Reopen to Flush Data
  609. CString strConnect = m_dbODBC.GetConnect();
  610. m_dbODBC.Close();
  611. m_dbODBC.Open( strConnect, FALSE, FALSE, _T("ODBC;"), FALSE);
  612. }
  613. }
  614. CATCH(CException, e)
  615. {
  616. if(e) e->ReportError( );
  617. }
  618. END_CATCH
  619. }
  620. BOOL CExportDB::OpenAllDB(CString strTxt, BOOL bTxtPath, CString strMdb,
  621.   CString strCsv, BOOL bCsvPath, CString strODBC, BOOL bReportError )
  622. {
  623. BOOL bRet = TRUE;
  624. if( strTxt.GetLength() > 0 )
  625. {
  626. bRet &= OpenTxtDB( strTxt, bTxtPath );
  627. if( !bRet && bReportError )
  628. AfxMessageBox( IDS_EXPORTDB_ERRTXTDEST, MB_OK | MB_ICONINFORMATION );
  629. }
  630. if( strMdb.GetLength() > 0 )
  631. {
  632. bRet &= OpenMdbDB( strMdb );
  633. if( !bRet && bReportError )
  634. AfxMessageBox( IDS_EXPORTDB_ERRMDBDEST, MB_OK | MB_ICONINFORMATION );
  635. }
  636. if( strCsv.GetLength() > 0 )
  637. {
  638. bRet &= OpenCsvDB( strCsv, bCsvPath );
  639. if( !bRet && bReportError )
  640. AfxMessageBox( IDS_EXPORTDB_ERRCSVDEST, MB_OK | MB_ICONINFORMATION );
  641. }
  642. if( strODBC.GetLength() > 0 )
  643. {
  644. bRet &= OpenODBCDB( strODBC );
  645. if( !bRet && bReportError )
  646. AfxMessageBox( IDS_EXPORTDB_ERRODBCDEST, MB_OK | MB_ICONINFORMATION );
  647. }
  648. if( !bRet )
  649. CloseAllDB( );
  650. return bRet;
  651. }
  652. BOOL CExportDB::OpenAllTable( LPCTSTR lpszTableName, BOOL bOverwrite, BOOL bReportError )
  653. {
  654. if( NULL == lpszTableName || strlen(lpszTableName) <= 0 )
  655. {
  656. ASSERT( FALSE );
  657. return FALSE;
  658. }
  659. BOOL bRet = TRUE;
  660. if( m_strTxtDest.GetLength() > 0 )
  661. {
  662. bRet &= OpenTxtTable( lpszTableName, bOverwrite );
  663. if( !bRet && bReportError )
  664. AfxMessageBox( IDS_EXPORTDB_ERRTXTDEST, MB_OK | MB_ICONINFORMATION );
  665. }
  666. if( m_mdb.IsOpen() )
  667. {
  668. bRet &= OpenMdbTable( lpszTableName, bOverwrite );
  669. if( !bRet && bReportError )
  670. AfxMessageBox( IDS_EXPORTDB_ERRMDBDEST, MB_OK | MB_ICONINFORMATION );
  671. }
  672. if( m_strCsvDest.GetLength() > 0 )
  673. {
  674. bRet &= OpenCsvTable( lpszTableName, bOverwrite );
  675. if( !bRet && bReportError )
  676. AfxMessageBox( IDS_EXPORTDB_ERRCSVDEST, MB_OK | MB_ICONINFORMATION );
  677. }
  678. if( m_dbODBC.IsOpen() )
  679. {
  680. bRet &= OpenODBCTable( lpszTableName, bOverwrite );
  681. if( !bRet && bReportError )
  682. AfxMessageBox( IDS_EXPORTDB_ERRODBCDEST, MB_OK | MB_ICONINFORMATION );
  683. }
  684. if( !bRet )
  685. CloseAllTable( );
  686. return bRet;
  687. }
  688. BOOL CExportDB::AddItem( CStringArray &astrItemText )
  689. {
  690. BOOL bRet = TRUE;
  691. if( CFile::hFileNull != m_fileTxt.m_hFile )
  692. {
  693. bRet &= AddItemTxt( astrItemText );
  694. }
  695. if( m_pRecord && m_pRecord->IsOpen() && m_mdb.IsOpen() )
  696. {
  697. bRet &= AddItemMdb( astrItemText );
  698. }
  699. if( CFile::hFileNull != m_fileCsv.m_hFile )
  700. {
  701. bRet &= AddItemCsv( astrItemText );
  702. }
  703. if( m_dbODBC.IsOpen() )
  704. {
  705. bRet &= AddItemODBC( astrItemText );
  706. }
  707. return bRet;
  708. }
  709. void CExportDB::CloseAllDB( )
  710. {
  711. CloseTxtDB( );
  712. CloseMdbDB( );
  713. CloseCsvDB( );
  714. CloseODBCDB( );
  715. }
  716. void CExportDB::CloseAllTable( )
  717. {
  718. CloseTxtTable( );
  719. CloseMdbTable( );
  720. CloseCsvTable( );
  721. CloseODBCTable( );
  722. }
  723. /////////////////////////////////////////////////////////////////////////////
  724. // CListExportDlg dialog
  725. void CListExportDlg::StoreProfile( )
  726. {
  727. AfxGetApp()->WriteProfileInt( "listexportdlg", "txtcheck", m_bTxtCheck );
  728. AfxGetApp()->WriteProfileInt( "listexportdlg", "mdbcheck", m_bMdbCheck );
  729. AfxGetApp()->WriteProfileInt( "listexportdlg", "csvcheck", m_bCsvCheck );
  730. AfxGetApp()->WriteProfileInt( "listexportdlg", "odbccheck", m_bODBCCheck );
  731. AfxGetApp()->WriteProfileString( "listexportdlg", "txtdest", m_strTxtDest );
  732. AfxGetApp()->WriteProfileString( "listexportdlg", "mdbdest", m_strMdbDest );
  733. AfxGetApp()->WriteProfileString( "listexportdlg", "csvdest", m_strCsvDest );
  734. AfxGetApp()->WriteProfileString( "listexportdlg", "odbcdest", m_strODBCDest );
  735. AfxGetApp()->WriteProfileInt( "listexportdlg", "exeonfinish", m_bExeOnFinish );
  736. AfxGetApp()->WriteProfileInt( "listexportdlg", "overwrite", m_bOverwrite );
  737. }
  738. void CListExportDlg::LoadProfile( )
  739. {
  740. // Initial Data
  741. m_bTxtCheck = TRUE;
  742. m_bExeOnFinish = TRUE;
  743. m_bOverwrite = TRUE;
  744. m_strTxtDest = AfxGetProfile().GetExportPath() + "StockList.txt";
  745. m_strMdbDest = AfxGetProfile().GetExportPath() + "StockList.mdb";
  746. m_strCsvDest = AfxGetProfile().GetExportPath() + "StockList.csv";
  747. m_strODBCDest = "ODBC;DSN=Excel Files;DBQ="
  748. + AfxGetProfile().GetExportPath()
  749. + "StockList.xls;DefaultDir="
  750. + AfxGetProfile().GetExportPath()
  751. + ";DriverId=790;MaxBufferSize=2048;PageTimeout=5;";
  752. m_bTxtCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "txtcheck", m_bTxtCheck );
  753. m_bMdbCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "mdbcheck", m_bMdbCheck );
  754. m_bCsvCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "csvcheck", m_bCsvCheck );
  755. m_bODBCCheck = AfxGetApp()->GetProfileInt( "listexportdlg", "odbccheck", m_bODBCCheck );
  756. m_strTxtDest = AfxGetApp()->GetProfileString( "listexportdlg", "txtdest", m_strTxtDest );
  757. m_strMdbDest = AfxGetApp()->GetProfileString( "listexportdlg", "mdbdest", m_strMdbDest );
  758. m_strCsvDest = AfxGetApp()->GetProfileString( "listexportdlg", "csvdest", m_strCsvDest );
  759. m_strODBCDest = AfxGetApp()->GetProfileString( "listexportdlg", "odbcdest", m_strODBCDest );
  760. m_bExeOnFinish = AfxGetApp()->GetProfileInt( "listexportdlg", "exeonfinish", m_bExeOnFinish );
  761. m_bOverwrite = AfxGetApp()->GetProfileInt( "listexportdlg", "overwrite", m_bOverwrite );
  762. }
  763. CListExportDlg::CListExportDlg(CWnd* pParent /*=NULL*/)
  764. : CDialog(CListExportDlg::IDD, pParent)
  765. {
  766. //{{AFX_DATA_INIT(CListExportDlg)
  767. m_nItemBegin = 1;
  768. m_nItemEnd = 1;
  769. m_strTxtDest = _T("");
  770. m_strMdbDest = _T("");
  771. m_strCsvDest = _T("");
  772. m_bTxtCheck = FALSE;
  773. m_bMdbCheck = FALSE;
  774. m_bCsvCheck = FALSE;
  775. m_bExeOnFinish = FALSE;
  776. m_bODBCCheck = FALSE;
  777. m_strODBCDest = _T("");
  778. //}}AFX_DATA_INIT
  779. m_nItemMax = 1;
  780. m_bItemAll = FALSE;
  781. m_bItemSelected = FALSE;
  782. m_bItemDefine = FALSE;
  783. }
  784. CListExportDlg::~CListExportDlg( )
  785. {
  786. }
  787. BOOL CListExportDlg::ExportBegin(CStringArray &astrColumnName, CUIntArray &anWidth,
  788. BOOL bReportError )
  789. {
  790. CString strTxt, strMdb, strCsv, strODBC;
  791. if( m_bTxtCheck ) strTxt = m_strTxtDest;
  792. if( m_bMdbCheck ) strMdb = m_strMdbDest;
  793. if( m_bCsvCheck ) strCsv = m_strCsvDest;
  794. if( m_bODBCCheck ) strODBC = m_strODBCDest;
  795. if( !m_exportdb.OpenAllDB(strTxt, FALSE, strMdb, strCsv, FALSE, strODBC,
  796. bReportError ) )
  797. return FALSE;
  798. if( ! m_exportdb.SetTableColumn( astrColumnName, anWidth ) )
  799. return FALSE;
  800. return TRUE;
  801. }
  802. BOOL CListExportDlg::ExportOpenTable(CSPTime &time, BOOL bReportError )
  803. {
  804. CString strTableName;
  805. strTableName.LoadString( IDS_LISTEXPORT_TABLENAME );
  806. strTableName += AfxGetTimeString( time.GetTime(), "%Y-%m-%d-", TRUE );
  807. if( !m_exportdb.OpenAllTable( strTableName, m_bOverwrite, bReportError ) )
  808. return FALSE;
  809. return TRUE;
  810. }
  811. BOOL CListExportDlg::ExportAddItem( CStringArray &astrItemText )
  812. {
  813. return m_exportdb.AddItem( astrItemText );
  814. }
  815. void CListExportDlg::ExportCloseTable( )
  816. {
  817. m_exportdb.CloseAllTable( );
  818. }
  819. BOOL CListExportDlg::ExportFinish( )
  820. {
  821. m_exportdb.CloseAllDB( );
  822. if( m_bExeOnFinish )
  823. {
  824. if( m_bTxtCheck && m_strTxtDest.GetLength() > 0 )
  825. ShellExecute( NULL, "open", m_strTxtDest, NULL, NULL, SW_SHOW );
  826. if( m_bMdbCheck && m_strMdbDest.GetLength() > 0 )
  827. ShellExecute( NULL, "open", m_strMdbDest, NULL, NULL, SW_SHOW );
  828. if( m_bCsvCheck && m_strCsvDest.GetLength() > 0 )
  829. ShellExecute( NULL, "open", m_strCsvDest, NULL, NULL, SW_SHOW );
  830. if( m_bODBCCheck && m_strODBCDest.GetLength() > 0 )
  831. CExportDB::ExecuteODBCFile( m_strODBCDest );
  832. }
  833. // Set Progress
  834. m_ctrlProgress.SetWindowPos( NULL, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE );
  835. int nLower = 0, nUpper = 100;
  836. m_ctrlProgress.GetRange( nLower, nUpper );
  837. if( nUpper > nLower )
  838. {
  839. m_ctrlProgress.SetPos( nUpper );
  840. CString strInfo;
  841. strInfo.LoadString( IDS_EXPORTDB_FINISHED );
  842. m_staticProgress.SetWindowText( strInfo );
  843. }
  844. return TRUE;
  845. }
  846. void CListExportDlg::SetProgressRange( int nLower, int nUpper )
  847. {
  848. if( nUpper > nLower )
  849. {
  850. m_ctrlProgress.SetWindowPos( NULL, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE );
  851. m_ctrlProgress.SetRange32( nLower, nUpper );
  852. }
  853. }
  854. void CListExportDlg::SetProgress( int nPos )
  855. {
  856. int nLower = 0, nUpper = 100;
  857. m_ctrlProgress.GetRange( nLower, nUpper );
  858. if( nUpper > nLower )
  859. {
  860. m_ctrlProgress.SetPos( nPos );
  861. CString strProgressNew;
  862. strProgressNew.Format( "%d%%", 100*nPos/(nUpper-nLower) );
  863. CString strProgressOld;
  864. m_staticProgress.GetWindowText( strProgressOld );
  865. if( 0 != strProgressNew.Compare( strProgressOld ) )
  866. m_staticProgress.SetWindowText( strProgressNew );
  867. }
  868. }
  869. void CListExportDlg::DoDataExchange(CDataExchange* pDX)
  870. {
  871. CDialog::DoDataExchange(pDX);
  872. //{{AFX_DATA_MAP(CListExportDlg)
  873. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  874. DDX_Control(pDX, IDOK, m_btnOK);
  875. DDX_Control(pDX, IDC_ODBC_SOURCE, m_btnODBCSource);
  876. DDX_Control(pDX, IDC_ODBC_DEST, m_editODBCDest);
  877. DDX_Control(pDX, IDC_ODBC_CHECK, m_btnODBCCheck);
  878. DDX_Control(pDX, IDC_STATIC_PROGRESS, m_staticProgress);
  879. DDX_Control(pDX, IDC_PROGRESS, m_ctrlProgress);
  880. DDX_Control(pDX, IDC_CSV_EXPLORER, m_btnCsvExplorer);
  881. DDX_Control(pDX, IDC_CSV_DEST, m_editCsvDest);
  882. DDX_Control(pDX, IDC_CSV_CHECK, m_btnCsvCheck);
  883. DDX_Control(pDX, IDC_MDB_EXPLORER, m_btnMdbExplorer);
  884. DDX_Control(pDX, IDC_MDB_DEST, m_editMdbDest);
  885. DDX_Control(pDX, IDC_MDB_CHECK, m_btnMdbCheck);
  886. DDX_Control(pDX, IDC_TXT_EXPLORER, m_btnTxtExplorer);
  887. DDX_Control(pDX, IDC_TXT_DEST, m_editTxtDest);
  888. DDX_Control(pDX, IDC_TXT_CHECK, m_btnTxtCheck);
  889. DDX_Control(pDX, IDC_ITEM_END, m_editItemEnd);
  890. DDX_Control(pDX, IDC_ITEM_BEGIN, m_editItemBegin);
  891. DDX_Text(pDX, IDC_ITEM_BEGIN, m_nItemBegin);
  892. DDV_MinMaxInt(pDX, m_nItemBegin, 1, m_nItemMax);
  893. DDX_Text(pDX, IDC_ITEM_END, m_nItemEnd);
  894. DDV_MinMaxInt(pDX, m_nItemEnd, 1, m_nItemMax);
  895. DDX_Text(pDX, IDC_TXT_DEST, m_strTxtDest);
  896. DDX_Text(pDX, IDC_MDB_DEST, m_strMdbDest);
  897. DDX_Text(pDX, IDC_CSV_DEST, m_strCsvDest);
  898. DDX_Check(pDX, IDC_TXT_CHECK, m_bTxtCheck);
  899. DDX_Check(pDX, IDC_MDB_CHECK, m_bMdbCheck);
  900. DDX_Check(pDX, IDC_CSV_CHECK, m_bCsvCheck);
  901. DDX_Check(pDX, IDC_EXEONFINISH, m_bExeOnFinish);
  902. DDX_Check(pDX, IDC_ODBC_CHECK, m_bODBCCheck);
  903. DDX_Text(pDX, IDC_ODBC_DEST, m_strODBCDest);
  904. //}}AFX_DATA_MAP
  905. }
  906. BEGIN_MESSAGE_MAP(CListExportDlg, CDialog)
  907. //{{AFX_MSG_MAP(CListExportDlg)
  908. ON_BN_CLICKED(IDC_ITEM_ALL, OnItemAll)
  909. ON_BN_CLICKED(IDC_ITEM_SELECTED, OnItemSelected)
  910. ON_BN_CLICKED(IDC_ITEM_DEFINE, OnItemDefine)
  911. ON_BN_CLICKED(IDC_TXT_CHECK, OnTxtCheck)
  912. ON_BN_CLICKED(IDC_TXT_EXPLORER, OnTxtExplorer)
  913. ON_BN_CLICKED(IDC_MDB_CHECK, OnMdbCheck)
  914. ON_BN_CLICKED(IDC_MDB_EXPLORER, OnMdbExplorer)
  915. ON_BN_CLICKED(IDC_CSV_CHECK, OnCsvCheck)
  916. ON_BN_CLICKED(IDC_CSV_EXPLORER, OnCsvExplorer)
  917. ON_BN_CLICKED(IDC_ODBC_CHECK, OnODBCCheck)
  918. ON_BN_CLICKED(IDC_ODBC_SOURCE, OnOdbcSource)
  919. //}}AFX_MSG_MAP
  920. END_MESSAGE_MAP()
  921. /////////////////////////////////////////////////////////////////////////////
  922. // CListExportDlg message handlers
  923. BOOL CListExportDlg::OnInitDialog() 
  924. {
  925. CDialog::OnInitDialog();
  926. // TODO: Add extra initialization here
  927. LoadProfile( );
  928. UpdateData( FALSE );
  929. // select item
  930. int nCheckID = IDC_ITEM_ALL;
  931. if( m_bItemSelected )
  932. nCheckID = IDC_ITEM_SELECTED;
  933. else if( m_bItemDefine )
  934. nCheckID = IDC_ITEM_DEFINE;
  935. CheckRadioButton( IDC_ITEM_ALL, IDC_ITEM_DEFINE, nCheckID );
  936. m_editItemBegin.EnableWindow( IDC_ITEM_DEFINE == nCheckID );
  937. m_editItemEnd.EnableWindow( IDC_ITEM_DEFINE == nCheckID );
  938. // txt 
  939. m_btnTxtCheck.SetCheck( m_bTxtCheck );
  940. m_editTxtDest.EnableWindow( m_bTxtCheck );
  941. m_btnTxtExplorer.EnableWindow( m_bTxtCheck );
  942. nCheckID = IDC_EXPORT_OVERWRITE;
  943. if( !m_bOverwrite )
  944. nCheckID = IDC_EXPORT_APPEND;
  945. CheckRadioButton( IDC_EXPORT_OVERWRITE, IDC_EXPORT_APPEND, nCheckID );
  946. // mdb
  947. m_btnMdbCheck.SetCheck( m_bMdbCheck );
  948. m_editMdbDest.EnableWindow( m_bMdbCheck );
  949. m_btnMdbExplorer.EnableWindow( m_bMdbCheck );
  950. // Csv
  951. m_btnCsvCheck.SetCheck( m_bCsvCheck );
  952. m_editCsvDest.EnableWindow( m_bCsvCheck );
  953. m_btnCsvExplorer.EnableWindow( m_bCsvCheck );
  954. // ODBC
  955. m_btnODBCCheck.SetCheck( m_bODBCCheck );
  956. m_editODBCDest.EnableWindow( m_bODBCCheck );
  957. m_btnODBCSource.EnableWindow( m_bODBCCheck );
  958. // progress ctrl
  959. m_ctrlProgress.SetWindowPos( NULL, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE );
  960. return TRUE;  // return TRUE unless you set the focus to a control
  961.               // EXCEPTION: OCX Property Pages should return FALSE
  962. }
  963. void CListExportDlg::OnItemAll() 
  964. {
  965. // TODO: Add your control notification handler code here
  966. m_editItemBegin.EnableWindow( FALSE );
  967. m_editItemEnd.EnableWindow( FALSE );
  968. }
  969. void CListExportDlg::OnItemSelected() 
  970. {
  971. // TODO: Add your control notification handler code here
  972. m_editItemBegin.EnableWindow( FALSE );
  973. m_editItemEnd.EnableWindow( FALSE );
  974. }
  975. void CListExportDlg::OnItemDefine() 
  976. {
  977. // TODO: Add your control notification handler code here
  978. m_editItemBegin.EnableWindow( TRUE );
  979. m_editItemEnd.EnableWindow( TRUE );
  980. }
  981. void CListExportDlg::OnTxtCheck() 
  982. {
  983. // TODO: Add your control notification handler code here
  984. int nCheck = m_btnTxtCheck.GetCheck();
  985. m_editTxtDest.EnableWindow( nCheck );
  986. m_btnTxtExplorer.EnableWindow( nCheck );
  987. }
  988. void CListExportDlg::OnTxtExplorer() 
  989. {
  990. // TODO: Add your control notification handler code here
  991. UpdateData( );
  992. CFileDialog dlg (FALSE, NULL, NULL, OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_ENABLESIZING,
  993. "Txt files (*.txt)|*.txt|All files (*.*)|*.*||", NULL);
  994. if( IDOK == dlg.DoModal() )
  995. {
  996. m_strTxtDest = dlg.GetPathName();
  997. UpdateData( FALSE );
  998. }
  999. }
  1000. void CListExportDlg::OnMdbCheck() 
  1001. {
  1002. // TODO: Add your control notification handler code here
  1003. int nCheck = m_btnMdbCheck.GetCheck();
  1004. m_editMdbDest.EnableWindow( nCheck );
  1005. m_btnMdbExplorer.EnableWindow( nCheck );
  1006. }
  1007. void CListExportDlg::OnMdbExplorer() 
  1008. {
  1009. // TODO: Add your control notification handler code here
  1010. UpdateData( );
  1011. CFileDialog dlg (FALSE, NULL, NULL, OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_ENABLESIZING,
  1012. "Microsoft Access Database files (*.mdb)|*.mdb|All files (*.*)|*.*||", NULL);
  1013. if( IDOK == dlg.DoModal() )
  1014. {
  1015. m_strMdbDest = dlg.GetPathName();
  1016. UpdateData( FALSE );
  1017. }
  1018. }
  1019. void CListExportDlg::OnCsvCheck() 
  1020. {
  1021. // TODO: Add your control notification handler code here
  1022. int nCheck = m_btnCsvCheck.GetCheck();
  1023. m_editCsvDest.EnableWindow( nCheck );
  1024. m_btnCsvExplorer.EnableWindow( nCheck );
  1025. }
  1026. void CListExportDlg::OnODBCCheck() 
  1027. {
  1028. // TODO: Add your control notification handler code here
  1029. int nCheck = m_btnODBCCheck.GetCheck();
  1030. m_editODBCDest.EnableWindow( nCheck );
  1031. m_btnODBCSource.EnableWindow( nCheck );
  1032. }
  1033. void CListExportDlg::OnCsvExplorer() 
  1034. {
  1035. // TODO: Add your control notification handler code here
  1036. UpdateData( );
  1037. CFileDialog dlg (FALSE, NULL, NULL, OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_ENABLESIZING,
  1038. "CSV files (*.csv)|*.csv|All files (*.*)|*.*||", NULL);
  1039. if( IDOK == dlg.DoModal() )
  1040. {
  1041. m_strCsvDest = dlg.GetPathName();
  1042. UpdateData( FALSE );
  1043. }
  1044. }
  1045. void CListExportDlg::OnOdbcSource() 
  1046. {
  1047. // TODO: Add your control notification handler code here
  1048. UpdateData( TRUE );
  1049. if( m_exportdb.OpenODBCDB( NULL ) )
  1050. {
  1051. m_strODBCDest = m_exportdb.GetODBCConnect();
  1052. UpdateData( FALSE );
  1053. }
  1054. }
  1055. void CListExportDlg::OnOK() 
  1056. {
  1057. // TODO: Add extra validation here
  1058. UpdateData( );
  1059. // if( !AfxAssertFunclimitProf( ) )
  1060. // return;
  1061. CButton * pbtnAll = (CButton *)GetDlgItem( IDC_ITEM_ALL );
  1062. if( pbtnAll ) m_bItemAll = pbtnAll->GetCheck();
  1063. CButton * pbtnSelected = (CButton *)GetDlgItem( IDC_ITEM_SELECTED );
  1064. if( pbtnSelected ) m_bItemSelected = pbtnSelected->GetCheck();
  1065. CButton * pbtnDefine = (CButton *)GetDlgItem( IDC_ITEM_DEFINE );
  1066. if( pbtnDefine ) m_bItemDefine = pbtnDefine->GetCheck();
  1067. if( !m_bItemAll && !m_bItemSelected && !m_bItemDefine )
  1068. m_bItemAll = TRUE;
  1069. CButton * pbtn = (CButton *)GetDlgItem( IDC_EXPORT_OVERWRITE );
  1070. if( pbtn ) m_bOverwrite = pbtn->GetCheck();
  1071. if( !m_bTxtCheck && !m_bMdbCheck && !m_bCsvCheck && !m_bODBCCheck )
  1072. {
  1073. AfxMessageBox( IDS_EXPORTDB_NODEST, MB_OK | MB_ICONINFORMATION );
  1074. return;
  1075. }
  1076. if( m_bTxtCheck && m_strTxtDest.GetLength() == 0 )
  1077. {
  1078. AfxMessageBox( IDS_EXPORTDB_NOTXTDEST, MB_OK | MB_ICONINFORMATION );
  1079. return;
  1080. }
  1081. if( m_bMdbCheck && m_strMdbDest.GetLength() == 0 )
  1082. {
  1083. AfxMessageBox( IDS_EXPORTDB_NOMDBDEST, MB_OK | MB_ICONINFORMATION );
  1084. return;
  1085. }
  1086. if( m_bCsvCheck && m_strCsvDest.GetLength() == 0 )
  1087. {
  1088. AfxMessageBox( IDS_EXPORTDB_NOCSVDEST, MB_OK | MB_ICONINFORMATION );
  1089. return;
  1090. }
  1091. if( m_bODBCCheck && m_strODBCDest.GetLength() == 0 )
  1092. {
  1093. AfxMessageBox( IDS_EXPORTDB_NOODBCDEST, MB_OK | MB_ICONINFORMATION );
  1094. return;
  1095. }
  1096. if( m_bMdbCheck )
  1097. {
  1098. int nIndex = m_strMdbDest.Find( "." );
  1099. if( -1 == nIndex )
  1100. m_strMdbDest += ".mdb";
  1101. else if( m_strMdbDest.GetLength()-1 == nIndex )
  1102. m_strMdbDest += "mdb";
  1103. }
  1104. if( m_bCsvCheck )
  1105. {
  1106. int nIndex = m_strCsvDest.Find( "." );
  1107. if( -1 == nIndex )
  1108. m_strCsvDest += ".csv";
  1109. else if( m_strCsvDest.GetLength()-1 == nIndex )
  1110. m_strCsvDest += "csv";
  1111. }
  1112. UpdateData( FALSE );
  1113. // Store profile
  1114. StoreProfile( );
  1115. // Export
  1116. CSListView * pView = AfxGetSListView( );
  1117. if( pView )
  1118. pView->ExportList( this );
  1119. else
  1120. ExportFinish( );
  1121. }