Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TString в TMemoField и обратно, Работа с TMemoField, содержащим текст 
V
    Опции темы
OVT
Дата 29.8.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 29.8.2006

Репутация: нет
Всего: нет



Коллеги! Нужна пара процедур (функций), копирующих TString в TMemoField и обратно. Обратных примеров TMemoField в TString нашел множество, например:
Код

function TfmMain.GetMemo(TheField: TMemoField) : String;
// Копирует TMemoField в строку длиной до 255 символов
var
 BS : TBlobStream;
 BufSize : Integer;
begin
  if TheField.IsNull then
    Result := ''
  else begin
    BS := TBlobStream.Create(TheField, bmRead);
    BufSize := BS.Size;
    if BufSize > 255 then
      BufSize := 255;
    try
      if BufSize > 0 then begin
        SetLength(Result, BufSize);
        BS.Read(Result[1], BufSize);
      end
      else
        Result := '';
    finally
      BS.Free;
    end;
{    while Pos(#10, Result) >  0 do
      Result[Pos(#10, Result)] := ' ';
    while Pos(#13, Result) >  0 do
      Result[Pos(#13, Result)] := ' ';}
  end;
end;


, а вот прямого не обнаружил. Пытаюсь делать так:

Код

procedure TfmMain.PutMemo(TheField: TMemoField; TheString: String);
var
  BS : TBlobStream;
  BufSize : Integer;
  Buffer : PChar;
begin
  if Not TheField.IsNull then begin
    BS := TBlobStream.Create(TheField, bmWrite);
    BufSize := Length(TheString);
    Buffer := AllocMem(BufSize);
    StrPCopy(Buffer, TheString);
    try
      BS.Write(Buffer, BufSize);
    finally
      BS.Free;
      FreeMem(Buffer);
    end;
  end;
end;


но при строке нулевой длины -  ошибки аллокации. Если дополнять Buffer нулем (#0) в стиле PChar, то последний попадает в TMemoField и в последствии будет (?) читаться в строку.
Если поправите мой код, или предложите свой - буду премного благодарен!
Спасибо!

P.S. D6, BDE, MS-SQL 2000
PM MAIL   Вверх
SergeBS
Дата 30.8.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



OVT, 
Цитата

но при строке нулевой длины -  ошибки аллокации. 

Писать строку нулевой длины - значит ничего не писать. А для очистки есть метод clear.
PM MAIL   Вверх
OVT
Дата 30.8.2006, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 29.8.2006

Репутация: нет
Всего: нет



Я бы сказал так: писать строку нулевой длины -  значит очистить поле. Я заметил, что если TMemoField в записи БД пусто, то TheField.IsNull истинно. Правильно ли я понимаю, что очистить поле примечания в БД можно так: TheField.Clear?
PM MAIL   Вверх
SergeBS
Дата 30.8.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



OVT, 
Цитата

 Правильно ли я понимаю, что очистить поле примечания в БД можно так: TheField.Clear? 

Да.
PM MAIL   Вверх
OVT
Дата 30.8.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 29.8.2006

Репутация: нет
Всего: нет



SergeBS, 

Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.