Здраствуйте,
у меня 2 вопроса:
я чего-то не понимаю: есть драйвер SQLite для взаимодействия через QSQL, а есть еще исходники SQLite, поставляемые вместе с Qt (alter.c,analyze.c...), у меня на руках проект, в котором эти самые исходники напрямую в проект включены, это нормально?(это первый вопрос)
Сама библиотека имеет возможность использования СУБД SQLite двумя способами: первый - это те исходники, которые поставляются с framework (используется по-умолчанию), а второй - это если ты при сборке framework укажешь, что хочешь использовать ту версию СУБД SQLite, которая стоит в системе. В последнем случае также придется указать все необходимые пути, чтобы Qt собралась.
Хотя при этом и драйвер QSQLiteDriver используется, то есть местами одно, местами другое.
Это вообще непонятно, как...
Ты встроил в свой проект исходники СУБД??? Зачем???
Второй вопрос: при попытке использования QSQLiteDriver'а напрямую:
QSQLiteDriver *drv=new QSQLiteDriver(sqDb);
agents_Db=agents_Db.addDatabase(drv);
линкер вываливает сообщения о неопределенных символах, в частности: QSQLiteDriver::staticMetaObject и еще 3 функции из этого класса.
Ты его сам написал? Не забыл пройтись по файлу исходника moc???
я вместо тех двух строк написал одну:
agents_Db=agents_Db.addDatabase("QSQLITE");
эти решения вроде аналогичны?(это второй вопрос)
Почти...
хотя все равно не понятно, почему не работает первый метод, тролли пишут, что так можно.
Читаем 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. Первый и второй способ почти аналогичны.