Bonjour,
Depuis plusieurs jours je cherche une solution à mon problème d'accès à la BD SQlite3 avec plusieurs threads.
Ma fonction d'accès à la BD :
et le code de lancement des threads
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 def ouvrecnx(self): basedonnee = os.path.join(CONFIG_DATABASE_PATH, CONFIG_DATABASE_NAME) db = QSqlDatabase.addDatabase("QSQLITE") db.setDatabaseName(basedonnee) if not db.open(): QMessageBox.critical(None, "Problème d'accès à la base de données \n", "Impossible d'établir une connexion à la base de données.\n" "Cliquer Annuler pour sortir.", QMessageBox.Cancel) return False else: return db
D'après la doc, pour chaque thread = une connexion à la DB, mais d'une par dans www.sqlit.org il y' a la notion de "SQLITE_CONFIG_MULTITHREAD" que je n'ai pas pu l'intégrer dans mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 t1 = threading.Thread(name='Tables Temporaires1', target=self.creation_tables_tmp1) t2 = threading.Thread(name='Tables Temporaires2', target=self.creation_tables_tmp2) t1.start() print(t1.name) t2.start() print(t2.name)
et d'autre par j'ai trouvé un bout de code en C++ qui génère d'une manière automatique la connexion à DB avec un nom différent
Merci de bien m'aider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 QSqlDatabase DBUtil::openDataBase() { quint32 value = QRandomGenerator::global()->generate(); QSqlDatabase db; if ( true == QSqlDatabase::contains(QString::number(value))) { db = QSqlDatabase::database(QString::number(value)); } else { db = QSqlDatabase::addDatabase("QSQLITE", QString::number(value)); db.setDatabaseName("xxx.db"); } if (false == db.open()) { qDebug() << db.lastError().text(); } return db; }![]()
Partager