crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Как очистить базу данных?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
RazrFalcon Дата 27.4.2011, 14:23
 
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();
}
mezmay Дата 27.4.2011, 8:29
  RazrFalcon а конечный вариант показать можешь?
RazrFalcon Дата 26.4.2011, 22:37
  Решено!
Я зыбыл очищять QFileInfoList :rolleyes:
RazrFalcon Дата 26.4.2011, 20:30
  После эксперементов снова слетело.
Мне нужно создать базу, 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");

В итоге получаю дублирования. Все строки по 2-а раза в таблице. Что не так?
RazrFalcon Дата 26.4.2011, 13:01
  Спасибо. Теперь работает как надо.
silver47 Дата 26.4.2011, 10:47
  достаточно model->select();

С оперативкой еще проще, mainDB.close(); mainDB.open();
RazrFalcon Дата 26.4.2011, 10:33
 
Цитата
файл удали
Это ясно. А если в оперативке база?

Цитата
QSqlQuery query;
query.exec("DELETE FROM [tablename1]");
После этого нужно снова делать:
model = new QSqlTableModel(this);
model->setTable("tags");
model->select();
table->setModel(model);
Или нет?
silver47 Дата 26.4.2011, 6:42
  Если таблиц мало (да даже если и много) то лучше их вычистить:
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] (.....)");
Litkevich Yuriy Дата 26.4.2011, 5:58
 
Цитата(RazrFalcon @ 26.4.2011, 1:32) *
Как?
файл удали
RazrFalcon Дата 25.4.2011, 22:32
 
Цитата(silver47 @ 25.4.2011, 20:08) *
я бы или таблицы все вычистил или бы файл с БД удалил.

Как?
Можно пример?
Я с базами работаю 2-а дня.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 24.10.2021, 21:35