Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Текст rtf взять базы


Автор: makle 6.6.2005, 10:00
Добрый всем день!
Прошу помощи. Сам туплю в этом вопросе, а ответа ни в хелпе, ни в форуме не нашел. Или не понял.
Есть таблица access, в ней поле мемо, в нем rtf текст. Т.е в режиме таблицы я вижу типа {\rtf1\ansi\ansicpg1251\uc1 \deff0..... Надо этот текст поместить в массив, а потом обратно из массива в таблицу. Никакой обработки данных в массиве не происходит.
Как я понимаю этот rtf можно принимать как текстовую строку, т.е я помещаю данные из таблицы в string и затем обратно в таблицу.
Если все прально почему теперь в талице я вижу {MEMO}. Что это {MEMO}?
Может это надо делать не через стринг, а через другой тип?

Автор: ~FoX~ 6.6.2005, 10:23
makle
РТФ предоставляет возможность форматировать текст т.е. он добавляет теги формата текста (ну устроен он так).
Поле мемо не хранить в себе форматированный текст, она просто текст хранит. Тип стринг, также не хранит теги форматирования текста.
Для хранения и работы с ртф рекомендую использовать тип поля "Поле объекта OLE".
Но врятли ты сможешь в CustomGrid выводить форматированный текст. Прдется цеплять ричбокс или динамически их создавать в ячейках грда.

Автор: makle 6.6.2005, 11:12
ok
Проблема в том, что это поле талицы именно типа "Поле МЕМО" и в нем данные в виде
{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1049\deflangfe1049{\fonttbl{\f... - это от VBA приложения. Оно с этим работает.
Мне же надо взять эти данные как есть в массив, никуда не выводить, и потом обратно. Через стринг получаю в таблице {MEMO}, пробую через Variant, тогда при записи обратно в таблицу - ошибка "Invalid variant type conversion"

Автор: ~FoX~ 6.6.2005, 11:43
Ну естественно ты получшь (МЕМО), потому что стандартный грид не поддерживает поля такого типа. Для них есть специальные компаненты - DBMemo например.

Вот это у тебя работает?
Код

var
  s: array[0..1] of string;
begin
  s[0] := ADOTable1.FieldByName('nam').AsString;
  ADOTable1.Edit;
  ADOTable1.FieldByName('nam').AsString := s[0];
  ADOTable1.Post;
end;

Автор: makle 6.6.2005, 14:26
FOX!
Я понял. Спасибо!

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