qCTKDCMTK.cxx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. QString sqlCommands( QTextStream(&scriptFile).readAll() );
  65. sqlCommands.replace( '\n', ' ' );
  66. sqlCommands.replace("; ", ";\n");
  67. QStringList sqlCommandsLines = sqlCommands.split('\n');
  68. QSqlQuery query(Database);
  69. for (QStringList::iterator it = sqlCommandsLines.begin(); it != sqlCommandsLines.end()-1; ++it)
  70. {
  71. if (! (*it).startsWith("--") )
  72. {
  73. query.exec(*it);
  74. if (query.lastError().type())
  75. {
  76. qDebug() << "There was an error during execution of the statement: " << (*it);
  77. return false;
  78. }
  79. }
  80. }
  81. return true;
  82. }
  83. bool qCTKDCMTK::initializeDatabase(const char* sqlFileName)
  84. {
  85. QCTK_D(qCTKDCMTK);
  86. return d->executeScript(sqlFileName);
  87. }
  88. void qCTKDCMTK::closeDatabase()
  89. {
  90. QCTK_D(qCTKDCMTK);
  91. d->Database.close();
  92. }