Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

создание соединения, отличного от GetDefaultConnection()

18K
10 мая 2012 года
yura2201
9 / / 26.09.2006
Добрый вечер!
Что имеем: VS2010, MFC приложение "DBSample" с одним окном, в визарде указываю ODBC-источник - БД MSSQL с авторизацией средствами SQL сервера. При этом умолчальный конструктор класса, отвечающего за связь с БД имеет вид:

CDBSampleSet::CDBSampleSet(CDatabase* pdb = NULL)
: CRecordset(pdb)
{
m_SpecID = 0;
m_Title = L"";
m_nFields = 2;
m_nDefaultType = dynaset;
}
И в классе CDBSampleDoc имеем переменную m_DBSampleSet; Читаю у Хортона: "Если конструктору не передается никакой указатель, как в случае с m_DBSampleSet, то каркас автоматически создает для вас объект CDatabase и вызывает функцию CDBSampleSet::GetDefaultConnect().. ". У меня задумка была не вызывать ее, а самостоятельно создать объект класса CDatabase и пробовать открыть соединение методом OpenEx() с ключом noOdbcDialog для вывода собственного диалога авторизации. Т.о., как я понял, к моменту вызова конструктора класса CDBSampleSet у меня уже должен быть готовый объект CDatabase, где я и буду это реализовывать. НО! Изначально объект m_DBSampleSet создается при создании объекта документа в CDBSampleAppInitInstance(), и как мне передавать указатель на объект класса CDatabase в конструктор CDBSampleSet я что-то совсем не могу понять:(( Мысли ходят где-то вокруг того, что надо создать еще один конструктор класса CDBSampleDoc, но что-то конкретное не могу придумать. Может кто-то сталкивался с аналогичной проблемой?
277
10 мая 2012 года
arrjj
1.7K / / 26.01.2011
и в чем проблема?
18K
10 мая 2012 года
yura2201
9 / / 26.09.2006
я не знаю как избежать автоматического создания объекта класса CDatabase и передать конструктору указатель на мною созданный объект CDatabase
277
10 мая 2012 года
arrjj
1.7K / / 26.01.2011
CDatabase * db = new CDatabase();
CDBSampleSet * dbset = new CDBSampleSet(db);
18K
10 мая 2012 года
yura2201
9 / / 26.09.2006
Цитата: arrjj
CDatabase * db = new CDatabase();
CDBSampleSet * dbset = new CDBSampleSet(db);


ну а смысл тогда визардом создавать класс? так руками все можно прописать. в моем случае объекты всех классов создаются при запуске приложения. тогда уж надо удалить переменную m_DBSampleSet из объявления класса CDBSampleDoc, чтоб она не создавалась вообще, а после создания объекта приложения уже руками выполнять все задуманное.

18K
10 мая 2012 года
yura2201
9 / / 26.09.2006
В общем отчаялся я переделать умолчальную структуру визарда - создал проект без поддержки БД, добавил в него два класса - наследников CDatabase и CRecordset, и в них уже реализовал все, что мне было нужно:)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог