Найдено 13 результатов
- Ср 04 ноя 2020 15:25
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
При отключенном режиме на тестовом примере перестала появляться эта ситуация. Буду пробовать на основном проекте, отпишусь чуть позже
- Вт 03 ноя 2020 08:31
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
Отправил еще раз архив с тестовым примером
- Пт 30 окт 2020 09:14
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
- Пт 30 окт 2020 08:06
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
Странно отправлял даже дважды. Сейчас отправлю еще раз
- Ср 21 окт 2020 13:47
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
Извините за долгий ответ. Поменялся приоритет задач на время.
Посредством формы e-support выслал тестовый пример с описанием необходимых действий.
Посредством формы e-support выслал тестовый пример с описанием необходимых действий.
- Пт 28 авг 2020 08:45
- Форум: Oracle Data Access Components
- Тема: Ошибка "Assertion failure"
- Ответы: 5
- Просмотры: 9647
Re: Ошибка "Assertion failure"
Добрый день! Проблему удалось решить своими силами. После вызова конкретной процедуры, сразу же освобождаю TOraStoredProc компонент. Все ссылки вовремя уничтожаются (если использовались Blob-поля в нашем случае) и ошибка ушла.
- Пт 28 авг 2020 08:41
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
Добрый день! Есть какие-либо подвижки по моему вопросу?
- Пн 17 авг 2020 15:17
- Форум: Oracle Data Access Components
- Тема: Ошибка "Assertion failure"
- Ответы: 5
- Просмотры: 9647
Re: Ошибка "Assertion failure"
Выслал архив с тестовым примером через форму e-support.
- Пт 31 июл 2020 13:53
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
Код: Выделить всё
PROCEDURE import_mvd_dict ( p_id string_table,
p_name string_table,
p_addr string_table,
p_stan number_table,
p_prim string_table )is
dt date := sysdate;
ex number;
st number;
cur MOP_MVD%ROWTYPE;
l_id varchar2(4000);
l_name varchar2(4000);
l_addr varchar2(4000);
l_stan number;
l_prim varchar2(4000);
begin
-- основной цикл обработки входящих данных
for i in p_id.first..p_id.last loop
l_stan := p_stan(i);
if l_stan not in (0,1) then
fgv_err.raiserr( TA_ERRC, TA_PFX, 757, DEST_TA );
end if;
l_id := substr(trim(p_id(i)),1,4);
if l_id is null then
fgv_err.raiserr( TA_ERRC, TA_PFX, 759, DEST_TA );
end if;
l_name := substr(p_name(i),1,300);
l_addr := substr(p_addr(i),1,100);
l_prim := substr(p_prim(i),1,100);
select count(1) into ex from mop_mvd m where m.id = l_id;
if ex = 0
then -- добавление новой записи
st := l_stan * 2;
insert into mop_mvd (id,full_name,addr,stan,prim,date_add,date_edit,date_del)
values (l_id,l_name,l_addr,st,l_prim,dt,dt,case when st = 0 then dt else null end);
else -- редактирование существующей записи
select * into cur from mop_mvd m where m.id = l_id;
if cur.date_edit = dt then
fgv_err.raiserr( TA_ERRC, TA_PFX, 758, DEST_TA, l_id );
end if;
if nvl(cur.full_name,chr(0)) = nvl(l_name,chr(0))
and nvl(cur.addr,chr(0)) = nvl(l_addr,chr(0))
then -- ключевые реквизиты не изменились
st := l_stan * 1;
update mop_mvd m set m.prim = l_prim,
m.stan = st,
m.date_edit = dt,
m.date_del = case when st = 0 then nvl(m.date_del,dt) else null end
where m.id = l_id;
else -- обновление записи
st := l_stan * 3;
update mop_mvd m set m.full_name = l_name,
m.addr = l_addr,
m.prim = l_prim,
m.stan = st,
m.date_edit = dt,
m.date_del = case when st = 0 then nvl(m.date_del,dt) else null end
where m.id = l_id;
end if;
end if;
end loop;
-- "удаление" не упомянутых в файле записей
update mop_mvd m set m.stan = 0, m.date_del = nvl(m.date_del,dt) where m.date_edit < dt;
end import_mvd_dict;
- Пт 31 июл 2020 13:51
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
пример кода в Delphi:
Код: Выделить всё
TPkMop = class(TCustomOraPackage)
private
FSession: TOraSession;
procedure GetStoreProc;
protected
StoredProc: TOraStoredProc;
published
property Name;
property Session: TOraSession read GetSession write SetSession;
// property Cursor;
public
procedure ImpMVDDict_1207(const PStan: TList<Variant>;
const PId, PName, PAddr, PPrim: TList<string>);
end;
implementation
procedure TPkMop.GetStoreProc;
begin
if Assigned(StoredProc) then
FreeAndNil(StoredProc);
StoredProc := TOraStoredProc.Create(nil);
StoredProc.AutoCommit := False;
StoredProc.Session := Session;
end;
procedure TPkMop.ImpMVDDict_1207(const PStan: TList<Variant>;
const PId, PName, PAddr, PPrim: TList<string>);
var
LInd, LBuf: Integer;
LStan: TList<Variant>;
LID,LPName, LAddr, LPrim: TList<string>;
I, LLast: Integer;
begin
try
GetStoreProc;
LID := TList<string>.Create;
LPName := TList<string>.Create;
LAddr := TList<string>.Create;
LStan := TList<Variant>.Create;
LPrim := TList<string>.Create;
StoredProc.StoredProcName := 'FGV0.MOP.IMPORT_MVD_DICT_1207';
StoredProc.Prepare;
LInd := 0;
LBuf := 32000;
while (LBuf * LInd <= PId.Count) do
begin
LLast := Iff((LBuf * (LInd + 1) > PId.Count), PId.Count,
LBuf * (LInd + 1));
for I := (LBuf * LInd) to (LLast - 1) do
begin
LId.Add(PId[I]);
LPName.Add(PName[I]);
LAddr.Add(PAddr[I]);
LStan.Add(PStan[I]);
LPrim.Add(PPrim[I]);
end;
SetParam('P_ID', LId);
SetParam('P_NAME', LPName);
SetParam('P_ADDR', LAddr);
SetParam('P_STAN', LStan);
SetParam('P_PRIM', LPrim);
StoredProc.Execute;
Inc(LInd);
LId.Clear;
LPName.Clear;
LAddr.Clear;
LStan.Clear;
LPrim.Clear;
end;
finally
FreeAndNil(LId);
FreeAndNil(LPName);
FreeAndNil(LAddr);
FreeAndNil(LStan);
FreeAndNil(LPrim);
end;
end;
- Пт 31 июл 2020 13:47
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Re: Восстановление сессии в фоне
При DisconnectedMode вылетало бы постоянно. Нет, я его не использую.
- Ср 29 июл 2020 15:56
- Форум: Oracle Data Access Components
- Тема: Ошибка "Assertion failure"
- Ответы: 5
- Просмотры: 9647
Ошибка "Assertion failure"
Добрый день!
Исходные данные: студия - Embarcadero 10.1 Berlin; ODAC - версия 10.3.9; БД - Oracle 18c; соединение - direct.
В приложении используется библиотека наложения цифровой подписи. Всё общение приложения с БД построено на вызове пакетных процедур. Соответственно, использую компонент TOraStoredProc. После наложения подписи (инициализирую библиотеку, делаю необходимые вызовы, освобождаю библиотеку) при любом обращении к базе вылетает ошибка (см. файл). Вылетает при очистке компонента FreeAndNil(StoredProc):
StoredProc.Free тоже не помогает. С чем связана такая завязка на сторонние библиотеки?
Спасибо
Исходные данные: студия - Embarcadero 10.1 Berlin; ODAC - версия 10.3.9; БД - Oracle 18c; соединение - direct.
В приложении используется библиотека наложения цифровой подписи. Всё общение приложения с БД построено на вызове пакетных процедур. Соответственно, использую компонент TOraStoredProc. После наложения подписи (инициализирую библиотеку, делаю необходимые вызовы, освобождаю библиотеку) при любом обращении к базе вылетает ошибка (см. файл). Вылетает при очистке компонента FreeAndNil(StoredProc):
Код: Выделить всё
procedure TPkMop.GetStoreProc;
begin
if Assigned(StoredProc) then
FreeAndNil(StoredProc);
StoredProc := TOraStoredProc.Create(nil);
StoredProc.AutoCommit := False;
StoredProc.Session := Session;
end;
Спасибо
- Ср 29 июл 2020 15:35
- Форум: Oracle Data Access Components
- Тема: Восстановление сессии в фоне
- Ответы: 15
- Просмотры: 19261
Восстановление сессии в фоне
Добрый день!
Возникла такая неприятная ситуация при использовании компонент ODAC (версия 10.3.9) в студии Embarcadero 10.1 Berlin.
Имеется форма, на ней кнопка, при нажатии на которую происходит загрузка данных структурированного файла в БД Oracle (версия 18с). Если грузим последовательно несколько файлов (или один файл несколько раз), то после каждой нечетной загрузки кроме первой (3-я, 5-я, 7-я и т.д.) происходит переподключение сессии (срабатывает событие OnAfterConnect на компоненте TOraSession). Опытным путем установил, что реконнект идет при обращении к методу Prepare компонента TOraStoredProc. Так как исходников не имею, то не могу понять причину происходящего. При подключении используется Direct. DisconnectedMode отключен.
Возникла такая неприятная ситуация при использовании компонент ODAC (версия 10.3.9) в студии Embarcadero 10.1 Berlin.
Имеется форма, на ней кнопка, при нажатии на которую происходит загрузка данных структурированного файла в БД Oracle (версия 18с). Если грузим последовательно несколько файлов (или один файл несколько раз), то после каждой нечетной загрузки кроме первой (3-я, 5-я, 7-я и т.д.) происходит переподключение сессии (срабатывает событие OnAfterConnect на компоненте TOraSession). Опытным путем установил, что реконнект идет при обращении к методу Prepare компонента TOraStoredProc. Так как исходников не имею, то не могу понять причину происходящего. При подключении используется Direct. DisconnectedMode отключен.