Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с БД из DLL

315
29 февраля 2008 года
Nick_M
399 / / 29.05.2003
Мне необходимо все настройки соединения с базой данных спрятать от лишнего взгляда. Решил реализовать это все в DLL. Пишу в библиотеке функцию для экспорта, принимающую текст запроса и возвращающую результат. Использую ADO-компоненты. Не могу сообразить, каким образом возвращать в программу ADODataSet. Не подскажете ли чего-нибудь, а то я в ступор впал :( Может быть как-то по-другому решить вопрос скрытия настроек
11
29 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Nick_M
Мне необходимо все настройки соединения с базой данных спрятать от лишнего взгляда. Решил реализовать это все в DLL. Пишу в библиотеке функцию для экспорта, принимающую текст запроса и возвращающую результат. Использую ADO-компоненты. Не могу сообразить, каким образом возвращать в программу ADODataSet. Не подскажете ли чего-нибудь, а то я в ступор впал :( Может быть как-то по-другому решить вопрос скрытия настроек



типа того:

 
Код:
extern "C" void __export __stdcall MyFunc (AnsiString *SqlText, TADODataSet *DS)
{
  ADOQuery->SQL->Text = *SqlText;
  ADOQuery->ExecSQL();
  // что то делаешь с DS
}

в ехе-шнике
AnsiString SqlText = "SELECT....";
MyFunc (&SqlText, DataModule1->ADODataSet1);
315
29 февраля 2008 года
Nick_M
399 / / 29.05.2003
Цитата: oxotnik333
типа того:
 
Код:
extern "C" void __export __stdcall MyFunc (AnsiString *SqlText, TADODataSet *DS)
{
  ADOQuery->SQL->Text = *SqlText;
  ADOQuery->ExecSQL();
  // что то делаешь с DS
}

в ехе-шнике
AnsiString SqlText = "SELECT....";
MyFunc (&SqlText, DataModule1->ADODataSet1);



Не идет, пробовал. DS не видит записей из ADOQuery. Или: как скопировать записи из ADOQuery в DS?

11
29 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: Nick_M
Не идет, пробовал. DS не видит записей из ADOQuery. Или: как скопировать записи из ADOQuery в DS?



код то выложи... мож чего и прояснится

315
29 февраля 2008 года
Nick_M
399 / / 29.05.2003
Цитата: oxotnik333
код то выложи... мож чего и прояснится



Нашел способ при котором вроде работает:

Код:
dll.cpp
//---------------------------------------------
extern "C" bool __declspec(dllexport) getQuery(char *str, TADODataSet *qry);

bool __declspec(dllexport) getQuery(char *str, TADODataSet *qry)
{
TADOQuery *ADOQ = new TADOQuery(NULL);
ADOQ->ConnectionString = connectionString_test;
ADOQ->SQL->Add(str);
ADOQ->Open();
qry->Recordset = ADOQ->Recordset;
delete ADOQ;
return 0;
}
//---------------------------------------------

project.cpp
//---------------------------------------------
AnsiString connStr;
bool (__import *test)(char *str, TADODataSet *dataSet);

TADODataSet *dataSet = new TADODataSet(NULL);

libH = LoadLibrary("dll.dll");
if (!libH)
        {
        delete dataSet;
        return 1;
        }
test = (bool(__import *) (char *str, TADODataSet *dataSet)) GetProcAddress(libH, "_getQuery");
if (!test)
        {
        FreeLibrary(libH);
        ShowMessage("мимо");
        delete dataSet;
        return 2;
        }
connStr = "SELECT * FROM Users";
ShowMessage(BoolToStr(test(connStr.c_str(), dataSet)));
ShowMessage(dataSet->Fields->Fields[1]->AsString);

delete dataSet;
//---------------------------------------------

Сейчас полностью буду тестировать. Спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог