Russian Qt Forum
Ноябрь 23, 2024, 12:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: вопрос по SQLITE  (Прочитано 6466 раз)
pro100skif
Гость
« : Июнь 12, 2014, 14:02 »

Доброго времени суток, только начал работать с БД но не очень в них разбираюсь.Если б вы смогли ответить на кое какие вопросы был бы очень благодарен.
И так:
1.когда только разбирал примеры то заметил что если создавать БД с таким же именем и названиями таблиц то данные сохраняются даже после завершения работы программы, хотя в деструкторе использую   
db.close();
db.removeDatabase("QSQLITE");
Я просто не очень понимаю что происходит и где оно хранит данные
для подключения использую:
db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(dbName);
    db.open();
2.Когда создаю поля с помощью Sql запроса
query.exec("alter table "+tableName+" add "+fieldName+" "+typeName);
получаю от пользователя имя поля и тип данных поля.
но когда ввожу данные в ячейки , например  в ячейку  INT или REAL можно вносить текст.Так и должно быть и мне нужно контролировать что пользователь вводит в ячейку или я что то не так делаю?
Заранее спасибо за ответ.
Записан
Bepec
Гость
« Ответ #1 : Июнь 12, 2014, 14:08 »

1) void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static]
Removes the database connection connectionName from the list of database connections.
2) в SQLite нет типизации, насколько я помню. Что угодно суй. Контролировать должен сам Улыбающийся
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #2 : Июнь 12, 2014, 15:43 »

Вот так правильно удалять:
Код
C++ (Qt)
QString conn;
{
   QSqlDatabase db = QSqlDatabase::database();
   conn = db.connectionName();
   db.close();
}
QSqlDatabase::removeDatabase(conn);
Этот момент довольно-таки подробно освещен в букваре.
Кроме того, removeDatabase не удаляет физический файл SQLITE, а удаляет подключение из списка. После removeDatabase надо удалять файл принудительно.
Записан
pro100skif
Гость
« Ответ #3 : Июнь 13, 2014, 19:35 »

Вот так правильно удалять:
Код
C++ (Qt)
QString conn;
{
   QSqlDatabase db = QSqlDatabase::database();
   conn = db.connectionName();
   db.close();
}
QSqlDatabase::removeDatabase(conn);
Этот момент довольно-таки подробно освещен в букваре.
Кроме того, removeDatabase не удаляет физический файл SQLITE, а удаляет подключение из списка. После removeDatabase надо удалять файл принудительно.
тогда еще  вопрос (возможно неграмотный) как этот файл получить из SQLITE  что б его можно было записать открыть из программы...
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #4 : Июнь 14, 2014, 01:11 »

тогда еще  вопрос (возможно неграмотный) как этот файл получить из SQLITE  что б его можно было записать открыть из программы...

Как получить не знаю, но создать временную БД на диске, а потом удалить можно так:
Код
C++ (Qt)
QTemporaryFile f;
f.open();
// f.setAutoRemove(true); // by default is true
qDebug() << "File name:" << f.fileName();
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(f.fileName());
qDebug() << "Db is open:" << db.open();
QSqlQuery q("create table t1(c1 int, c2 varchar(32));");
qDebug() << "exec:" << q.exec() << q.lastError();
db.close();
}
 
Записан
Bepec
Гость
« Ответ #5 : Июнь 14, 2014, 10:29 »

При открытии QSqlDatabase SQLite типа, создаётся файл БД. И что хотите с ним и делайте Веселый
Записан
pro100skif
Гость
« Ответ #6 : Июнь 16, 2014, 22:02 »

ага спасибо
Записан
pro100skif
Гость
« Ответ #7 : Июнь 17, 2014, 03:28 »

При открытии QSqlDatabase SQLite типа, создаётся файл БД. И что хотите с ним и делайте Веселый
а где этот файл находится?в папке с проектом ее нету.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Июнь 17, 2014, 06:44 »

При открытии QSqlDatabase SQLite типа, создаётся файл БД. И что хотите с ним и делайте Веселый
а где этот файл находится?в папке с проектом ее нету.

Ищите в папке с ехе Подмигивающий
Записан

mitrich
Гость
« Ответ #9 : Июнь 17, 2014, 12:38 »

а где этот файл находится?в папке с проектом ее нету.
db.setDatabaseName("Путь/к/файлу");
Записан
pro100skif
Гость
« Ответ #10 : Июнь 17, 2014, 14:53 »

При открытии QSqlDatabase SQLite типа, создаётся файл БД. И что хотите с ним и делайте Веселый
а где этот файл находится?в папке с проектом ее нету.

Ищите в папке с ехе Подмигивающий
в папке с exe ничего нету ну в смысле есть ехе и другие файлы но файлов бд нету
Записан
pro100skif
Гость
« Ответ #11 : Июнь 18, 2014, 02:56 »

короче решил проблему так, установил mysql и начал использовать его.всем спасибо за помощь
Записан
Bepec
Гость
« Ответ #12 : Июнь 18, 2014, 03:29 »

Как говорится "А оно мне надо?".

ну и с богом Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.107 секунд. Запросов: 23.