crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Проверка существования БД, и её открытия или создание
bynet
  опции профиля:
сообщение 2.7.2010, 20:49
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

Спасибо сказали: 0 раз(а)




Репутация:   0  


Надо проверить в программе существует ли БД (использую QSQLITE), если она не существует то создать, а если существует прочитать её. Помогите с реализацией! Какие пути решения?

Сообщение отредактировал bynet - 2.7.2010, 20:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.7.2010, 21:25
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


проверить существует ли файл.

но для SQLITE ещё проще, он автоматом создаст БД при открытии, если её не было.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 3.7.2010, 8:50
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(bynet @ 3.7.2010, 2:49) *
Надо проверить в программе существует ли БД (использую QSQLITE), если она не существует то создать, а если существует прочитать её. Помогите с реализацией! Какие пути решения?

есть такая функция в C/C++ stat. С помощью ее можно проверить наличие файла-базы. Там же можно получить информацию, какой она длины. Если 0, то надо создавать таблицы. Во всяком случае с этим подходом я живу уже лет 5.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 3.7.2010, 9:53
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Цитата(maint @ 3.7.2010, 9:50) *
есть такая функция в C/C++ stat.

Что, прости? Может быть ты имел ввиду функция драйвера SQLite?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 3.7.2010, 11:40
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


Цитата(Andrewshkovskii @ 3.7.2010, 15:53) *
Цитата(maint @ 3.7.2010, 9:50) *
есть такая функция в C/C++ stat.

Что, прости? Может быть ты имел ввиду функция драйвера SQLite?

именно системный вызов/функция C/C++. stat или lstat. Надо подключить хедер <sys/stat.h>. Она есть во всех C/C++ (gcc/g++, Borland, Watcom, Intel C++, была, во всяком случае в VS до 8 версии. Дальше не пользовался, не знаю. Вызов прост как грабли для stat. Для lstat - подобен

struct stat stbuf;
if(stat(путь_до_файла, &stbuf) < 0)
А нету
else
Есть;

в stat.st_size - длина файла.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 3.7.2010, 11:43
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


QFileInfo(filename).exists();
boost::filesystem::exists(filename);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
inviZ
  опции профиля:
сообщение 4.7.2010, 13:05
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.6.2010
Пользователь №: 1781

Спасибо сказали: 4 раз(а)




Репутация:   1  


Цитата(bynet @ 3.7.2010, 4:49) *
Надо проверить в программе существует ли БД (использую QSQLITE), если она не существует то создать, а если существует прочитать её. Помогите с реализацией! Какие пути решения?

Все верно во втором посте. База сама создается, если ее нет.
Но скорее всего тебе еще придется проверить, существуют ли нужная тебе таблица/таблицы. Например, как-то так:

//check for table existence
QSqlQuery query("select name from sqlite_master where type='table' and name='table_name'", database);
if (!query.first())
{
    //table does not exist, create it
   ...      
}


Вместо table_name используешь название нужной таблицы, естественно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.7.2010, 15:03
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


проще получить список таблиц так:
QStringList QSqlDatabase::tables ( QSql::TableType type = QSql::Tables ) const
это будет независимо от СУБД.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 0:16