Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> БД. Возможно ли динамическое подключение? 
:(
    Опции темы
PostEr
Дата 16.8.2003, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 30.6.2003
Где: Самара

Репутация: 1
Всего: 1



Сабж.
Во всей лит-ре, которая у меня есть написано , что чтобы подключить БД, необходимо создать проект и т.д. А можно ли подключать их динамически?


--------------------

------------------------------------------------------------------

[email protected]
До востребования

PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 16.8.2003, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Если програмить в MFC -- есть выбор между DAO, ODBC и OLE DB.
Первый представлен классами типа CDaoRecordset, CDaoQueryDef и т.д.
Второй -- CDatabase, CRecordset, CRecordView и CFieldExchange.
Третий -- завязан на OLE/COM, см. MSDN smile.gif


--------------------
user posted image
PM MAIL WWW   Вверх
Medved
Дата 16.8.2003, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Если в Builder-e, то тоже без проблем. Просто динамически создаете экземпляр необходиого класса (в зависимости от технологии доступа к БД - ADO, BDE, dbExpress и т.д), настраиваете соединение, создаете динамически датасет и вперед.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
DENNN
Дата 18.8.2003, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Статически созданный проект удобней лишь тем, что в коде у тебя уже созданы и проинициализированны структуры данных для хранения получаемой информации из таблиц.
Если ты подключаешься к неизвестной таблице, то необходимо выяснить ее структуру, типы хранимых данных, выделить из динамической памяти место для чтения каждой записи, разобрать этот кусок памяти по записям.....
Конечно есть способы проще, но обще представление я думаю ты получил smile.gif
PM ICQ   Вверх
PostEr
Дата 22.8.2003, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 30.6.2003
Где: Самара

Репутация: 1
Всего: 1



DENNN мдя... smile.gif Ну а есть примеры какие-нибудь? Просто мне нужно, чтобы проект ни от чего не зависил smile.gif То есть, чтобы я указал типа путь к db, а он мне оттуда всё вытащил необходимое, преобразовал.... и тд


--------------------

------------------------------------------------------------------

[email protected]
До востребования

PM MAIL WWW ICQ   Вверх
DENNN
Дата 22.8.2003, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Определись какую технологию использовать: ODBC, OLE DB, ADO и т.д. Потом долго-долго надо читатаь документацию, чтоб понять, как запросить источник данных, как сделать Enum всех БД, то же для таблиц ну и, естественно, как узнать список полей и их типы. ТОлько зачем заниматься таким универсализмом, если проект обычно пишется под конкретную БД?
PM ICQ   Вверх
PostEr
Дата 22.8.2003, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 30.6.2003
Где: Самара

Репутация: 1
Всего: 1



Ну эти БД smile.gif)) Лучше запрячь кого-нить smile.gif


--------------------

------------------------------------------------------------------

[email protected]
До востребования

PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 22.8.2003, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



PostEr, я не большой спец в БД, но с пом. ATL можно написать прогу с динамическим подключением к любой БД поддерживаемой ADO. Как пример, могу дать код, написанный одним челом (ActiveX компонент для определения широты и долготы по ZIP-коду города):
Код
////////////////////////////////
// куски кода из компонента

STDMETHODIMP CZipTool::Connect(BSTR dbFilePath, BSTR dbUserName, BSTR dbPassword, SHORT* success)
{
    _bstr_t strConn("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = ");
    strConn += _bstr_t(dbFilePath, true) +
                         "; User ID=" + _bstr_t(dbUserName, true) +
                         "; Password=" + _bstr_t(dbPassword, true) +";";

...
}

// get nearest zip codes to spesified...
STDMETHODIMP CZipTool::GetNearest(VARIANT zip, LONG radius, SHORT* success)
{
// ...
    _RecordsetPtr rcTemp = NULL;
    double lat, longt, latRange, longtRange = 0;
    double lowLat, hiLat, lowLongt, hiLongt = 0;
    double rad = (double)radius;
    _bstr_t strReq = "SELECT * FROM tblZip WHERE zip='" + _bstr_t(zip) + "'";
    try
    {
         this->Clear();
         _variant_t cnn((IDispatch*)this->_cnn , true);
         rcTemp.CreateInstance(__uuidof(Recordset));
         rcTemp->CursorLocation = adUseClient;

         // получаем значение долготы и широты для нужного кода...
         rcTemp->Open(_variant_t(strReq), cnn, adOpenDynamic, adLockBatchOptimistic,0);
         if(rcTemp->RecordCount == 0)
         {
                   rcTemp->Close();
                   rcTemp.Release();
                   // ...
         }

         rcTemp->MoveFirst();
         lat = rcTemp->Fields->Item["latitude"]->Value;
         longt = rcTemp->Fields->Item["longitude"]->Value;
         rcTemp->Close();
         rcTemp.Release();
// ....... и т.д.
}

////////////////////////
// тестовая прога

int _tmain(int argc, _TCHAR* argv[])
{
// ...
    IZipToolPtr tool = NULL;
    tool.CreateInstance(__uuidof(CZipTool));
    long rc, st = 0;
    double db;
    tool->Connect("D:\\users.mdb","","");
    tool->GetNearest(35004, 24);
}


Не знаю точно, можно ли ч/з ADO работать с другими БД кроме Access, но по логике, вроде можно.




--------------------
user posted image
PM MAIL WWW   Вверх
DENNN
Дата 24.8.2003, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
с пом. ATL можно написать прогу с динамическим подключением к любой БД поддерживаемой ADO

В сущности ATL использовать не обязательно, просто в нем удобно работать с COM-объектами, но те же функции можно вызвать и из MFC или любой другой библиотеки (главное получить доступ к ADO).
Цитата
Не знаю точно, можно ли ч/з ADO работать с другими БД кроме Access, но по логике, вроде можно.

Можно, ADO - это просто механизм доступа к БД.
PM ICQ   Вверх
Nastya
Дата 24.8.2003, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Может кто посоветует хорошую литературку по поводу БД + МС++(MFC) или ссылочки.


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
GanZaleZ
Дата 27.8.2003, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 15.7.2003

Репутация: нет
Всего: нет



ПРивет всем !
Помоему DAO работает только с Access , а через ODBС драйвер можно связатся с любой БД , да впринципе через АПИ самой БД можно к ней подабратся , да кста , Чтобы работать через ODBC ужно найти гдето драйвер для БД с которой вы собираетесь работать , потому что в WIN есть но не для всех,
как допустим к InterBase я не нашол пришлось качать !
smile.gif
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1217 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.