Вместо какого значения строки может записываться значение "(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"...
- Соединение с БД через BDE (да увы в 2020 это еще есть), сам проект на Delphi6.
- Данная ситуация возникает только у одной клиентской базы из множества.
- (MEMO) выходит только у 5 из 38 тестовых полей при записи. Единственное что общее у этих полей, наличие конструкции в выборке
RTRIM(REPLACE(Field3,''"'',''""'')) - Восстанавливал их бэкап и делал выгрузку, все нормально.
- Выполняя запросы выборок у них на сервере получал корректные данные(БД клиента выше 2008).
- Типы полей в БД: char. Скажите пожалуйста откуда может взяться значение (MEMO)?
Ответы (1 шт):
Это дефолтное значение у класса TField при приведении экземпляров этого класса к строке.
Среди полей, которые вы приводите к строке есть поле Memo (TMemoField, наследник TBlobField). В коде Delphi 7 определено:
procedure TBlobField.GetText(var Text: string; DisplayText: Boolean);
begin
Text := inherited GetAsString;
end;
В этом месте как раз и возвращается (MEMO).
Я бы рекомендовал проверять типы полей и использовать функция AsString.