qCTKDCMTK.cxx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. QCTK_SET_CXX(qCTKDCMTK, const QString&, setDatabaseFileName, DatabaseFileName);
  38. //----------------------------------------------------------------------------
  39. bool qCTKDCMTK::openDatabase(const QString& databaseFileName)
  40. {
  41. QCTK_D(qCTKDCMTK);
  42. d->Database = QSqlDatabase::addDatabase("QSQLITE","DICOM-DB");
  43. d->Database.setDatabaseName(databaseFileName);
  44. if ( ! (d->Database.open()) )
  45. {
  46. d->LastError = d->Database.lastError().text();
  47. return false;
  48. }
  49. return true;
  50. }
  51. const QString& qCTKDCMTK::GetLastError() const {
  52. QCTK_D(const qCTKDCMTK);
  53. return d->LastError;
  54. }
  55. QSqlDatabase& qCTKDCMTK::database() {
  56. QCTK_D(qCTKDCMTK);
  57. return d->Database;
  58. }
  59. bool qCTKDCMTKPrivate::executeScript(const QString& script) {
  60. QFile scriptFile(script);
  61. qDebug() << scriptFile.exists();
  62. qDebug() << scriptFile.size();
  63. QString sqlCommands( scriptFile.readAll() );
  64. qDebug() << sqlCommands ;
  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. query.exec(*it);
  72. if (query.lastError().type())
  73. {
  74. std::cerr
  75. << "There was an error during execution of the statement: "
  76. << (*it).toStdString();
  77. }
  78. return false;
  79. }
  80. return true;
  81. }
  82. bool qCTKDCMTK::initializeDatabase()
  83. {
  84. QCTK_D(qCTKDCMTK);
  85. return d->executeScript(":/dicom/dicom-schema.sql");
  86. }