home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / VFORM.ZIP / Samples / vfDao / TckDb.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-10-10  |  9.3 KB  |  445 lines

  1.  
  2. #include "stdafx.h"
  3. #include "TckDb.h"
  4.  
  5. // -------------------------------------------------------------------------
  6. // CTckDb Constructor
  7. // -------------------------------------------------------------------------
  8. CTckDb::CTckDb() 
  9. {
  10.     // Do whatever
  11.     m_pDb = 0;
  12. }
  13.  
  14. // -------------------------------------------------------------------------
  15. // CTckDb Destructor
  16. // -------------------------------------------------------------------------
  17. CTckDb::~CTckDb() 
  18. {
  19.     if(m_pDb)
  20.     {
  21.         if(m_pDb->IsOpen())
  22.             m_pDb->Close();
  23.         delete m_pDb;
  24.     }
  25. }
  26.  
  27. // -------------------------------------------------------------------------
  28. // Shutdown deletes the db
  29. // -------------------------------------------------------------------------
  30. void CTckDb::Shutdown() 
  31. {
  32.     if(m_pDb)
  33.     {
  34.         if(m_pDb->IsOpen())
  35.             m_pDb->Close();
  36.         delete m_pDb;
  37.         m_pDb = 0;
  38.     }
  39. }
  40.  
  41. // -------------------------------------------------------------------------
  42. // Opens the specified DB - prompts if not found
  43. // -------------------------------------------------------------------------
  44. BOOL CTckDb::EzOpen(LPCTSTR lpszPathName) 
  45. {
  46.     CFileStatus status;
  47.     CString sFilePath;
  48.  
  49.     if(!m_pDb)
  50.         m_pDb = new CDaoDatabase;
  51.  
  52.     if(m_pDb->IsOpen())
  53.         m_pDb->Close();
  54.  
  55.     sFilePath = lpszPathName;
  56.  
  57.     // Check if the file exists
  58.     if( !CFile::GetStatus( sFilePath, status ) )   // static function
  59.     {
  60.         // If it does not - ask the user where it is
  61.         CFileDialog dlgFile( TRUE, _T(".mdb"), NULL, 
  62.             OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  63.             _T("Access Files (*.mdb)|*.mdb|All Files (*.*)|*.*||"));
  64.  
  65.         if (dlgFile.DoModal() == IDCANCEL)
  66.             return FALSE;
  67.  
  68.         sFilePath = dlgFile.GetFileName();
  69.     }
  70.     
  71.     // Attempt to open the database
  72.     try
  73.     {
  74.         m_pDb->Open(sFilePath);
  75.     }
  76.     catch (CDaoException* e)
  77.     {
  78.         DisplayDaoException(e);
  79.         e->Delete();
  80.         return FALSE;
  81.     }
  82.  
  83.     if(!m_pDb->IsOpen())
  84.         return FALSE;
  85.  
  86.     return TRUE;
  87. }
  88.  
  89. // -------------------------------------------------------------------------
  90. // Displays a message box with the DAO Error
  91. // -------------------------------------------------------------------------
  92. void CTckDb::DisplayDaoException(CDaoException* e)
  93. {
  94.     CString strMsg;
  95.     if (e->m_pErrorInfo!=NULL)
  96.     {
  97.         strMsg.Format(
  98.             _T("%s   (%d)\n\n")
  99.             _T("Would you like to see help?"),
  100.             (LPCTSTR)e->m_pErrorInfo->m_strDescription,
  101.             e->m_pErrorInfo->m_lErrorCode);
  102.  
  103.         if (AfxMessageBox(strMsg, MB_YESNO) == IDYES)
  104.         {
  105.             WinHelp(GetDesktopWindow(),
  106.                     e->m_pErrorInfo->m_strHelpFile,
  107.                     HELP_CONTEXT,
  108.                     e->m_pErrorInfo->m_lHelpContext);
  109.         }
  110.     }
  111.     else
  112.     {
  113.         strMsg.Format(
  114.             _T("ERROR:CDaoException\n\n")
  115.             _T("SCODE_CODE        =%d\n")    
  116.             _T("SCODE_FACILITY    =%d\n")    
  117.             _T("SCODE_SEVERITY    =%d\n")    
  118.             _T("ResultFromScode    =%d\n"),
  119.             SCODE_CODE        (e->m_scode),
  120.             SCODE_FACILITY    (e->m_scode),
  121.             SCODE_SEVERITY    (e->m_scode),
  122.             ResultFromScode (e->m_scode));
  123.         AfxMessageBox(strMsg);
  124.     }
  125. }
  126.  
  127.  
  128. LPCTSTR CTckDb::strFieldType(short sType)
  129. {
  130.     switch(sType){
  131.         case (dbBoolean):
  132.             return _T("Bool");
  133.         case (dbByte):
  134.             return _T("Byte");
  135.         case (dbInteger):
  136.             return _T("Integer");
  137.         case (dbLong):
  138.             return _T("Long");
  139.         case (dbCurrency):
  140.             return _T("Currency");
  141.         case (dbSingle):
  142.             return _T("Single");
  143.         case (dbDouble):
  144.             return _T("Double");
  145.         case (dbDate):
  146.             return _T("Date");
  147.         case (dbText):
  148.             return _T("Text");
  149.         case (dbLongBinary):
  150.             return _T("Long Binary");
  151.         case (dbMemo):
  152.             return _T("Memo");
  153.         case (dbGUID):
  154.             return _T("GUID");
  155.     }
  156.     return _T("Unknown");
  157. }
  158.  
  159. LPCTSTR CTckDb::strQueryDefType(short sType)
  160. {
  161.     switch(sType){
  162.         case (dbQSelect):
  163.             return _T("Select");
  164.         case (dbQAction):
  165.             return _T("Action");
  166.         case (dbQCrosstab):
  167.             return _T("Crosstab");
  168.         case (dbQDelete):
  169.             return _T("Delete");
  170.         case (dbQUpdate):
  171.             return _T("Update");
  172.         case (dbQAppend):
  173.             return _T("Append");
  174.         case (dbQMakeTable):
  175.             return _T("MakeTable");
  176.         case (dbQDDL):
  177.             return _T("DDL");
  178.         case (dbQSQLPassThrough):
  179.             return _T("SQLPassThrough");
  180.         case (dbQSetOperation):
  181.             return _T("Set Operation");
  182.         case (dbQSPTBulk):
  183.             return _T("SPTBulk");
  184.     }
  185.     return _T("Unknown");
  186. }
  187.  
  188. LPCTSTR CTckDb::strBOOL(BOOL bFlag)
  189. {
  190.     return bFlag ? _T("TRUE") : _T("FALSE");
  191. }
  192.  
  193. CString CTckDb::strVARIANT(const COleVariant& var)
  194. {
  195.     CString strRet;
  196.     strRet = _T("Fish");
  197.     switch(var.vt){
  198.         case VT_EMPTY:
  199.         case VT_NULL:
  200.             strRet = _T("NULL");
  201.             break;
  202.         case VT_I2:
  203.             strRet.Format(_T("%hd"),V_I2(&var));
  204.             break;
  205.         case VT_I4:
  206.             strRet.Format(_T("%d"),V_I4(&var));
  207.             break;
  208.         case VT_R4:
  209.             strRet.Format(_T("%e"),(double)V_R4(&var));
  210.             break;
  211.         case VT_R8:
  212.             strRet.Format(_T("%e"),V_R8(&var));
  213.             break;
  214.         case VT_CY:
  215.             strRet = COleCurrency(var).Format();
  216.             break;
  217.         case VT_DATE:
  218.             strRet = COleDateTime(var).Format(_T("%m %d %y"));
  219.             break;
  220.         case VT_BSTR:
  221.             strRet = V_BSTRT(&var);
  222.             break;
  223.         case VT_DISPATCH:
  224.             strRet = _T("VT_DISPATCH");
  225.             break;
  226.         case VT_ERROR:
  227.             strRet = _T("VT_ERROR");
  228.             break;
  229.         case VT_BOOL:
  230.             return strBOOL(V_BOOL(&var));
  231.         case VT_VARIANT:
  232.             strRet = _T("VT_VARIANT");
  233.             break;
  234.         case VT_UNKNOWN:
  235.             strRet = _T("VT_UNKNOWN");
  236.             break;
  237.         case VT_I1:
  238.             strRet = _T("VT_I1");
  239.             break;
  240.         case VT_UI1:
  241.             strRet.Format(_T("0x%02hX"),(unsigned short)V_UI1(&var));
  242.             break;
  243.         case VT_UI2:
  244.             strRet = _T("VT_UI2");
  245.             break;
  246.         case VT_UI4:
  247.             strRet = _T("VT_UI4");
  248.             break;
  249.         case VT_I8:
  250.             strRet = _T("VT_I8");
  251.             break;
  252.         case VT_UI8:
  253.             strRet = _T("VT_UI8");
  254.             break;
  255.         case VT_INT:
  256.             strRet = _T("VT_INT");
  257.             break;
  258.         case VT_UINT:
  259.             strRet = _T("VT_UINT");
  260.             break;
  261.         case VT_VOID:
  262.             strRet = _T("VT_VOID");
  263.             break;
  264.         case VT_HRESULT:
  265.             strRet = _T("VT_HRESULT");
  266.             break;
  267.         case VT_PTR:
  268.             strRet = _T("VT_PTR");
  269.             break;
  270.         case VT_SAFEARRAY:
  271.             strRet = _T("VT_SAFEARRAY");
  272.             break;
  273.         case VT_CARRAY:
  274.             strRet = _T("VT_CARRAY");
  275.             break;
  276.         case VT_USERDEFINED:
  277.             strRet = _T("VT_USERDEFINED");
  278.             break;
  279.         case VT_LPSTR:
  280.             strRet = _T("VT_LPSTR");
  281.             break;
  282.         case VT_LPWSTR:
  283.             strRet = _T("VT_LPWSTR");
  284.             break;
  285.         case VT_FILETIME:
  286.             strRet = _T("VT_FILETIME");
  287.             break;
  288.         case VT_BLOB:
  289.             strRet = _T("VT_BLOB");
  290.             break;
  291.         case VT_STREAM:
  292.             strRet = _T("VT_STREAM");
  293.             break;
  294.         case VT_STORAGE:
  295.             strRet = _T("VT_STORAGE");
  296.             break;
  297.         case VT_STREAMED_OBJECT:
  298.             strRet = _T("VT_STREAMED_OBJECT");
  299.             break;
  300.         case VT_STORED_OBJECT:
  301.             strRet = _T("VT_STORED_OBJECT");
  302.             break;
  303.         case VT_BLOB_OBJECT:
  304.             strRet = _T("VT_BLOB_OBJECT");
  305.             break;
  306.         case VT_CF:
  307.             strRet = _T("VT_CF");
  308.             break;
  309.         case VT_CLSID:
  310.             strRet = _T("VT_CLSID");
  311.             break;
  312.     }
  313.     WORD vt = var.vt;
  314.     if(vt & VT_ARRAY){
  315.         vt = vt & ~VT_ARRAY;
  316.         strRet = _T("Array of ");
  317.     }
  318.     if(vt & VT_BYREF){
  319.         vt = vt & ~VT_BYREF;
  320.         strRet += _T("Pointer to ");
  321.     }
  322.     if(vt != var.vt){
  323.         switch(vt){
  324.             case VT_EMPTY:
  325.                 strRet += _T("VT_EMPTY");
  326.                 break;
  327.             case VT_NULL:
  328.                 strRet += _T("VT_NULL");
  329.                 break;
  330.             case VT_I2:
  331.                 strRet += _T("VT_I2");
  332.                 break;
  333.             case VT_I4:
  334.                 strRet += _T("VT_I4");
  335.                 break;
  336.             case VT_R4:
  337.                 strRet += _T("VT_R4");
  338.                 break;
  339.             case VT_R8:
  340.                 strRet += _T("VT_R8");
  341.                 break;
  342.             case VT_CY:
  343.                 strRet += _T("VT_CY");
  344.                 break;
  345.             case VT_DATE:
  346.                 strRet += _T("VT_DATE");
  347.                 break;
  348.             case VT_BSTR:
  349.                 strRet += _T("VT_BSTR");
  350.                 break;
  351.             case VT_DISPATCH:
  352.                 strRet += _T("VT_DISPATCH");
  353.                 break;
  354.             case VT_ERROR:
  355.                 strRet += _T("VT_ERROR");
  356.                 break;
  357.             case VT_BOOL:
  358.                 strRet += _T("VT_BOOL");
  359.                 break;
  360.             case VT_VARIANT:
  361.                 strRet += _T("VT_VARIANT");
  362.                 break;
  363.             case VT_UNKNOWN:
  364.                 strRet += _T("VT_UNKNOWN");
  365.                 break;
  366.             case VT_I1:
  367.                 strRet += _T("VT_I1");
  368.                 break;
  369.             case VT_UI1:
  370.                 strRet += _T("VT_UI1");
  371.                 break;
  372.             case VT_UI2:
  373.                 strRet += _T("VT_UI2");
  374.                 break;
  375.             case VT_UI4:
  376.                 strRet += _T("VT_UI4");
  377.                 break;
  378.             case VT_I8:
  379.                 strRet += _T("VT_I8");
  380.                 break;
  381.             case VT_UI8:
  382.                 strRet += _T("VT_UI8");
  383.                 break;
  384.             case VT_INT:
  385.                 strRet += _T("VT_INT");
  386.                 break;
  387.             case VT_UINT:
  388.                 strRet += _T("VT_UINT");
  389.                 break;
  390.             case VT_VOID:
  391.                 strRet += _T("VT_VOID");
  392.                 break;
  393.             case VT_HRESULT:
  394.                 strRet += _T("VT_HRESULT");
  395.                 break;
  396.             case VT_PTR:
  397.                 strRet += _T("VT_PTR");
  398.                 break;
  399.             case VT_SAFEARRAY:
  400.                 strRet += _T("VT_SAFEARRAY");
  401.                 break;
  402.             case VT_CARRAY:
  403.                 strRet += _T("VT_CARRAY");
  404.                 break;
  405.             case VT_USERDEFINED:
  406.                 strRet += _T("VT_USERDEFINED");
  407.                 break;
  408.             case VT_LPSTR:
  409.                 strRet += _T("VT_LPSTR");
  410.                 break;
  411.             case VT_LPWSTR:
  412.                 strRet += _T("VT_LPWSTR");
  413.                 break;
  414.             case VT_FILETIME:
  415.                 strRet += _T("VT_FILETIME");
  416.                 break;
  417.             case VT_BLOB:
  418.                 strRet += _T("VT_BLOB");
  419.                 break;
  420.             case VT_STREAM:
  421.                 strRet += _T("VT_STREAM");
  422.                 break;
  423.             case VT_STORAGE:
  424.                 strRet += _T("VT_STORAGE");
  425.                 break;
  426.             case VT_STREAMED_OBJECT:
  427.                 strRet += _T("VT_STREAMED_OBJECT");
  428.                 break;
  429.             case VT_STORED_OBJECT:
  430.                 strRet += _T("VT_STORED_OBJECT");
  431.                 break;
  432.             case VT_BLOB_OBJECT:
  433.                 strRet += _T("VT_BLOB_OBJECT");
  434.                 break;
  435.             case VT_CF:
  436.                 strRet += _T("VT_CF");
  437.                 break;
  438.             case VT_CLSID:
  439.                 strRet += _T("VT_CLSID");
  440.                 break;
  441.         }
  442.     }
  443.     return strRet;
  444. }
  445.