Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

Подключение к 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.045 c
2-1174909971
tar
2007-03-26 15:52
2007.04.15
Управление клавиатурой


15-1171798199
ElectriC
2007-02-18 14:29
2007.04.15
Распространение программы


15-1174605082
Макс Черных
2007-03-23 02:11
2007.04.15
Забавный баян про поэтов :)


2-1174715103
Laymer
2007-03-24 08:45
2007.04.15
FastReport и данные из БД


15-1174397332
Jeer
2007-03-20 16:28
2007.04.15
Ректор МГУ приказал срочно удалить "пиратский" софт





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский