Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

Подключение к Oracle 10g в библиотеке   Найти похожие ветки 

 
tytus ©   (2007-01-23 16:14) [0]

Доброго дня мастера. В главной программе вызываю длл-ку, в которой при создании формы подключаюсь к ораклу
OracleSession1.LogOn; Форма модальная. В обработчике OnClose
делаю OracleSession1.logOf;
При повторном вызове библиотеки появляется ошибка:
<EOracle Error with message "".>
Вот текст основной программы:
procedure TMainFm.ReportSelectExecute(Sender: TObject);
var
 LibHandle:THandle;
 ShowRepParamsFm:TShowRepParamsFm;
begin
LibHandle:=LoadLibrary("TGCompRpt.dll");
if LibHandle=0 then
begin
 Raise Exception.Create("Could not load TGCompRpt.dll");
 Exit;
end;
@ShowRepParamsFm:=GetProcAddress(LibHandle,"ShowRepParamsFm");
if not(@ShowRepParamsFm=nil) then
begin
 ShowRepParamsFm(Handle);
end;
FreeLibrary(LibHandle);
end;
Если вместо FreeLibrary делать LibHandle:=0, то все нормально, но сие неправильно имхо...
Как сделать толково?


 
Desdechado ©   (2007-01-23 16:41) [1]

try-finally неплохо бы вставить
и протрассировать работу DLL


 
tytus ©   (2007-01-23 17:26) [2]

>Desdechado ©   (23.01.07 16:41) [1]
procedure TRepParamsFm.FormCreate(Sender: TObject);
var
 ST:_SYSTEMTIME;
 DT:TDateTime;
 SqlStmt:string;
 LCount:integer;
begin
try
OS1.LogOn;//<--сюда ругается...
except
 MessageBox(Handle,PChar(OS1.ErrorMessage(OS1.ReturnCode)),
   "Ошибка подключения",MB_OK+MB_SYSTEMMODAL);
 ModalResult:=mrOK;  
end;
SB1.Panels[0].Text:=OS1.LogonUsername;
SB1.Panels[1].Text:=OS1.LogonDatabase;

В главной проге трай-файнали не помогает... и не помогало, потому и убрал за ненадобностью.


 
Desdechado ©   (2007-01-23 17:41) [3]

1. Не вижу описания типов.
2. Не понятно, откуда взят приведенный код.
3. Почему бы подключение ни сделать ДО создания формы. И при удаче создавать форму, а принеудаче - потстреливаться назад.

> В главной проге трай-файнали не помогает.
Не помогает от чего? Он нужен, чтобы выгрузка библиотеки происходяла в любом случае, а не в случае успешного вызова функции.


 
tytus ©   (2007-01-23 17:53) [4]

>Desdechado ©   (23.01.07 17:41) [3]
текст ДЛЛ
юзесы, типы... и т.д.

procedure ShowRepParamsFm(AHandle:THandle);

{var
 RepParamsFm: TRepParamsFm;}

implementation

{$R *.dfm}

procedure ShowRepParamsFm(AHandle:THandle);
var
 RepParamsFm: TRepParamsFm;
begin
Application.Handle:=AHandle;
RepParamsFm:=TRepParamsFm.Create(Application);
RepParamsFm.ShowModal;
end;

Далее текст OnCreate из [2]

Основная прога

type
 TShowrepParamsFm=procedure(AHandle:THandle);

Далее идет описание из вопроса.

>Не помогает от чего? Он нужен, чтобы выгрузка библиотеки происходяла в любом случае, а не в случае успешного вызова функции.

да понятно это, непонятно почему ПЕРВЫЙ раз коннектится, а ПОСЛЕДУЮЩИЕ разы - ошибка! И почему LibHndle:=0 устраняяет ошибку, и какие последствия будут (память не вернется системе, что-ли, а если приложение закрыть, то память вернется?)


 
Desdechado ©   (2007-01-23 19:10) [5]

procedure ShowRepParamsFm(AHandle:THandle);
var
RepParamsFm: TRepParamsFm;
begin
Application.Handle:=AHandle;
RepParamsFm:=TRepParamsFm.Create(Application);
RepParamsFm.ShowModal;
end;

Тут утечка памяти, бесхозное соединение с Ораклом после закрытия формы и непонятное поведение Application.Handle (т.к. не восстановлено в оригинальное значение)

> юзесы, типы... и т.д.
И где описано OS1

> почему LibHndle:=0 устраняяет ошибку
Не устраняет, а маскирует и отодвигает "на потом".


 
tytus ©   (2007-01-24 09:16) [6]

>Desdechado ©   (23.01.07 19:10) [5]
procedure ShowRepParamsFm(AHandle:THandle);
var
 RepParamsFm: TRepParamsFm;
begin
Application.Handle:=AHandle;
RepParamsFm:=TRepParamsFm.Create(Application);
try
 RepParamsFm.ShowModal;
finally
 RepParamsFm.OS1.LogOff;
 FreeAndNil(RepParamsFm);
end;
OS1- TOracleSession;
С этим вариантом тоже не проходит.
Может вся фигня в том, что на моей тачке XP SP2, а сам Оракл работает под управлением 2000?!



Страницы: 1 вся ветка

Текущий архив: 2007.04.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
15-1174537847
MBo
2007-03-22 07:30
2007.04.15
Художника каждый обидеть может...


1-1171985703
webpauk
2007-02-20 18:35
2007.04.15
Уничтожение компонента изнутри


2-1174605776
dreamse
2007-03-23 02:22
2007.04.15
Преобразовать руские буквы для поиска в google


2-1174620688
delphim
2007-03-23 06:31
2007.04.15
разделитель целой и дробной частей


4-1164036114
Никита
2006-11-20 18:21
2007.04.15
Low Level Disk IO