qCTKDCMTK.cxx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. // Qt includes
  2. #include <QDebug>
  3. #include <QSqlDatabase>
  4. #include <QSqlError>
  5. #include <QSqlQuery>
  6. #include <QFile>
  7. #include <QStringList>
  8. // qCTKDCMTK includes
  9. #include "qCTKDCMTK.h"
  10. // STD includes
  11. #include <iostream>
  12. //----------------------------------------------------------------------------
  13. class qCTKDCMTKPrivate: public qCTKPrivate<qCTKDCMTK>
  14. {
  15. public:
  16. qCTKDCMTKPrivate();
  17. bool executeScript(const QString& script);
  18. QSqlDatabase Database;
  19. QString DatabaseFileName;
  20. QString LastError;
  21. };
  22. //----------------------------------------------------------------------------
  23. // qCTKDCMTKPrivate methods
  24. //------------------------------------------------------------------------------
  25. qCTKDCMTKPrivate::qCTKDCMTKPrivate()
  26. {
  27. }
  28. //----------------------------------------------------------------------------
  29. // qCTKDCMTKWidget methods
  30. //------------------------------------------------------------------------------
  31. qCTKDCMTK::qCTKDCMTK(QObject* _parent): Superclass(_parent)
  32. {
  33. QCTK_INIT_PRIVATE(qCTKDCMTK);
  34. }
  35. //----------------------------------------------------------------------------
  36. qCTKDCMTK::~qCTKDCMTK()
  37. {
  38. }
  39. //----------------------------------------------------------------------------
  40. bool qCTKDCMTK::openDatabase(const QString& databaseFileName)
  41. {
  42. QCTK_D(qCTKDCMTK);
  43. d->Database = QSqlDatabase::addDatabase("QSQLITE","DICOM-DB");
  44. d->Database.setDatabaseName(databaseFileName);
  45. if ( ! (d->Database.open()) )
  46. {
  47. d->LastError = d->Database.lastError().text();
  48. return false;
  49. }
  50. if ( d->Database.tables().empty() )
  51. {
  52. initializeDatabase();
  53. }
  54. return true;
  55. }
  56. //------------------------------------------------------------------------------
  57. const QString& qCTKDCMTK::GetLastError() const {
  58. QCTK_D(const qCTKDCMTK);
  59. return d->LastError;
  60. }
  61. //------------------------------------------------------------------------------
  62. const QSqlDatabase& qCTKDCMTK::database() const {
  63. QCTK_D(const qCTKDCMTK);
  64. return d->Database;
  65. }
  66. //------------------------------------------------------------------------------
  67. bool qCTKDCMTKPrivate::executeScript(const QString& script) {
  68. QFile scriptFile(script);
  69. scriptFile.open(QIODevice::ReadOnly);
  70. if ( !scriptFile.isOpen() )
  71. {
  72. qDebug() << "Script file " << script << " could not be opened!\n";
  73. return false;
  74. }
  75. QString sqlCommands( QTextStream(&scriptFile).readAll() );
  76. sqlCommands.replace( '\n', ' ' );
  77. sqlCommands.replace("; ", ";\n");
  78. QStringList sqlCommandsLines = sqlCommands.split('\n');
  79. QSqlQuery query(Database);
  80. for (QStringList::iterator it = sqlCommandsLines.begin(); it != sqlCommandsLines.end()-1; ++it)
  81. {
  82. if (! (*it).startsWith("--") )
  83. {
  84. query.exec(*it);
  85. if (query.lastError().type())
  86. {
  87. qDebug() << "There was an error during execution of the statement: " << (*it);
  88. qDebug() << "Error message: " << query.lastError().text();
  89. return false;
  90. }
  91. }
  92. }
  93. return true;
  94. }
  95. //------------------------------------------------------------------------------
  96. bool qCTKDCMTK::initializeDatabase(const char* sqlFileName)
  97. {
  98. QCTK_D(qCTKDCMTK);
  99. return d->executeScript(sqlFileName);
  100. }
  101. //------------------------------------------------------------------------------
  102. void qCTKDCMTK::closeDatabase()
  103. {
  104. QCTK_D(qCTKDCMTK);
  105. d->Database.close();
  106. }