|
Вопрос # 1 233/ вопрос открыт / |
|
Приветствую, уважаемые эксперты! С наступающим новым годом. Буду признателен если вы подскажете.
Существует библиотека dll. Библиотека содержит модуль данных на котором расположены компоненты для доступа к данным. Сам код библиотеки принимает (из службы) строку подключения к субд Oracle и пытается подключиться. Но подключения не происходит.
Приложение: Переключить в обычный режим- library ArhPhErr;
-
- uses
- SysUtils,
- Classes,
- DataUnitdll in 'DataUnitdll.pas' {DataModule1: TDataModule};
-
- {$R *.res}
- function Connect(Username,Password,Server: String): Boolean; stdCall;
- begin
- try
- With datamodule1 do
- begin
- Try
- OraSession1.Username:=Username;
- OraSession1.Password:=Password;
- OraSession1.Server:=Server;
- OraSession1.ConnectPrompt:=False;
- OraSession1.Connected:=True;
- result:=True;
- except
- Result:=False;
- end;
- end;
- except
- Result:=False;
- end;
- end;
-
- Function Get_count(Bool : boolean) : integer; stdcall;
- begin
- If bool = true then
- Begin
- DataModule1.count.active:=True;
- result:=DataModule1.count.Fields[0].AsInteger;
- end
- else
- If bool = False then
- begin
- DataModule1.count.active:=False;
- result:=0;
- end;
- end;
-
- function ExArhErr(Archstart : Boolean) : boolean; stdCall;
- Begin
- With datamodule1 do
- begin
- Try
- OraScript1.SQL.Clear;
- OraScript1.SQL.Add('DECLARE');
- OraScript1.SQL.Add('Sysday NUMBER;');
- OraScript1.SQL.Add('CURSOR c1 IS');
- OraScript1.SQL.Add('SELECT
fa.phone_6,fa.data_in,fa.adopted,fa.mex,fa.data_out,fa.TYPE,dp.NAME,dp.port_asl,dp.stan,');
- OraScript1.SQL.Add('dp.lin,dp.sak,dp.raspred,ap.street,ap.house,ap.house_ndx,ap.flat,fa.req');
- OraScript1.SQL.Add('FROM failures fa, dep_phone dp, adres_pop ap');
- OraScript1.SQL.Add('WHERE (fa.phone_6 = dp.phone_6) AND (dp.id = ap.id) AND');
- OraScript1.SQL.Add('Months_Between(SYSDATE,fa.data_out) >= 2 AND fa.data_out IS NOT null;') ;
- OraScript1.SQL.Add('BEGIN');
- OraScript1.SQL.Add('FOR ROWS IN c1 LOOP');
- OraScript1.SQL.Add('INSERT INTO archiv_errors');
-
OraScript1.SQL.Add('(phone_6,data_in,adopted,mex,data_out,TYPE,NAME,port_asl,stan,lin,sak,raspred,');
- OraScript1.SQL.Add('street,house,house_ndx,flat,req) VALUES');
-
OraScript1.SQL.Add('(ROWS.phone_6,ROWS.data_in,ROWS.adopted,ROWS.mex,ROWS.data_out,ROWS.TYPE,ROWS.NAME,');
-
OraScript1.SQL.Add('ROWS.port_asl,ROWS.stan,ROWS.lin,ROWS.sak,ROWS.raspred,ROWS.street,ROWS.house,ROWS.house_ndx,');
- OraScript1.SQL.Add('ROWS.flat,ROWS.req);');
- OraScript1.SQL.Add('DELETE FROM failures');
- OraScript1.SQL.Add('WHERE Months_Between(SYSDATE,data_out) >= 2 AND data_out IS NOT NULL;');
- OraScript1.SQL.Add('END LOOP;');
- OraScript1.SQL.Add('COMMIT;');
- OraScript1.SQL.Add('END;');
- OraScript1.Execute;
- Result:=True;
- except
- Result:=False;
- end;
- end;
- end;
- Exports ExArhErr,
- Connect,
- ExArhErr;
- begin
- end.
-
 |
Вопрос задал: John (статус: Посетитель)
Вопрос отправлен: 27 декабря 2007, 05:44
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич
Здравствуйте, zvialov!
Для начала, в dll-лину передаются String'и, что в корне не верно. PChar в dll надо передавать (и принимать).
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 27 декабря 2007, 10:41; участников в обсуждении: 2.
|
John (статус: Посетитель), 27 декабря 2007, 10:05 [#1]:
Я сам исправил свою ошибку, может не правильно, кто подскажет?
Я в библиотеке инициализировал создание модуля данных.
begin
Application.CreateForm(TDataModule1, DataModule1);
end.
И еще (отвечая на Отвечает эксперта ) я читал, что в библиотеку можно передавать в качестве параметров строки, но возвращать желательно PChar
|
|
Feniks (статус: Бакалавр), 27 декабря 2007, 10:33 [#2]:
В DLL в качестве параметров можно передавать/получать строки типа String, НО обязательно надо в блоке uses первым подключать менеджер памяти от борланда, модуль borlndmm. Иначе, в памяти будет твориться бог знает что. Или же передавать/получать PChar.
|
|
John (статус: Посетитель), 27 декабря 2007, 10:41 [#3]:
Я понимать!
Но библиотека в отладке.
От того что и передавать не измениться. Если не вспомнить, что модуль данных необходимо инициализировать, только потом можно думать, что передавать. То и и слелал, я инициализировал модуль данных. Пепер буду посмотреть как он работает. И что передавать в библиотеку.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|