Получение строки с #13#10 из базы при ConvertEOL:=true

Обсуждение возникших проблем, предложений и ошибок ODAC компонентов
Закрыто
Eugeni
Сообщения: 7
Зарегистрирован: Вт 22 апр 2014 07:26

Получение строки с #13#10 из базы при ConvertEOL:=true

Сообщение Eugeni » Вт 22 июл 2014 13:25

Добрый день.
При получении строки из функции с включенным ConvertEOL в OraSession и при условии, что перевод строки #10, возвращаемая строка получается меньше ожидаемой, при чем обрезаются данные.
После копания в коде обнаружил функцию, которая добавляет недостающий #13 в строку

Код: Выделить всё

function AddCRString(Source, Dest: IntPtr; Count: integer): integer;
В коде этой процедуры ошибка

Код: Выделить всё

  
  DestEnd   := PtrOffset(Dest, Count);
  while (PtrCompare(Source, SourceEnd) < 0) and (PtrCompare(Dest, DestEnd) < 0)
Цикл выполняется пока не достигли конца источника или ПРИЕМНИКА.
Мы не достигнем конца источника, если добавлен хотя бы один #13, второе условие сработает раньше.
Правильнее будет

Код: Выделить всё

  
  DestEnd   := PtrOffset(Dest, Count);
  while (PtrCompare(Source, SourceEnd) < 0) 
...
и
//  if PtrCompare(Dest, DestEnd) > 0 then // last char was CRLF
//    Dest := DestEnd;
Тоже самое в функции

Код: Выделить всё

function AddCRUnicode(Source, Dest: IntPtr; Count: integer): integer;

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Получение строки с #13#10 из базы при ConvertEOL:=true

Сообщение Alexp » Ср 23 июл 2014 11:24

Добрый день.

Спасибо, мы постараемся внести необходимые изменения в ближайшей версии.

Закрыто