![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование подключения к базе в dll -ке [D6]
r9000 © (2007-01-04 14:52:00)Добрый день!
У меня возник такой вопрос. В форме приложения, которая вызывает dll есть компонент TDatabase. В dll в форме, включенной в нее, есть компонент TQuery. Необходимо подключить TQuery в dll к TDatabase в форме вызывающего приложения.
Вызывающее выражение:
procedure TForm1.Button1Click(Sender: TObject);
begin
Database1.Connected:=false;
Database1.Connected:=true;
export1(Database1.DatabaseName);
end;
в dll:
library Project6;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,comobj,OleServer, Excel2000,
Unit7 in 'Unit7.pas' {Form1};
function export1(s1:string): string; stdcall;
var
begin
Form1 := TForm1.Create(Application);
Form1.Query1.DatabaseName:=s1;
Form1.Query1.Active:=false;
Form1.Query1.SQL.Clear;
Form1.Query1.SQL.Add('select * from Applications');
Form1.Query1.Active:=true;
end;
exports export1;
{$R *.res}
begin
end.
В Sybase этот код работает, все нормально я проверял.
В Oracle этот же код не работает, ругается что не может
подключиться.
Что здесь может быть и как правильно подключиться?
evvcom (2007-01-09 09:26:00) [1]> [5] r9000 (05.01.07 12:44)
> function export1(s1:TQuery): string; stdcall;
:))))
Если передаешь TQuery, то использовать эту dll кроме как в своем приложении все равно не сможешь. Нафига тогда stdcall? А... ну да... посоветовали ж :)
И на огромный коммент при создании dll ты забил, и наверняка "build with runtime packages" не знаешь, что такое.
Мой тебе совет. Не нужна тебе dll, не понимаешь ты, как с ней работать. Много раз еще граблями в лоб получишь.
r9000 (2007-01-05 12:44:00) [2]Спасибо, мне подсказали что надо передавать в функции dll TQuery, подключенный в вызывающем приложении к базе и далее этот TQuery
использовать в dll
function export1(s1:TQuery): string; stdcall;
Desdechado (2007-01-05 11:10:00) [3]Заказчик определяет, какие компоненты использовать для подключения?
А он не заказывает использование циклов WHILE вместо FOR ?
r9000 (2007-01-05 06:13:00) [4]С Oracle подобное подключение если его сделать в основном приложении
работает. Tdatabase подключается и BDE работает.
Да это понятно, что правильнее подключаться к компоненту Tdatabase,
который был бы расположен в DLL.
Но заказчику взбрело в голову, чтобы подключение осуществлялось так
как я пробовал выше.
Desdechado (2007-01-04 16:09:00) [5]имхо, правильнее клонировать подключение к БД в DLL
Ученик чародея (2007-01-04 15:45:00) [6]Работает ли с Oracle подобное подключение если его сделать в основном приложении?
Почему не задан DriverName в Tdatabase?
Поддерживает ли данный BDE тот Oracle с которым ты работаешь?