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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: SQLite  (Прочитано 5489 раз)
17dufa
Гость
« : Июль 04, 2007, 08:46 »

Здраствуйте,
у меня 2 вопроса:
я чего-то не понимаю: есть драйвер SQLite для взаимодействия через QSQL, а есть еще исходники SQLite, поставляемые вместе с Qt (alter.c,analyze.c...), у меня на руках проект, в котором эти самые исходники напрямую в проект включены, это нормально?(это первый вопрос)
Хотя при этом и драйвер QSQLiteDriver используется, то есть местами одно, местами другое.
Второй вопрос: при попытке использования QSQLiteDriver'а напрямую:
Код:

QSQLiteDriver *drv=new QSQLiteDriver(sqDb);
agents_Db=agents_Db.addDatabase(drv);

линкер вываливает сообщения о неопределенных символах, в частности: QSQLiteDriver::staticMetaObject и еще 3 функции из этого класса.
я вместо тех двух строк написал одну:
Код:

agents_Db=agents_Db.addDatabase("QSQLITE");

эти решения вроде аналогичны?(это второй вопрос)
хотя все равно не понятно, почему не работает первый метод, тролли пишут, что так можно.
Записан
Steven_Orko
Гость
« Ответ #1 : Июль 04, 2007, 09:17 »

Цитата: "17dufa"
Здраствуйте,
у меня 2 вопроса:
я чего-то не понимаю: есть драйвер SQLite для взаимодействия через QSQL, а есть еще исходники SQLite, поставляемые вместе с Qt (alter.c,analyze.c...), у меня на руках проект, в котором эти самые исходники напрямую в проект включены, это нормально?(это первый вопрос)

Сама библиотека имеет возможность использования СУБД SQLite двумя способами: первый - это те исходники, которые поставляются с framework (используется по-умолчанию), а второй - это если ты при сборке framework укажешь, что хочешь использовать ту версию СУБД SQLite, которая стоит в системе. В последнем случае также придется указать все необходимые пути, чтобы Qt собралась.
Цитата: "17dufa"

Хотя при этом и драйвер QSQLiteDriver используется, то есть местами одно, местами другое.

Это вообще непонятно, как...
Ты встроил в свой проект исходники СУБД??? Зачем???

Цитата: "17dufa"

Второй вопрос: при попытке использования QSQLiteDriver'а напрямую:
Код:

QSQLiteDriver *drv=new QSQLiteDriver(sqDb);
agents_Db=agents_Db.addDatabase(drv);

линкер вываливает сообщения о неопределенных символах, в частности: QSQLiteDriver::staticMetaObject и еще 3 функции из этого класса.

Ты его сам написал? Не забыл пройтись по файлу исходника moc???

Цитата: "17dufa"

я вместо тех двух строк написал одну:
Код:

agents_Db=agents_Db.addDatabase("QSQLITE");

эти решения вроде аналогичны?(это второй вопрос)

Почти...
Цитата: "17dufa"

хотя все равно не понятно, почему не работает первый метод, тролли пишут, что так можно.

Читаем Assistant в разделе про QSqlDatabase:

Цитировать

The QSqlDatabase class represents a connection to a database.
The QSqlDatabase class provides an abstract interface for accessing database backends. It relies on database-specific QSqlDrivers to actually access and manipulate data.
The following code shows how to initialize a connection:
Код:
     QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
     db.setHostName("acidalia");
     db.setDatabaseName("customdb");
     db.setUserName("mojito");
     db.setPassword("J0a1m8");
     bool ok = db.open();

Once a QSqlDatabase object has been created you can set the connection parameters with setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort(), and setConnectOptions(). Once the parameters have been set up you can call open() to open the connection.


Цитировать

Код:

sqlite *pCon = ...;
 QSQLiteDriver *drv =  new QSQLiteDriver(pCon);
 QSqlDatabase db = QSqlDatabase::addDatabase(drv); // becomes the new default connection
 QSqlQuery query;
 query.exec("SELECT NAME, ID FROM STAFF");
 ...



Таким образом, получаем. Улыбающийся
1. То, что исходники СУБД встроены в проект - скорее неправильно, чем наоборот. Хотя можно придумать "за" такой подход.
2. Первый и второй способ почти аналогичны.
Записан
17dufa
Гость
« Ответ #2 : Июль 04, 2007, 09:24 »

за версию Qt извиняюсь - 4.2.2 + VS2005
А то что исходники встроены в проект, я наверно догадался зачем:
изначально проект писался не на Qt и соответсвенно SQLite использовался через исходники, затем появилась Qt и стали пользоваться QSQLiteDriver. Блин... а мне теперь во всем этом разбираться Грустный
Если подходы аналогичны - почему появляются ошибки?
кстати довольно интересный этот подход и использованием QSQLiteDriver, согласно троллям надо делать #include "qtdir/src/sql/drivers/psql/qsql_psql.cpp" (пример для pl/sql) что несколько странно выглядит и глаз режет
Записан
Steven_Orko
Гость
« Ответ #3 : Июль 04, 2007, 09:30 »

Цитата: "17dufa"

а насчет QSQLDriver Вы не правы,

Извиняюсь, я поправился ))))
Во втором вопросе я дописал необходимые изменения )))
Цитата: "17dufa"

А то что исходники встроены в проект, я наверно догадался зачем:
изначально проект писался не на Qt и соответсвенно SQLite использовался через исходники, затем появилась Qt и стали пользоваться QSQLiteDriver. Блин... а мне теперь во всем этом разбираться Грустный

Хм, да, разбираться после кого-то всегда трудная задача ))))
Если хочется использовать Qt & SQLite, то просто выкинь все исходники СУБД, а оставшиеся части перепиши на QSqlDatabase.
Цитата: "17dufa"

согласно троллям надо делать #include "qtdir/src/sql/drivers/psql/qsql_psql.cpp" (пример для pl/sql) что несколько странно выглядит и глаз режет

Что здесь странного? Просто для использования драйвера СУБД напрямую, надо в свой проект вставить часть с его описанием, т.е. сам текст кода описания. А так как его описание находится в не в заголовочном файле (из-за принципа написания плагинов), то и получается такая вставка.
Записан
17dufa
Гость
« Ответ #4 : Июль 04, 2007, 09:51 »

встраивание еще и moc* файла помогло победить ошибки линкера
Записан
Tonal
Гость
« Ответ #5 : Июль 06, 2007, 21:54 »

Вообще-то SQLite - это именно встраиваемый движок базы.
Он может встраиваться в виде dll-ки, в виде либки или можно исходники добавить. ;-)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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