C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа с БД через ADO, помогите начать
Smile
Отправлено: 07.12.2009, 17:43


Ученик-кочегар

Группа: Участник
Сообщений: 13



Доброго времени суток!
Имеется класс написанный на VC++, хочу перевести его на Builder. Помогите, пожалуйста, это сделать. В VC++ использовал ADODB, подключив библиотеку так
CODE

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EoF")

В Builder такое не прошло. Пришлось импортировать библиотеку через Project->Import Type Library, который создал Unit библиотеки Microsoft ActiveX Data Object 2.8 Library и подключил его к моему проекту.
Написал три строки:
CODE

_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open(L"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=baza;Data Source=server", L"", L"", (adConnectUnspecified));

Прошелся пошагово с заходом в функции. На второй строке попадаю в хедер utilcls.h:
CODE

// Create instance of interface via 'CoCreateInstance' with specified CLSID
//
template <class T, const IID* piid>
HRESULT TComInterface<T, piid>::CreateInstance(const CLSID& clsid, IUnknown* pOuter, DWORD dwClsContext)
{
 Reset();  // Free any interface pointers
 IUnknownPtr punk;
 HRESULT hr = ::CoCreateInstance(clsid, pOuter, dwClsContext, IID_IUnknown, reinterpret_cast<LPVOID*>(&punk));
 if (SUCCEEDED(hr))
 {
   hr = ::OleRun(punk);
   if (SUCCEEDED(hr))
     hr = punk->QueryInterface(GetIID(), reinterpret_cast<LPVOID*>(&intf));
 }
 return hr;
}

Функция CoCreateInstance не выполняеться успешно. И OleRun не выполняется.
И на третьей строке вылетает. Да, предварительно делал CoInitialize. А на VC++ это идет на ура.
Подскажите, кто знает, как работать с БД из Builder'а через ADO, но без VCL. Дайте ссылку на примерчик или направте куда рыть. Спасибо.

Вернуться в Работа с базами данных в C++Builder