Вместо какого значения строки может записываться значение "(MEMO)"?

Рассматриваемый функционал производит выгрузку данных из БД SQL Server. Результирующий набор записывается в текстовый файл. Сначала формируется строка к которой добавляются значения из выборки: strdb := strdb + '"' + Query.Fields[i].Text + '"';

Когда просматривается сформированный файл видим следующее: "10978";"";(MEMO);1;2019;1;1;"4,4,5,4,4,5,4,5,4,4,5,4"...

  1. Соединение с БД через BDE (да увы в 2020 это еще есть), сам проект на Delphi6.
  2. Данная ситуация возникает только у одной клиентской базы из множества.
  3. (MEMO) выходит только у 5 из 38 тестовых полей при записи. Единственное что общее у этих полей, наличие конструкции в выборке RTRIM(REPLACE(Field3,''"'',''""''))
  4. Восстанавливал их бэкап и делал выгрузку, все нормально.
  5. Выполняя запросы выборок у них на сервере получал корректные данные(БД клиента выше 2008).
  6. Типы полей в БД: char. Скажите пожалуйста откуда может взяться значение (MEMO)?

Ответы (1 шт):

Автор решения: Alex R.

Это дефолтное значение у класса TField при приведении экземпляров этого класса к строке.

Среди полей, которые вы приводите к строке есть поле Memo (TMemoField, наследник TBlobField). В коде Delphi 7 определено:

procedure TBlobField.GetText(var Text: string; DisplayText: Boolean);
begin
  Text := inherited GetAsString;
end;

В этом месте как раз и возвращается (MEMO).

Я бы рекомендовал проверять типы полей и использовать функция AsString.

→ Ссылка