Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 10

Работа с БД через ADO

09.12.2009, 17:32. Показов 4357. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Имеется класс написанный на VC++, хочу перевести его на Builder. Помогите, пожалуйста, это сделать. В VC++ использовал ADODB, подключив библиотеку так
C++
1
#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 и подключил его к моему проекту.
Написал три строки:
C++
1
2
3
_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:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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. Дайте ссылку на примерчик или направте куда рыть. Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2009, 17:32
Ответы с готовыми решениями:

Работа с базами Access через ADO
Всем привет!!! Хочу наваять програмку типа каталогизатора, соответственно чтоб она работала с базами данных. Кое-какой опыт в...

Работа с данными через ADO
Юзаю компоненты ADO. SQL запросом с помощью ADOQuery и DataSource, подгрузил в DBGrid. Изначально ещё подумал, что с графическим...

Работа в DBF через ADO
Правильно ли я понимаю то что написано в заголовке? Объясните как реализовать доступ к БД (редактирование, создание) когда имена БД...

7
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
09.12.2009, 17:54
Smile_Yo,
CoInitialize сделал?

Добавлено через 1 минуту
а вообще, работать с (любой) технологией от мелкомягких в борланде - то ещё веселье... (:
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.12.2009, 17:56
Smile_Yo, вообще дешевле заново написать, чем перевести
0
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 10
09.12.2009, 17:56  [ТС]
Конечно!!!
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma hdrstop
 
#pragma comment (lib,"comsupp.lib")
#pragma comment(lib, "comsuppwd.lib")
#pragma warning(disable:4192)
#pragma warning(disable:4049)
 
#include <comutil.h>
#include <mshtml.h>
//#include <atl/atlbase.h>
#include <oleacc.h>
 
#include "ADODB_TLB.h"
 
//---------------------------------------------------------------------------
using namespace Adodb_tlb;
 
#pragma argsused
int main(int argc, char* argv[])
{
::CoInitialize(NULL);
 
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Adodb_tlb::Connection));
m_pConnection->Open(L"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=baza;Data Source=server", L" ", L" ", Adodb_tlb::adConnectUnspecified);
 
::CoUninitialize ();
 
system("PAUSE");
 
    return 0;
}
//---------------------------------------------------------------------------
0
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 10
09.12.2009, 17:59  [ТС]
Lord_Voodoo, я согласен. Но подскажите как! У меня непроходит даже простой
C++
1
CreateInstance(__uuidof(Adodb_tlb::Connection));
Может у кого-нибудь есть маленький работающий примерчик на Builder работа с БД через ADO напрямую.
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
09.12.2009, 18:05
Smile_Yo,

У меня непроходит даже простой
CreateInstance(__uuidof(Adodb_tlb::Conne ction));

показывай hresult

Добавлено через 1 минуту
кстати, приведенный код некорректный.
даже если ошибок при обращении к ADO не будет, оно всё равно свалмтся при выходе.
почему? а подумай (:
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.12.2009, 18:06
Smile_Yo, Borland\CBuilder6\Examples\Ado\ - в билдере и так выложены примеры
0
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 10
09.12.2009, 18:20  [ТС]
Rififi, я в первом посте написал, что когда захожу в функцию CreateInstance по F7, попадаю в хедер utilcls.h, где функция ::CoCreateInstance не выполняется так как надо. И, соответсвенно, в HRESULT hr находиться мусор - большое отрицательное число. Такое впечатление, что я хедеры подключил, а само тело функции ::CoCreateInstance не находиться и в hr ничего не присваиваеться. Может я не подключил какую-то библиотеку... Я не работал в Builder так раньше никогда и не импортировал билиотеки типов, поэтому и прошу помощи. Раньше работал в VC++ и там использовал диррективу import - этого хватало.
кстати, приведенный код некорректный.
даже если ошибок при обращении к ADO не будет, оно всё равно свалмтся при выходе.
почему? а подумай (:
Это я уже понял. Поэтому и написал в форум, потому что не знаю как написать правильно. Куда свалиться и при каком выходе? Этот код я написал только чтобы проверить выполняется ли хоть функция ::CoCreateInstance. Эти же строки на VC++ работают.

Добавлено через 2 минуты
Lord_Voodoo, да, есть примеры, но они с использованием VCL-компонентов. С ними все просто и понятно. А мне нужно разобраться как работать напрямую с ADO.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2009, 18:20
Помогаю со студенческими работами здесь

Работа с базой через ADO из DLL
Пытаюсь законнектится к базе через ADO компоненты из Dll-ки. При попытке вызвать метод close для TAdoQuery возникает ошибка. Дальнейшие...

Работа с Paradox в Delphi через ADO.
Добрый день. Я пишу приложения баз данных на Delphi, в данном случае с использованием локального Paradox. Сейчас появилась необходимость...

Работа с базой данных Access через ADO.NET
Учусь работать с базой данных Access через ADO.NET. Попробовал поработать с помощью мастеров - не понравилось, очень много непонятного...

Что лучше: работа с Access через ADO.NET или силами самого Access?
Считаю, что лучше работать с регулярно поступающим в Access объемом данных, разработав приложение Windows Forms C# и управляя процессом...

Отличие доступа к данным через ODBC и через ADO
Объясните в чем отличие доступа к данным через ODBC и через ADO? И что проще?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru