Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > ZeosLib + Oracle = ошибка ORA-00911


Автор: Sleuthhound 13.9.2011, 14:50
Доброго дня всем,

Пишу программу на Delphi и использую для работы с БД компонент ZeosLib 7.0.0-dev

Программа читает файл такого содержимого:

Код

insert into uin values (uin_id_seq.nextval, 0, 'sleuthhound', '161867489', 'CHERTS', '1234567', 0, to_date('13.09.2011 16:31:27', 'dd.mm.yyyy hh24:mi:ss'), 'проверка');
insert into uin values (uin_id_seq.nextval, 0, 'sleuthhound', '161867489', 'CHERTS', '1234567', 1, to_date('13.09.2011 16:39:10', 'dd.mm.yyyy hh24:mi:ss'), 'проверка2');


и добавляет из него данные в БД, код добавления такой:
Код


....
      StrList := TStringList.Create;
      ErrStrList := TStringList.Create;
      Query := TZQuery.Create(nil);
      Query.Connection := ZConnection1;
      Path := ProfilePath + TempMesLogName;
      StrList.Clear;
      StrList.LoadFromFile(Path);
      for StrListIndex := 0 to StrList.Count-1 do
      begin
          try
            Query.SQL.Clear;
            Query.SQL.Add(StrList[StrListIndex]);
            Query.ExecSQL;
          except
            on e :
              Exception do
                begin
                // Добавляем отбракованное в ErrStrList
                ErrStrList.Add(StrList[StrListIndex]);
                // Пишем в лог, что ошибка при добавлении записи в БД
                if WriteErrLog then
                  WriteInLog(ProfilePath, Format(ERR_LOAD_MSG_TO_DB, [CurTime, StringReplace(e.Message,#13#10,'',[RFReplaceall])]), 1);
              end;
        end;
    end;
.....



Думаю тут все понятно, грузим файл в TStringList, а потом в цикле выполняем серию

Код

Query.SQL.Clear;
Query.SQL.Add(StrList[StrListIndex]);
Query.ExecSQL;


и в результате в логе видим 

Код

ORA-00911: неверный символ


В SQL Navigator'е такого нет, все добавляется влегкую.

В программе все понятно, ругань идет на символ ; в конце каждой строки файла.

Если я убираю символ ; то начинает появляться такая ругань:

Код

ORA-00942: таблица или представление пользователя не существует


и тут у меня ступор, как? почему? ведь сразу после подключения к БД я делаю:

Код

alter session set current_schema=myschema


То есть меняю схему на правильную и это работает, потому, что select * from uin отрабатывает без проблем.

Подскажите, как побороть эти ошибки и добавить записи из файла?

Автор: Sleuthhound 13.9.2011, 15:28
Проблема решена, оказывается забыл дать право select на последовательность.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)