OLEDBMFCMiscSet.cpp
上传用户:benben_wyd
上传日期:2010-02-26
资源大小:1229k
文件大小:5k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // OLEDBMFCMiscSet.cpp : implementation of the COLEDBMFCMiscSet class
  2. //
  3. #include "stdafx.h"
  4. #include "OLEDBMFCMisc.h"
  5. #include "OLEDBMFCMiscSet.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // COLEDBMFCMiscSet implementation
  13. HRESULT COLEDBMFCMiscSet::MoveNext(){
  14. /*
  15. if (m_nCurrentRow >= 0 && m_nCurrentRow+1 < m_nCurrentRows) {
  16. // Get the data for the next row
  17. m_nCurrentRow++;
  18. m_hRow = m_phRow[m_nCurrentRow];
  19. return GetData();
  20. }
  21. // HRESULT HR = CTable<CAccessor<CRowDefinition>, CRowset >
  22. */
  23. HRESULT HR = CTable<CAccessor<CRowDefinition>, CBulkRowset >
  24. ::MoveNext();
  25. return HR;
  26. }
  27. void COLEDBMFCMiscSet::DisplayColumnInfo(){
  28. ULONG ulColumns; //Number of columns
  29. DBCOLUMNINFO *pColumnInfo; //Arrow of column information
  30. LPOLESTR pColumnNames; //Array of column names
  31. char strDisplay[500]; //String to display
  32. GetColumnInfo(&ulColumns,&pColumnInfo, &pColumnNames);
  33. sprintf(strDisplay, "The number of columns is %dnn", ulColumns-1);
  34. strcat(strDisplay, "The columns are:");
  35. for (ULONG loop = 1; loop < ulColumns; loop++) {
  36. char mbstr[50]; //String for w_str conversion
  37. char strType[50];
  38. strcpy(mbstr, ""); //Initialize string
  39. if (pColumnInfo[loop].pwszName) {
  40. wcstombs(mbstr, pColumnInfo[loop].pwszName, 50);
  41. }
  42. sprintf(strDisplay, "%sn  %d) %-30s %s [%d]",
  43. strDisplay, loop, 
  44. mbstr,
  45. getType(pColumnInfo[loop].wType, strType),
  46. pColumnInfo[loop].ulColumnSize);
  47. if (pColumnInfo[loop].bPrecision != 255) {
  48. if (pColumnInfo[loop].bScale != 255) {
  49. sprintf (strDisplay, "%s(%d.%d)",
  50. strDisplay,
  51. pColumnInfo[loop].bPrecision,
  52. pColumnInfo[loop].bScale);
  53. }
  54. else {
  55. sprintf (strDisplay, "%s(%d)",
  56. strDisplay,
  57. pColumnInfo[loop].bPrecision);
  58. }
  59. }
  60. }
  61. ::MessageBox(NULL, strDisplay, "Column Information", MB_OK);
  62. }
  63. char *COLEDBMFCMiscSet::getType(DBTYPE wType, char *strType) {
  64. strcpy(strType, "");
  65.     //Test for type without reference, array, or vector
  66.     switch (wType& ~(DBTYPE_BYREF | DBTYPE_ARRAY | DBTYPE_VECTOR)){
  67. case DBTYPE_BOOL:
  68. strcpy(strType, "boolean ");
  69. break;
  70. case DBTYPE_BSTR:
  71. strcpy(strType, "wide-character string (BSTR)");
  72. break;
  73. case DBTYPE_BYTES:
  74. strcpy(strType, "byte array ");
  75. break;
  76. case DBTYPE_CY:
  77. strcpy(strType, "currency ");
  78. break;
  79. case DBTYPE_DATE:
  80. strcpy(strType, "date ");
  81. break;
  82. case DBTYPE_DBDATE:
  83. strcpy(strType, "DBDATE ");
  84. break;
  85. case DBTYPE_DBTIME:
  86. strcpy(strType, "DBTIME ");
  87. break;
  88. case DBTYPE_DBTIMESTAMP:
  89. strcpy(strType, "DBTIMESTAMP ");
  90. break;
  91. case DBTYPE_DECIMAL:
  92. strcpy(strType, "Decimal ");
  93. break;
  94. case DBTYPE_ERROR:
  95. strcpy(strType, "32-bit error code ");
  96. break;
  97. case DBTYPE_FILETIME:
  98. strcpy(strType, "FILETIME (100-nanoseconds since 1/1/1601 ");
  99. break;
  100. case DBTYPE_GUID:
  101. strcpy(strType, "GUID (globally unique identifier)");
  102. break;
  103. case DBTYPE_HCHAPTER:
  104. strcpy(strType, "4-byte chapter ");
  105. break;
  106. case DBTYPE_I1:
  107. strcpy(strType, "one-byte signed integer ");
  108. break;
  109. case DBTYPE_I2:
  110. strcpy(strType, "2-byte integer ");
  111. break;
  112. case DBTYPE_I4:
  113. strcpy(strType, "4-byte integer ");
  114. break;
  115. case DBTYPE_I8:
  116. strcpy(strType, "eight byte signed integer ");
  117. break;
  118. case DBTYPE_IDISPATCH:
  119. strcpy(strType, "OLE  IDispatch interface pointer ");
  120. break;
  121. case DBTYPE_IUNKNOWN:
  122. strcpy(strType, " OLE  IUnknown interface pointer  ");
  123. break;
  124. case DBTYPE_NULL:
  125. strcpy(strType, "null ");
  126. break;
  127. case DBTYPE_NUMERIC:
  128. strcpy(strType, "numeric ");
  129. break;
  130. case DBTYPE_PROPVARIANT:
  131. strcpy(strType, "PROPVARIANT ");
  132. break;
  133. case DBTYPE_R4:
  134. strcpy(strType, "single-precision floating point ");
  135. break;
  136. case DBTYPE_R8:
  137. strcpy(strType, "double-precision floating point ");
  138. break;
  139. case DBTYPE_RESERVED:
  140. strcpy(strType, "reserved (unknown)");
  141. break;
  142. case DBTYPE_STR:
  143. strcpy(strType, "char * ");
  144. break;
  145. case DBTYPE_UDT:
  146. strcpy(strType, "user-defined data type ");
  147. break;
  148. case DBTYPE_UI1:
  149. strcpy(strType, "one-byte unsigned integer ");
  150. break;
  151. case DBTYPE_UI2:
  152. strcpy(strType, "two-byte unsigned integer ");
  153. break;
  154. case DBTYPE_UI4:
  155. strcpy(strType, "four byte unsigned integer ");
  156. break;
  157. case DBTYPE_UI8:
  158. strcpy(strType, "eight byte unsigned integer ");
  159. break;
  160. case DBTYPE_VARIANT:
  161. strcpy(strType, "VARIANT ");
  162. break;
  163. case DBTYPE_VARNUMERIC:
  164. strcpy(strType, "DB_VARNUMERIC ");
  165. break;
  166. case DBTYPE_WSTR:
  167. strcpy(strType, "unicode string (wchar_t)");
  168. } //End Switch
  169. if (wType & DBTYPE_ARRAY)
  170. strcat (strType, "SAFEARRAY pointer ");
  171. if (wType & DBTYPE_BYREF)
  172. strcat (strType, "(by reference)");
  173. if (wType & DBTYPE_VECTOR)
  174. strcat (strType, "DBVECTOR structure ");
  175. return strType;
  176. }