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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Можнo ли унаследовать класс от QSqlDataBase?  (Прочитано 5721 раз)
discribe
Гость
« : Апрель 16, 2010, 14:27 »

Доброго времени суток, дорогие товарищи. Я недавно начал осваивать работу с БД под QT и вот встала такая задачка создать отдельный класс для работы с БД (создать в нем методы под определенные запросы). Создал класс и унаследовал его от QSqlDataBase, но когда создаю экземпляр класса и пытаюсь создать соединение с БД выдается ошибка о несоответствии типов
вот пример кода как пытаюсь получить соединение    
workBaseDate *work_BD  = QSqlDatabase::addDatabase("QPSQL");
класс workBaseDate унаследован QSqlDataBase

Народ кто что знает помогите в этом разобраься
« Последнее редактирование: Апрель 16, 2010, 17:41 от discribe » Записан
crossly
Гость
« Ответ #1 : Апрель 16, 2010, 15:13 »

в чем смысл наследования.... для чего??
Записан
discribe
Гость
« Ответ #2 : Апрель 16, 2010, 15:58 »

Смысл в том что бы иметь отдельный класс (скажем так отделить класс от основной программы и расширить его функционал), который работает с БД а также дописать определенные методы работы с базой данных. Допустим создали объект данного унаследованного класса и вызываем метод в который передаем какието параметры и, данный метод записывает из в определенную таблицу БД которую мы имеем. В настоящее время создаю класс обертку, в который передаются параметры подключения и внудли создан класс QsqlDataBase и работа происходит через него, но в связи с тем что надо каждый раз в этом классе создавать методы такиеже как в QsqlDataBase это, считаю я, не правильно.

Кстати также возник вопрос по поводу записи  и чтения массива в postgres. Вопрос в том как записать одномерный массив данных в postgres, предварительно не преобразуем его в строку вида {<значение>,<значение>,<значение>,..}  - для записи, ну и конечно как преобразовать из БД полученный массив в массив с++ не создавая разбор по строке?
Записан
crossly
Гость
« Ответ #3 : Апрель 16, 2010, 17:52 »

в общем случае класс QSqlDatabase служит для контроля соединения с БД... о каком расширении функционала идет речь не совсем понятно....
Код:
workBaseDate *work_BD  = workBaseDate::addDatabase("QPSQL");
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Апрель 16, 2010, 19:43 »

Во-первых, метод QSqlDatabase::addDatabase, возвращает объект, а не указатель.
Во-вторых, если я не чего не путаю, то присваивать указателю на класс-наследника указатель на базовый класс нельзя. Т.е. запись типа:
DerivedClass * object = new BaseClass();
Можно только наоборот
BaseClass * object = new DerivedClass();
Записан

Юра.
crossly
Гость
« Ответ #5 : Апрель 16, 2010, 19:55 »

ничего не путаешь... Улыбающийся
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #6 : Апрель 16, 2010, 23:41 »

90% что можно обойтись агрегацией QSqlDatabase или даже просто созданием экхемпляра QSqlDatabase в нужных ф-ях вашего класса расширителя функционала.

И все таки интересно поконкретнее что за ф-ции хотите добавить?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Апрель 17, 2010, 08:06 »

к сожалению у QSqlDatabase не правильное имя. По хорошему он должен называться QSqlConnection. Тогда бы у людей и лишних соблазнов не было. Т.к. этот класс представляет лишь соединение с БД, а не БД в целом.
Записан

Юра.
BaltikS
Гость
« Ответ #8 : Апрель 17, 2010, 15:15 »

lit-uriy, верно....с тобой согласен на все 100%. Как будто это из Delphi пошло, там тоже для установки соединения используется TDatabase...
Записан
discribe
Гость
« Ответ #9 : Апрель 19, 2010, 08:22 »

Всем спасибо, тогда может подскажете как лучше сделать чтоб бы работу с БД в отдельный класс отнести? У меня только два варианта: 1) Создать класс в котором методы будут возвращать на основе определенных заданных параметров объект QSqlQuery и в основной программе выполнять этот запрос;   2) Как уже говорилось выше создать класс обертку в котором не возвращается объект запроса, а сразу записывается в БД. Возможно подскажете как отделить класс работы с БД от основной программы (допустим для того что бы в другой программе выполнять работу с этой же БД при минимальной переписи кода, просто переносом класса)?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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