crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 3:11