Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 10:21   #1
pr0user
 
Регистрация: 31.10.2010
Сообщений: 8
Вопрос Из Blob в RichEdit

Здравствуйте!
Задача следующая:
Имеется БД (PostgreSQL) требуется в одной из таблиц хранить doc файлы и уметь их просматривать в RichEdit (мне известно, что doc файлы хранить в БД не стоит, но все же мне нужно сделать именно это).
Так как с подобным я никогда не сталкивался, начал пробовать разбираться и по примерам смог добиться следующего:
по нажатию на кнопку данные из одного doc файла сохраняются в БД, а по нажатию на другую кнопку выгружаются из БД в другой doc. (если требуется я могу привести код)
Но как я указал выше мне нужно просматривать содержимое doc файла, хранящегося в БД в RichEdit. А как это сделать никак не могу разобраться.
Последнее до чего я дошел это:
Код:
procedure TForm1.BitBtn6Click(Sender: TObject);
var
blob: TStream;
MS: TStream;
begin
MS:= TMemoryStream.Create;
  try
    blob := Form1.ZQuery1.CreateBlobStream(Form1.ZQuery1.FieldByName('docblob'), bmRead);
    blob.Seek(0, soFromBeginning);
      try
        MS.CopyFrom(blob, blob.Size);
        Form1.RichEdit1.Lines.LoadFromStream(MS);
      finally
      MS.Free;
      end;
    finally
      blob.Free;
    end;
end;
Но при нажатии на кнопку RichEdit пустой.
Прошу натолкнуть меня на нужные рельсы и по возможности привести пример кода. Спасибо.

Узнал, что RichEdit может только *.rtf отображать, тогда хотя бы как *.rtf отобразить?

Последний раз редактировалось pr0user; 31.10.2010 в 10:32.
pr0user вне форума Ответить с цитированием
Старый 31.10.2010, 12:29   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте вот так:
Код:
procedure TForm1.BtnGetClick(Sender: TObject);
var
  bs: TBlobStream;
begin
  bs := nil;
  with ZQuery1 do
    try
      open;
      first;
      bs := TBlobStream.Create('docblob', bmread);
      Richedit1.plaintext := false;
      Richedit1.Lines.Loadfromstream(bs);
    finally
      bs.free;
      close;
    end;
end;
mihali4 вне форума Ответить с цитированием
Старый 31.10.2010, 13:52   #3
pr0user
 
Регистрация: 31.10.2010
Сообщений: 8
По умолчанию

mihali4, большое спасибо, что ответили!
Можете подсказать, почему он ругаеться у меня на строку:
Код:
var
  bs: TBlobStream;
Вообще если я пишу TBlobStream или к примеру TMemoryStream он пишет:
Цитата:
Undeclared identifier: 'TBlobStream'
хотя я по идее его объявляю.

А если я пишу:
TStream;
то все нормально.

А если я в вами приведенном коде пишу:
Код:
var
  bs: TStream;
То ему не нравится строка:
bs:= TBlobStream.Create('docblob', bmRead);
и он снова пишет:
Цитата:
Undeclared identifier: 'TBlobStream'
и вот и еще на типы тоже пишет в этой же строке:
Цитата:
Incompatible types: 'TComponent' and 'String'
Я пишу в Delphi 7

Спасибо.

Последний раз редактировалось pr0user; 31.10.2010 в 13:55.
pr0user вне форума Ответить с цитированием
Старый 31.10.2010, 13:59   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А у вас в uses есть DBTables ?
TBlobStream объявлен там...
mihali4 вне форума Ответить с цитированием
Старый 31.10.2010, 14:03   #5
pr0user
 
Регистрация: 31.10.2010
Сообщений: 8
По умолчанию

Спасибо, этого не было.
Но он теперь мне пишет:
Цитата:
Incompatible types: 'TBlobField' and 'String'
в строке:
Код:
bs:= TBlobStream.Create('docblob', bmRead);
pr0user вне форума Ответить с цитированием
Старый 31.10.2010, 14:07   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А... это я напутал...
Код:
bs := TBlobStream.Create(docblob, bmread);
Так должно быть.
Кавычки лишние...
mihali4 вне форума Ответить с цитированием
Старый 31.10.2010, 14:10   #7
pr0user
 
Регистрация: 31.10.2010
Сообщений: 8
По умолчанию

И на этот уговор он не хочет соглашаться:
Цитата:
Undeclared identifier: 'docblob'
если без кавычек
pr0user вне форума Ответить с цитированием
Старый 31.10.2010, 14:22   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Елки-палки, ну поэспериментируйте...
Попробуйте ZQuery1docblob...
mihali4 вне форума Ответить с цитированием
Старый 31.10.2010, 14:36   #9
pr0user
 
Регистрация: 31.10.2010
Сообщений: 8
По умолчанию

Пробую вот так писать:
Код:
bs := TBlobStream.Create(Form1.ZTable1docblob, bmread);
Программа компилируется, но выскакивает исключение при нажатии на кнопку:

каких либо других вариантов не могу даже придумать
pr0user вне форума Ответить с цитированием
Старый 31.10.2010, 15:11   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да уберите вы Form1.ZTable1docblob...
Зачем это лишнее указание ?
Вот вам рабочий пример, разбирайтесь:
Код:
В этом примере поле 'Table1Memo' это paradox 'formatted memo'. Оно так же может быть полем blob. 

Через TBlobStream содержимое контрола RichEdit можно загружать или сохранять в базу 
данных: 

procedure TForm1.BtnGetClick(Sender: TObject);
var
  bs: TBlobStream;
begin
  bs := nil;
  with Table1 do
    try
      open;
      first;
      bs := TBlobStream.Create(table1memo, bmread);
      Richedit1.plaintext := false;
      Richedit1.Lines.Loadfromstream(bs);
    finally
      bs.free;
      close;
    end;
end;

procedure TForm1.BtnPutClick(Sender: TObject);
var
  bs: TBlobStream;
begin
  bs := nil;
  with Table1 do
    try
      open;
      first;
      edit;
      bs := TBlobStream.Create(table1memo, bmwrite);
      Richedit1.plaintext := false;
      Richedit1.Lines.Savetostream(bs);
      post;
    finally
      bs.free;
      close;
    end;
end;
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BLOB поле artemavd БД в Delphi 17 09.08.2016 02:13
Interbase. Работа с BLOB-полями Sewell БД в Delphi 5 25.11.2010 08:46
BLOB и Interbase RuVarez Общие вопросы Delphi 1 27.08.2010 21:51
Вставка изображения с RichEdit в RichEdit Sensizu Компоненты Delphi 2 01.10.2009 18:11
BLOB в string _andrews_ БД в Delphi 0 20.04.2007 12:05