OTSSTDLibDB.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #include "stdafx.h"
  2. #include "OTSSTDLibDB.h"
  3. #include "OTSSTDLibTable.h"
  4. using namespace OTSSQLITE;
  5. namespace OTSClassifyEngine
  6. {
  7. CSTDLibDB::CSTDLibDB(CDBStoreBasePtr a_datastore)
  8. {
  9. m_tableInfo.reset(new CSTDLibTable());
  10. myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);
  11. m_strFileName = _T("");
  12. }
  13. CSTDLibDB::CSTDLibDB(CDBStoreBasePtr a_datastore, CString strFileName)
  14. {
  15. m_tableInfo.reset(new CSTDLibTable());
  16. myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);
  17. m_strFileName = strFileName;
  18. }
  19. CSTDLibDB::~CSTDLibDB()
  20. {
  21. }
  22. CDBTableBasePtr CSTDLibDB::GetTableInfo()
  23. {
  24. return m_tableInfo;
  25. }
  26. BOOL CSTDLibDB::Init(const BOOL a_bClean /*= FALSE*/)
  27. {
  28. return myDB->Init(a_bClean);
  29. }
  30. BOOL CSTDLibDB::CreateTable(const BOOL a_bForce /*= FALSE*/)
  31. {
  32. return myDB->CreateTable(a_bForce);
  33. }
  34. BOOL CSTDLibDB::DeleteTable()
  35. {
  36. return myDB->DeleteTable();
  37. }
  38. BOOL CSTDLibDB::RemoveAllRows()
  39. {
  40. return myDB->RemoveAllRows();
  41. }
  42. BOOL CSTDLibDB::IsDBExist()
  43. {
  44. return myDB->IsDBExist();
  45. }
  46. OTSSQLITE::CDBStoreBasePtr CSTDLibDB::GetDatastore()
  47. {
  48. return myDB->GetDatastore();
  49. }
  50. OTSSQLITE::CDBQueryBasePtr CSTDLibDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)
  51. {
  52. return myDB->GetTableQuery(a_sOrderColumnName);
  53. }
  54. CSpectrumSTDItemList CSTDLibDB::GetSTDItems(BOOL bForce/* = FALSE*/)
  55. {
  56. CSpectrumSTDItemList itms;
  57. if (bForce)
  58. {
  59. auto tableInfoPtr = GetTableInfo();
  60. ASSERT(tableInfoPtr);
  61. if (!tableInfoPtr)
  62. {
  63. return itms;
  64. }
  65. auto query = GetTableQuery("id");
  66. ASSERT(query);
  67. if (!query)
  68. {
  69. return itms;
  70. }
  71. while (!query->IsEOF())
  72. {
  73. CSpectrumSTDItemPtr pSTDItem = ReadSTDItem(query);
  74. itms.push_back(pSTDItem);
  75. query->NextRow();
  76. }
  77. return itms;
  78. }
  79. return itms;
  80. /*return m_pSTDLib;*/
  81. }
  82. CSpectrumSTDItemPtr CSTDLibDB::ReadSTDItem(CDBQueryBasePtr a_query)
  83. {
  84. int iCol = 0;
  85. int iValue = 0;
  86. float fValue = 0;
  87. CString strValue = "";
  88. CSpectrumSTDItemPtr pSTDMineral = CSpectrumSTDItemPtr(new CSpectrumSTDItem());
  89. // ¸øpSTDMineral¸³Öµ
  90. iCol = (int)CSTDLibTable::ColumnID::N_ID - (int)CSTDLibTable::ColumnID::MIN;
  91. iValue = a_query->GetColIntValue(iCol, 0);
  92. pSTDMineral->SetID(iValue);
  93. iValue = 0;
  94. iCol = (int)CSTDLibTable::ColumnID::S_NAME - (int)CSTDLibTable::ColumnID::MIN;
  95. auto name = a_query->GetColStringValue(iCol);
  96. pSTDMineral->SetName(name);
  97. iCol = (int)CSTDLibTable::ColumnID::N_COLOR - (int)CSTDLibTable::ColumnID::MIN;
  98. auto color = a_query->GetColIntValue(iCol);
  99. pSTDMineral->SetColor(color);
  100. iValue = 0;
  101. iCol = (int)CSTDLibTable::ColumnID::B_SPEC - (int)CSTDLibTable::ColumnID::MIN;
  102. auto pSpec = a_query->GetColBlobValue(iCol, iValue);
  103. auto channelNum = pSTDMineral->GetXraySpectrum()->GetChannelsNum();
  104. if (iValue == sizeof(DWORD) * channelNum)
  105. {
  106. pSTDMineral->GetXraySpectrum()->SetXrayData((DWORD*)pSpec);
  107. }
  108. //the elements ratio is usfull only when we make the report so we don't read them here.
  109. /*GetElements(pSTDMineral);*/
  110. return pSTDMineral;
  111. }
  112. }