qCTKDCMTK.cxx 2.7 KB

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