Автор: bynet 2.7.2010, 20:49
Надо проверить в программе существует ли БД (использую QSQLITE), если она не существует то создать, а если существует прочитать её. Помогите с реализацией! Какие пути решения?
Автор: Litkevich Yuriy 2.7.2010, 21:25
проверить существует ли файл.
но для SQLITE ещё проще, он автоматом создаст БД при открытии, если её не было.
Автор: maint 3.7.2010, 8:50
Цитата(bynet @ 3.7.2010, 2:49)
Надо проверить в программе существует ли БД (использую QSQLITE), если она не существует то создать, а если существует прочитать её. Помогите с реализацией! Какие пути решения?
есть такая функция в C/C++ stat. С помощью ее можно проверить наличие файла-базы. Там же можно получить информацию, какой она длины. Если 0, то надо создавать таблицы. Во всяком случае с этим подходом я живу уже лет 5.
Автор: Andrewshkovskii 3.7.2010, 9:53
Цитата(maint @ 3.7.2010, 9:50)
есть такая функция в C/C++ stat.
http://www.cplusplus.com/query/search.cgi?q=stat, прости? Может быть ты имел ввиду функция драйвера SQLite?
Автор: maint 3.7.2010, 11:40
Цитата(Andrewshkovskii @ 3.7.2010, 15:53)
Цитата(maint @ 3.7.2010, 9:50)
есть такая функция в C/C++ stat.
http://www.cplusplus.com/query/search.cgi?q=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
QFileInfo(filename).exists();
boost::filesystem::exists(filename);
Автор: inviZ 4.7.2010, 13:05
Цитата(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
проще получить список таблиц так:
QStringList QSqlDatabase::tables ( QSql::TableType type = QSql::Tables ) const
это будет независимо от СУБД.