Название: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: discribe от Апрель 16, 2010, 14:27 Доброго времени суток, дорогие товарищи. Я недавно начал осваивать работу с БД под QT и вот встала такая задачка создать отдельный класс для работы с БД (создать в нем методы под определенные запросы). Создал класс и унаследовал его от QSqlDataBase, но когда создаю экземпляр класса и пытаюсь создать соединение с БД выдается ошибка о несоответствии типов
вот пример кода как пытаюсь получить соединение workBaseDate *work_BD = QSqlDatabase::addDatabase("QPSQL"); класс workBaseDate унаследован QSqlDataBase Народ кто что знает помогите в этом разобраься Название: Re: Можнл ли унаследовать класс от QSqlDataBase? Отправлено: crossly от Апрель 16, 2010, 15:13 в чем смысл наследования.... для чего??
Название: Re: Можнл ли унаследовать класс от QSqlDataBase? Отправлено: discribe от Апрель 16, 2010, 15:58 Смысл в том что бы иметь отдельный класс (скажем так отделить класс от основной программы и расширить его функционал), который работает с БД а также дописать определенные методы работы с базой данных. Допустим создали объект данного унаследованного класса и вызываем метод в который передаем какието параметры и, данный метод записывает из в определенную таблицу БД которую мы имеем. В настоящее время создаю класс обертку, в который передаются параметры подключения и внудли создан класс QsqlDataBase и работа происходит через него, но в связи с тем что надо каждый раз в этом классе создавать методы такиеже как в QsqlDataBase это, считаю я, не правильно.
Кстати также возник вопрос по поводу записи и чтения массива в postgres. Вопрос в том как записать одномерный массив данных в postgres, предварительно не преобразуем его в строку вида {<значение>,<значение>,<значение>,..} - для записи, ну и конечно как преобразовать из БД полученный массив в массив с++ не создавая разбор по строке? Название: Re: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: crossly от Апрель 16, 2010, 17:52 в общем случае класс QSqlDatabase служит для контроля соединения с БД... о каком расширении функционала идет речь не совсем понятно....
Код: workBaseDate *work_BD = workBaseDate::addDatabase("QPSQL"); Название: Re: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: lit-uriy от Апрель 16, 2010, 19:43 Во-первых, метод QSqlDatabase::addDatabase, возвращает объект, а не указатель.
Во-вторых, если я не чего не путаю, то присваивать указателю на класс-наследника указатель на базовый класс нельзя. Т.е. запись типа: DerivedClass * object = new BaseClass(); Можно только наоборот BaseClass * object = new DerivedClass(); Название: Re: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: crossly от Апрель 16, 2010, 19:55 ничего не путаешь... :)
Название: Re: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: break от Апрель 16, 2010, 23:41 90% что можно обойтись агрегацией QSqlDatabase или даже просто созданием экхемпляра QSqlDatabase в нужных ф-ях вашего класса расширителя функционала.
И все таки интересно поконкретнее что за ф-ции хотите добавить? Название: Re: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: lit-uriy от Апрель 17, 2010, 08:06 к сожалению у QSqlDatabase не правильное имя. По хорошему он должен называться QSqlConnection. Тогда бы у людей и лишних соблазнов не было. Т.к. этот класс представляет лишь соединение с БД, а не БД в целом.
Название: Re: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: BaltikS от Апрель 17, 2010, 15:15 lit-uriy, верно....с тобой согласен на все 100%. Как будто это из Delphi пошло, там тоже для установки соединения используется TDatabase...
Название: Re: Можнo ли унаследовать класс от QSqlDataBase? Отправлено: discribe от Апрель 19, 2010, 08:22 Всем спасибо, тогда может подскажете как лучше сделать чтоб бы работу с БД в отдельный класс отнести? У меня только два варианта: 1) Создать класс в котором методы будут возвращать на основе определенных заданных параметров объект QSqlQuery и в основной программе выполнять этот запрос; 2) Как уже говорилось выше создать класс обертку в котором не возвращается объект запроса, а сразу записывается в БД. Возможно подскажете как отделить класс работы с БД от основной программы (допустим для того что бы в другой программе выполнять работу с этой же БД при минимальной переписи кода, просто переносом класса)?
|