crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Работа с sql из различных классов.
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 24.11.2008, 15:22
  сообщение
Цитата(Litkevich Yuriy @ 24.11.2008, 15:43) *
Driver not loaded driver not loaded
это только, когда с драйвером проблемы.

для SQLite ненужно указывать узел (setHostName)
Если ты работаешь только с одной БД в своей программе, создай соединение по умолчанию:
{
...
QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE");
db1.setDatabaseName("fdspp.db");
...
}

это ты должен создать, где-то в начале работы с программой, а затем использовать это соединение по умолчанию:
{
...
QSqlDatabase db2 = QSqlDatabase::database();
...
}


Из асистента (к сожалению еще нет на сайте):
Цитата
Подробное описание
Класс QSqlDatabase предоставляет подключение к базе данных.
Класс QSqlDatabase предоставляет абстрактный интерфейс для доступа к базе данных. Он использует конкретный QSqlDriver базы данных для доступа и манипуляции данными.
В следующем коде показано как установить соединение:
     QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
     db.setHostName("acidalia");
     db.setDatabaseName("customdb");
     db.setUserName("mojito");
     db.setPassword("J0a1m8");
     bool ok = db.open();

После создания объекта QSqlDatabase, устанавливаем параметры соединения с помощью setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort(), и setConnectOptions(). Только после установки параметров вызывается open() для открытия соединения.
Соединение определеное выше — безымянное соединение. Это соединение по умолчанию и доступ к нему может быть получен позже используя database():
     QSqlDatabase db = QSqlDatabase::database();

Чтобы сделать програмирование более удобным, QSqlDatabase реализован как класс-значение (англ. "value class"). Любые изменения сделаные в соединении с базой данных через один объект QSqlDatabase будут влиять на другие объекты QSqlDatabase представляющие это же соединение. Вызовите cloneDatabase(), если вы хотите создать независимое соединение с базой данных на основе существующего.
Если вы нуждаетесь во множестве соединений с базами данных одновременно, определите произвольное имя в addDatabase() и database(). Вызовите removeDatabase(), чтобы удалить соединение. QSqlDatabase выведет предупреждение, если вы попытаетесь удалить соединение, указанное в других объектах QSqlDatabase. Используйте contains(), чтобы видеть если заданное имя соединения есть в списке соединений.
Как только соединение установлено вы можете посмотреть, какие таблицы база данных предоставляет с помощью tables(), найти первичный индекс для таблицы с помощью primaryIndex(), получить мета-информацию о полях таблицы (например, их имена) с помощью record() и выполнить запрос с помощью exec().
Если транзакции поддерживаются, вы можете использовать transaction(),чтобы начать транзакцию, и затем commit() или rollback(), чтобы завершить ее. Вы можете узнать поддерживается ли транзакция используя QSqlDriver::hasFeature(). При использовании транзакции вы должны начать транзакцию, прежде чем создадите свой запрос.
Если произошла ошибка, она может быть получена с помощью lastError().
Имена SQL драйверов доступны из drivers(), вы можете проверить доступность драйвера с помощью isDriverAvailable(). Если вы создали свой собственный драйвер, вы можете зарегистрировать его с помощью registerSqlDriver().
Смотрите также QSqlDriver, QSqlQuery, Модуль QtSql и Потоки и Модуль QtSql.
molchanoviv Дата 24.11.2008, 13:41
  Не то. Ибо если я изменю функцию createDatabase так
void Database::createDatabase()
{
    database = QSqlDatabase::addDatabase("QSQLITE");
    database.setHostName("localhost");
    database.setDatabaseName("fdspp.db");
}

и вызову ее в одном из классов, то тогда работает.
Litkevich Yuriy Дата 24.11.2008, 12:43
 
Цитата(molchanoviv @ 24.11.2008, 14:46) *
Driver not loaded driver not loaded
плагина нет.
molchanoviv Дата 24.11.2008, 11:46
  собсно вопрос про SQLite был к чему:

Необходимо работать с одной SQL базой из двух классов, не пойму как это реализовать. Хотел сделать так:
void Database::createDatabase(QString connectionName)
{
    database = QSqlDatabase::addDatabase("QSQLITE", connectionName);
    database.setHostName("localhost");
    database.setDatabaseName("fdspp.db");
}


и вызывать эту функцию в конструкторах этих классов. но получаю при выполнении вот что
Driver not loaded driver not loaded

Может я по рассеяности опять что пропустил?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 17.10.2021, 21:41