powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при выполнении скрипта
3 сообщений из 3, страница 1 из 1
Ошибка при выполнении скрипта
    #39695147
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня всем гуру.

Начал юзать компоненты ODAC 10.1.5 for RAD Studio 10.1 Berlin.
Соединение идет без клиента (Direct включен). Есть динамический скрипт:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
procedure TfrmMain.GetSumField(const PBankN: string;
const PWhere: TStringList; const PFilter: TFilterStruct;
out PSumValueArr: array of Double);
var
  I: Integer;
  LDataSet: TOraQuery;
begin
  try
    LDataSet := TOraQuery.Create(nil);
    LDataSet.Session := DefSession;  --Это сессия, в которой залогинились к базе
    with LDataSet do
    begin
      SQL.Clear;
      SQL.Add('begin');
      SQL.Add('  SELECT COUNT(T.D_NO),');
      SQL.Add('         NVL(SUM(NVL(T.SUM_FULL, 0)), 0),');
      SQL.Add('         NVL(SUM(NVL(T.SUM_DEPO, 0)), 0),');
      SQL.Add('         NVL(SUM(NVL(T.SUM_BLOCK, 0)), 0),');
      SQL.Add('         NVL(SUM(NVL(T.SUM_NOT, 0)), 0),');
      SQL.Add('         NVL(SUM(NVL(T.SUM_PAY, 0)), 0)');
      SQL.Add('    INTO :PCOUNT,');
      SQL.Add('         :PSUMFULL,');
      SQL.Add('         :PSUMDEPO,');
      SQL.Add('         :PSUMBLOCK,');
      SQL.Add('         :PSUMNOT,');
      SQL.Add('         :PSUMPAY');
      SQL.Add('    FROM SUM_D T');
      SQL.Add('   WHERE T.BANK_N = :BANKN ');
      SQL.AddStrings(PWhere);
      SQL.Add(';');
      SQL.Add('end;');
      Params.CreateParam(ftString, 'BANKN', ptInput);
      ParamByName('BANKN').AsString := PBankN;
      Params.CreateParam(ftFloat, 'PCOUNT', ptOutput);
      Params.CreateParam(ftFloat, 'PSUMFULL', ptOutput);
      Params.CreateParam(ftFloat, 'PSUMDEPO', ptOutput);
      Params.CreateParam(ftFloat, 'PSUMBLOCK', ptOutput);
      Params.CreateParam(ftFloat, 'PSUMNOT', ptOutput);
      Params.CreateParam(ftFloat, 'PSUMPAY', ptOutput);
      if Length(PFilter.VarName) > 0 then
      begin
        for I := 0 to Length(PFilter.VarName) - 1 do
        begin
          Params.CreateParam(PFilter.VarType[I], PFilter.VarName[I], ptInput);
          ParamByName(PFilter.VarName[I]).Value := PFilter.VarData[I];
        end;
      end;
      Execute;
      PSumValueArr[0] := ParamByName('PCOUNT').AsFloat;
      PSumValueArr[1] := ParamByName('PSUMFULL').AsFloat;
      PSumValueArr[2] := ParamByName('PSUMDEPO').AsFloat;
      PSumValueArr[3] := ParamByName('PSUMBLOCK').AsFloat;
      PSumValueArr[4] := ParamByName('PSUMNOT').AsFloat;
      PSumValueArr[5] := ParamByName('PSUMPAY').AsFloat;
    end;
  finally
    FreeAndNil(LDataSet);
  end;
end;


При выполнении скрипта выдает ошибки
1)
Код: pascal
1.
Project MOP.exe raised exception class EInternalError with message ''.


2)
Код: pascal
1.
Project MOP.exe raised exception class EOraError with message 'ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-06512: at line 2'


3)
Код: pascal
1.
Project MOP.exe raised exception class Exception with message 'Invalid Oracle Home: '.


Как я понял, компонент TOraSession якобы смотрит на алиас, которого нет.
Клиент Оракла не стоит на машине, изначально работаем без него.
Та же ситуация если используем компонент, размещенный на форме.
Кто сталкивался? Где может быть проблема? Заранее благодарю.
...
Рейтинг: 0 / 0
Ошибка при выполнении скрипта
    #39695530
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, проблема была в том, что неправильно инициализировались переменные.
Сделал
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
      Prepare;
      ParamByName('BANKN').DataType := ftString;
      ParamByName('BANKN').ParamType := ptInput;
      ParamByName('BANKN').AsString := PBankN;
      ParamByName('PCOUNT').DataType := ftFloat;
      ParamByName('PSUMFULL').DataType := ftFloat;
      ParamByName('PSUMDEPO').DataType := ftFloat;
      ParamByName('PSUMBLOCK').DataType := ftFloat;
      ParamByName('PSUMNOT').DataType := ftFloat;
      ParamByName('PSUMPAY').DataType := ftFloat;
      ParamByName('PCOUNT').ParamType := ptOutput;
      ParamByName('PSUMFULL').ParamType := ptOutput;
      ParamByName('PSUMDEPO').ParamType := ptOutput;
      ParamByName('PSUMBLOCK').ParamType := ptOutput;
      ParamByName('PSUMNOT').ParamType := ptOutput;
      ParamByName('PSUMPAY').ParamType := ptOutput;
      if Length(PFilter.VarName) > 0 then
      begin
        for I := 0 to Length(PFilter.VarName) - 1 do
        begin
          ParamByName(PFilter.VarName[I]).DataType := PFilter.VarType[I];
          ParamByName(PFilter.VarName[I]).ParamType := ptInput;
          ParamByName(PFilter.VarName[I]).Value := PFilter.VarData[I];
        end;
      end;


между текстом запроса и Execute - и все заработало. Вопрос снимается.
...
Рейтинг: 0 / 0
Ошибка при выполнении скрипта
    #39695586
Фотография devart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для исследования ошибки "'Invalid Oracle Home: '", пожалуйста, приведите параметры соединения (DefSession), которое Вы устанавливаете в Direct Mode.
Действительно, для использования параметров в приведенном Вами примере достаточно указать им свойства DataType и ParamType
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при выполнении скрипта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]