void MusicDownloadDatabase::createTable()
{
    const char* createTbl =
            "CREATE TABLE IF NOT EXISTS "
            TABLE_NAME
            " ("
            "mid INTEGER NOT NULL,"
            "name VARCHAR(256),"
            "artist VARCHAR(256),"
            "status INTEGER NOT NULL,"
            "progress INTEGER NOT NULL DEFAULT(0),"
            "size INTEGER NOT NULL,"
            "url VARCHAR(256) NOT NULL,"
            "fname VARCHAR(256) NOT NULL,"
            "errcode INTEGER NOT NULL DEFAULT(0),"
            "rawdata BLOB NOT NULL,"
            "addtime TIMESTAMP NOT NULL DEFAULT(datetime('now', 'localtime')),"
            "PRIMARY KEY (mid)"
            ")";

    if (databaseVersion() == DatabaseVersion_V0) {
        db->exec(createTbl);
    }
}
Exemple #2
0
/**
	connexion a la base de donnees
  */
char database::connect(){
	db = QSqlDatabase::addDatabase("Q"+m_bdd);
	db.setHostName( m_hostName );
	db.setPort( m_port );
	db.setDatabaseName( m_name);
	db.setUserName( m_login );
	db.setPassword( m_password );

	if (!db.open()) {
		QMessageBox mBox(QMessageBox::Critical, tr("Erreur"), tr("<b>La connexion avec la base de donnees n a pas pu etre etablie!</b>"),QMessageBox::Ok);
		mBox.setDetailedText ( db.lastError().text() );
		mBox.exec();
		m_connected = false;
		return DB_CON_ERR;
	}
	else m_connected = true;

	// Si pas de tables on les crees
	QStringList tList = db.tables();
	if((!tList.contains("TAB_INFORMATIONS"))||(tList.count()< 14)){
		 // Demande si on creer une nouvelle base de donnees
		QString mess;
		if(db.driverName() == "QSQLITE")mess = tr("Voulez-vous créer une nouvelle base de données ?\n\n")+ db.databaseName();
		else mess = tr("Voulez-vous créer de nouvelles tables dans la base de données ?\n\n") + db.databaseName();
		QMessageBox mBox(QMessageBox::Question, tr("Question"), mess ,QMessageBox::Yes | QMessageBox::No);
		mBox.setDefaultButton(QMessageBox::No);
		int ret = mBox.exec();

		if(ret == QMessageBox::Yes){
			if( !create() ){
				m_connected = false;
				return DB_CON_ERR;
			}
		}else{
			m_connected = false;
			return DB_CON_ERR;
		}
	}
	else m_connected = true;

	//DI SQLITE activation des foreign Keys
	if(db.driverName() == "QSQLITE"){
		QSqlQuery query;
		query.prepare("PRAGMA foreign_keys = ON;");

		if(!query.exec()) {
			QMessageBox::critical(m_parent, tr("Erreur"), query.lastError().text());
			return false;
		}
	}

	// AVOIR: SI DEFAUT LES RETURN PRECEDENT QUI ZAPP LA CREATION DES CLASS NE POSE PAS SOUCIS!?
	m_databaseVersion = databaseVersion();
	m_isTax = isTax();
	//Creation des sous class
	m_customer = new customer(db, m_parent);
	//instanciation de la class product
	m_product = new product(db, m_lang, m_parent);
	//class de la gestion des tax
	m_tax = new tax(m_parent);

	//Test de la version de la base de donnees... !!
	if(m_databaseVersion > MCERCLE::Dbase_support){
		QString mess = tr("Version de mcercle: ") + MCERCLE::Version;
		mess += tr("\nVersion de la base de données: ") + QString::number(m_databaseVersion);
		mess += tr("\n\nVersions des bases de données compatibles: <= ") + QString::number(MCERCLE::Dbase_support);
		QMessageBox mBox(QMessageBox::Warning, tr("Attention"), tr("mcercle ne support pas cette version de base de données...\nMerci de faire évoluer mcercle."),QMessageBox::Ok);
		mBox.setDetailedText ( mess );
		mBox.exec();
		this->close();
		return DB_CON_ERR;
	}
	qDebug() << "version base:" <<QString::number(m_databaseVersion);
	
	// Mise a jour de la base de donnees
	if(m_databaseVersion < MCERCLE::Dbase_support){
		int ret = QMessageBox::warning(
								this->m_parent,
								tr("Attention"),
								tr("Cette version de mcercle doit mettre à jour la base de donnée pour fonctionner.\n\nVoulez-vous mettre à jour la base de donnée ?\n(Ceci peut prendre quelques minutes...)"),
								QMessageBox::Yes, QMessageBox::No | QMessageBox::Default
								);
	
		if(ret == QMessageBox::Yes){
			update_db upDatabase(this);

			QString logAll, log, mess;
			bool upgradeOk=true;
			if(m_databaseVersion <= 1) {
				if(!upDatabase.upgradeToV2(&log)) upgradeOk = false;
			}
			logAll += log;
			if(m_databaseVersion <= 2 ) {
				if(!upDatabase.upgradeToV3(&log)) upgradeOk = false;
			}
			logAll += log;
			if(m_databaseVersion <= 3 ) {
				if(!upDatabase.upgradeToV4(&log)) upgradeOk = false;
			}
			logAll += log;
			if(m_databaseVersion <= 4 ) {
				if(!upDatabase.upgradeToV5(&log)) upgradeOk = false;
			}
			logAll += log;
			if(m_databaseVersion <= 5 ) {
				if(!upDatabase.upgradeToV6(&log)) upgradeOk = false;
			}
			logAll += log;
			if(m_databaseVersion <= 6 ) {
				if(!upDatabase.upgradeToV7(&log)) upgradeOk = false;
			}
			logAll += log;
			if(m_databaseVersion <= 7 ) {
				if(!upDatabase.upgradeToV8(&log)) upgradeOk = false;
			}
			logAll += log;
			if(m_databaseVersion <= 8 ) {
				if(!upDatabase.upgradeToV9(&log)) upgradeOk = false;
			}
			logAll += log;

			QMessageBox mBox(QMessageBox::Information, tr("Information"), mess, QMessageBox::Ok);
			if(upgradeOk){
				mess += tr("La mise à jour de la base de données a réussi !\n");
				mBox.setIcon( QMessageBox::Information );
			}
			else{
				mess += tr("La mise à jour contient des erreurs :-(\nAfficher les détails pour voir ce qui ne va pas.");
				mBox.setIcon( QMessageBox::Critical );
			}
			mBox.setText( mess );
			mBox.setDetailedText(logAll);
			mBox.exec();
		}
		else{
			this->close();
			return DB_CON_ERR;
		}
	}
	
	return DB_CON_OK;
}