Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование подключения к базе в 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 с которым ты работаешь?


Наверх

Титульная страница Поиск, карта сайта Написать письмо