Russian Qt Forum

Qt => Базы данных => Тема начата: dima123 от Март 10, 2011, 22:09



Название: SQLite бд и Qt
Отправлено: dima123 от Март 10, 2011, 22:09
Помогите подключить созданную в acces бд простейшим способом
версия qt последняя.


Название: Re: Acces бд и Qt
Отправлено: ieroglif от Март 10, 2011, 22:30
глянь маны по QSqlDatabase в сторону QODBC драйвера.
там где-то даже пример был


Название: Re: Acces бд и Qt
Отправлено: GraninAS от Март 11, 2011, 07:41
Алгоритм примерно такой.

- Панель Управления -> Администрирование -> Источники данных (ODBC).
- Добавляете новый источник данных.
Драйвер: Microsoft Access Driver
Имя источника данных - то имя, которое вы будете передавать в качестве имени базы данных в класс QSqlDatabase.
"База данных" - файл бд Access.
Там еще какие-то поля, заполняете по мере надобности (я туда не лазил никогда, не знаю).

В программе:
- подключить модуль sql в pro-файле:
QT += sql
- подсоединиться к БД:

QSqlDatabase db;
db = QSqlDatabase::addDatabase("QODBC");
db.setHostName(/*IP-адрес или имя хоста*/);
db.setDatabaseName(/*Имя базы данных, оно же - имя источника данных*/);
db.setUserName(/*Пользователь*/);
db.setPassword(/*Пароль*/);

if (!db.open())
{
   qDebug() << "DB open failed. Error message: " << db.lastError().text();
}
else
{
   qDebug() << "Success DB open.";
}

По умолчанию драйвер QODBC, вроде, собран и присутствует. Если нет, - придется пересобирать Qt и драйвер.


Название: Re: Acces бд и Qt
Отправлено: Пантер от Март 11, 2011, 08:23
Если есть возможность, не используй БД access, так как она дурацкая. SQLite намного лучше.


Название: Re: Acces бд и Qt
Отправлено: Maquefel от Март 11, 2011, 16:25
Код:
QString sDatabaseName = "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ="
sDatabaseName.append(ПУТЬ К ФАЙЛУ БАЗЫ);
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(sDatabaseName );

И еще кстати в последней версии Qt необходимо её собрать.
Если есть возможность, не используй БД access, так как она дурацкая. SQLite намного лучше.

И таки да - не используй.


Название: Re: Acces бд и Qt
Отправлено: dima123 от Март 11, 2011, 16:43
QString sDatabaseName = "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ="sDatabaseName.append("D:\db1.mdb");
не компилит
а как собрать?
а  SQLite бд, в примере сохраняется в папке с проектом?и чем её можно открыть?


Название: Re: Acces бд и Qt
Отправлено: Drafter от Март 12, 2011, 11:57
Цитировать
а  SQLite бд, в примере сохраняется в папке с проектом?и чем её можно открыть?

Вся SQLite база хранится в одном файле. Где он расположен - не принципиально. Открыть (создать) можно, к примеру, с помощью SQLite Expert (http://www.sqliteexpert.com/index.html).


Название: Re: Acces бд и Qt
Отправлено: Sergey B. от Март 12, 2011, 12:05
помощью SQLite Expert (http://www.sqliteexpert.com/index.html).
Проприетарщина...

есть опенсорс (http://www.sqliteman.com/) тулзы.


Название: Re: Acces бд и Qt
Отправлено: Mikhail от Март 12, 2011, 15:07
SQLite база и таблицы в ней отлично создаются средствам Qt.


Название: Re: Acces бд и Qt
Отправлено: Sergey B. от Март 12, 2011, 16:35
SQLite база и таблицы в ней отлично создаются средствам Qt.

Я так и делаю. Просто некоторые могут не уметь или предпочитать GUI дизайнер.


Название: Re: Acces бд и Qt
Отправлено: Maquefel от Март 14, 2011, 09:33
QString sDatabaseName = "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ="sDatabaseName.append("D:\db1.mdb");
не компилит
а как собрать?
а  SQLite бд, в примере сохраняется в папке с проектом?и чем её можно открыть?

Код:
QString sDatabaseName = "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=";
sDatabaseName.append("D:\db1.mdb");
Точку с запятой забыл.

Собрать:
заходишь в {$QTDIR}
cd src\plugins\sqldrivers\odbc
qmake
mingw32-make
mingw32-make install

если mingw иначе cmake по-моему


Название: Re: Acces бд и Qt
Отправлено: Пантер от Март 14, 2011, 10:11
nmake. cmake это другое.


Название: Re: Acces бд и Qt
Отправлено: dima123 от Март 19, 2011, 12:50
спасибо, работаю с SQLite
интересует вопрос , как в запрос передать не значения, а переменную
например:
int a=1;
QString b="asd";
model->setQuery("insert into tables values(как тут переменные записуються?)");


Название: Re: SQLite бд и Qt
Отправлено: Sergey B. от Март 19, 2011, 14:44
Почитать документацию. Там всё расписано.


Название: Re: SQLite бд и Qt
Отправлено: dima123 от Март 20, 2011, 18:23
сделал.
теперь передаю в запрос русские слова,а заносятся в таблицу крякозярбы
query.exec("insert into a values(1, 'апролллджє', '100')");


Название: Re: SQLite бд и Qt
Отправлено: Mikhail от Март 20, 2011, 20:25
Неоднократно упоминалось о том, что в коде программы не стоит использовать русский текст, как и любой другой кроме английского.

При исполнении программы можно ввести русский текст - значение поля, и сформировать запрос к БД.
Тогда все получится правильно.


Название: Re: SQLite бд и Qt
Отправлено: Пантер от Март 21, 2011, 10:01
1. Не используй в коде кириллицу.
2. Почитай про prepare и bindValue.


Название: Re: SQLite бд и Qt
Отправлено: dima123 от Март 21, 2011, 14:03
решил проблему так:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
норм?


Название: Re: SQLite бд и Qt
Отправлено: Пантер от Март 21, 2011, 14:09
ИМХО, костыль.