У меня DB используется в качестве table cached.
Иногда, мне нужно или ее вообще удалить или очистить полностью.
А у меня, новые данные просто в конец дописываются.
Пробовал так:
QSqlQuery query;
query.prepare("DELETE * FROM tags");
query.exec();
//так
db->removeDatabase("my.db");
//так
db->close();
//так
QSqlDatabase::removeDatabase(QSqlDatabase::database().connectionName());
я бы или таблицы все вычистил или бы файл с БД удалил. Кстати в DELETE FROM никогда не указываются поля т.е. DELETE FROM tags
Если таблиц мало (да даже если и много) то лучше их вычистить:
QSqlQuery query(cacheDB);
query.exec("DELETE FROM [tablename1]");
...
query.exec("DELETE FROM [tablenamen]");
cacheDB.close();
QFile dbFile(cacheDB.databaseName());
if(dbFile.remove()) qDebug() << "База данных была!!!";
// теперь заново открываем БД, это приведет к созданию пустой БД, таблицы придется создавать заново
if(!cacheDB.open()) {
qDebug() << "Ошибка при открытии базы данных: " << cacheDB.lastError().text();
return;
}
query.exec("CREATE TEBLE [tablename1] (.....)");
QSqlQuery query;
query.exec("DELETE FROM [tablename1]");
model = new QSqlTableModel(this);
model->setTable("tags");
model->select();
table->setModel(model);
Или нет?
достаточно model->select();
С оперативкой еще проще, mainDB.close(); mainDB.open();
Спасибо. Теперь работает как надо.
После эксперементов снова слетело.
Мне нужно создать базу, 1-н раз.
Затем мы ее заполняем и выводим в QTableView.
Затем нужно ее очистить, структура должна остатся.
И снова заполнить.
Делаю так:
//создаю в MainWindow::MainWindow(...)
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
//в функции заполнения
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
//... заполнение
//функция очистки
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
query.exec("DELETE FROM tags");
Решено!
Я зыбыл очищять QFileInfoList
RazrFalcon а конечный вариант показать можешь?
bool dbCreated=false; //так как мне не нужно ее снова создавать
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
//... остальной код
}
void MainWindow::addToSQL()
{
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
QFileInfoList files = *selectedFilesInfoList;
if (!dbCreated) {
query.exec("create table tags (title text, "
"artist text, "
"album text)");
dbCreated=true;
}
for (int i=0; i<files.count(); i++) {
query.prepare("INSERT INTO tags VALUES "
"(:title, :artist, :album)");
query.bindValue(":title", QS(tag->title()));
query.bindValue(":artist", QS(tag->artist()));
query.bindValue(":album", QS(tag->album()));
query.exec();
}
model = new QSqlTableModel(this);
model->setTable("tags");
model->select();
table->setModel(model);
table->resizeColumnsToContents();
}
void MainWindow::on_actionClose_triggered() {
QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query;
query.exec("DELETE FROM tags");
model->select();
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)