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

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

09.12.2009, 17:32. Показов 4332. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru