extern "C" void __export __stdcall MyFunc (AnsiString *SqlText, TADODataSet *DS)
{
ADOQuery->SQL->Text = *SqlText;
ADOQuery->ExecSQL();
// что то делаешь с DS
}
в ехе-шнике
AnsiString SqlText = "SELECT....";
MyFunc (&SqlText, DataModule1->ADODataSet1);
Работа с БД из DLL
Мне необходимо все настройки соединения с базой данных спрятать от лишнего взгляда. Решил реализовать это все в DLL. Пишу в библиотеке функцию для экспорта, принимающую текст запроса и возвращающую результат. Использую ADO-компоненты. Не могу сообразить, каким образом возвращать в программу ADODataSet. Не подскажете ли чего-нибудь, а то я в ступор впал :( Может быть как-то по-другому решить вопрос скрытия настроек
Цитата: Nick_M
Мне необходимо все настройки соединения с базой данных спрятать от лишнего взгляда. Решил реализовать это все в DLL. Пишу в библиотеке функцию для экспорта, принимающую текст запроса и возвращающую результат. Использую ADO-компоненты. Не могу сообразить, каким образом возвращать в программу ADODataSet. Не подскажете ли чего-нибудь, а то я в ступор впал :( Может быть как-то по-другому решить вопрос скрытия настроек
типа того:
Код:
Цитата: 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);
{
ADOQuery->SQL->Text = *SqlText;
ADOQuery->ExecSQL();
// что то делаешь с DS
}
в ехе-шнике
AnsiString SqlText = "SELECT....";
MyFunc (&SqlText, DataModule1->ADODataSet1);
Не идет, пробовал. DS не видит записей из ADOQuery. Или: как скопировать записи из ADOQuery в DS?
Цитата: Nick_M
Не идет, пробовал. DS не видит записей из ADOQuery. Или: как скопировать записи из ADOQuery в DS?
код то выложи... мож чего и прояснится
Цитата: 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;
//---------------------------------------------
//---------------------------------------------
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;
//---------------------------------------------
Сейчас полностью буду тестировать. Спасибо!