создание соединения, отличного от GetDefaultConnection()
Что имеем: 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, но что-то конкретное не могу придумать. Может кто-то сталкивался с аналогичной проблемой?
и в чем проблема?
я не знаю как избежать автоматического создания объекта класса CDatabase и передать конструктору указатель на мною созданный объект CDatabase
CDBSampleSet * dbset = new CDBSampleSet(db);
Цитата: arrjj
CDatabase * db = new CDatabase();
CDBSampleSet * dbset = new CDBSampleSet(db);
CDBSampleSet * dbset = new CDBSampleSet(db);
ну а смысл тогда визардом создавать класс? так руками все можно прописать. в моем случае объекты всех классов создаются при запуске приложения. тогда уж надо удалить переменную m_DBSampleSet из объявления класса CDBSampleDoc, чтоб она не создавалась вообще, а после создания объекта приложения уже руками выполнять все задуманное.
В общем отчаялся я переделать умолчальную структуру визарда - создал проект без поддержки БД, добавил в него два класса - наследников CDatabase и CRecordset, и в них уже реализовал все, что мне было нужно:)