Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Базы данных  (Прочитано 7166 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« : 20-05-2010 12:55 » 

День добрый. Подскажите, кто что использует для работы с различными БД в VC++?
Интересуют локальные бд (Access, dbf) и серверные MS SQL и Oracle.
Используете ли Вы сторонние бесплатные библиотеки высокого уровня, или пользуетесь API + свои оболочки? Работа с БД на уровне DML
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-05-2010 13:01 » 

Для работы с перечисленными БД вполне достаточно ADO. Конечно, ADO не покрывает всех возможностей конкретных СУБД.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
denes
Гость
« Ответ #2 : 03-06-2010 19:28 » 

а где их взять базы ?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 03-06-2010 19:35 » 

denes, Как понять, где взять? Можно поточнее?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
kisilevski
Постоялец

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 06-06-2010 06:29 » 

Использую ATL OLEDB для доступа к MSSQL из MSVS:

Код:
Работает везде, не надо таскать лишнего ничего. 

CString sQ;
CCommand<CDynamicAccessor> Cmnd;
HRESULT hr = S_OK;

sQ.Format("SELECT ID_Point FROM Points WHERE ID_Parent=(SELECT ID_Parent FROM Points WHERE ID_Point=%d) AND Point_Type=%d", Trg_ID, Trg_TY);
hr = Cmnd.Open(m_Sssn, sQ); if(hr == S_OK) hr = Cmnd.MoveFirst();
if(hr == S_OK) Trg_ID = *(long*)Cmnd.GetValue("ID_Point"); Cmnd.Close(); Cmnd.ClearRecordMemory();

И всё!!!

А можно так:

sQ.Format("INSERT INTO Points (ID_Parent, Point_Type, PointName) "
"VALUES (SELECT ID_Parent FROM Points WHERE ID_Point=%d, %d, 'Параметры')", Trg_ID, Trg_TY);
hr = Cmnd.Open(m_Sssn, sQ); Cmnd.Close(); Cmnd.ClearRecordMemory();


Только надо соединиться перед этим:

CDataSource m_Conn;
CSession m_Sssn;

CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, Srv);
dbinit.AddProperty(DBPROP_INIT_CATALOG, Dbn);
dbinit.AddProperty(DBPROP_AUTH_USERID, Uid);
dbinit.AddProperty(DBPROP_AUTH_PASSWORD, Pwd);
dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)DBPROMPT_NOPROMPT);

dbinit.AddProperty(DBPROP_IRowsetChange, true);
dbinit.AddProperty(DBPROP_IRowsetUpdate, true);
dbinit.AddProperty(DBPROP_UPDATABILITY,
DBPROPVAL_UP_CHANGE |
DBPROPVAL_UP_INSERT |
DBPROPVAL_UP_DELETE);

hr = m_Conn.Open(_T("SQLOLEDB"), &dbinit);
if(!FAILED(hr))
hr = m_Sssn.Open(m_Conn);

......................... // Что-то делаешь
......................... // Что-то делаешь
......................... // Что-то делаешь

if(m_Sssn.m_spOpenRowset != NULL) m_Sssn.Close();
if(m_Conn.m_spInit != NULL) m_Conn.Close();

Делаешь свой класс, в котором держишь M_Con и иже с ним, и обращаешься к нему по мере надобности из любого места программы.
Работает с любыми типами запросовинсертящими, upдатящими ит.д.
Записан

Ложки нет. See MSDN for details.
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #5 : 20-06-2010 21:25 » 

Можно использовать ODBC, в MSDN целый раздел на эту тему
Записан

С уважением Lapulya
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines