Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из Blob в RichEdit, doc файл в blob получить в richedit  
:(
    Опции темы
pr0user
  Дата 30.10.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!
Задача следующая:
Имеется БД требуется в одной из таблиц хранить 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 пустой.
Прошу натолкнуть меня на нужные рельсы и по возможности привести пример кода. И вообще реально это сделать?  Спасибо.

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

Это сообщение отредактировал(а) pr0user - 31.10.2010, 10:48
PM MAIL   Вверх
cat512
Дата 30.10.2010, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а с какой субд работаем говорить не надо? Телепаты сами разберутся?
PM MAIL   Вверх
pr0user
Дата 30.10.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(cat512 @ 30.10.2010,  18:37)
а с какой субд работаем говорить не надо? Телепаты сами разберутся?

СУБД PostgreSQL, а что в данном случае это принципиально?
Лучше бы по теме толковое что-то написали 

Это сообщение отредактировал(а) pr0user - 30.10.2010, 18:44
PM MAIL   Вверх
pr0user
Дата 31.10.2010, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Неужели никто не может ничего подсказать?! Мне правда очень нужно. Хотя бы что я не так делаю ?
PM MAIL   Вверх
Vas
Дата 31.10.2010, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(pr0user @  30.10.2010,  13:39 Найти цитируемый пост)
по нажатию на кнопку данные из одного doc файла сохраняются в БД, а по нажатию на другую кнопку выгружаются из БД в другой doc.

Выгрузил в файл и открыл RichEdit'om


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
AlexLogos
Дата 5.11.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

procedure ExtractFromBlob_T(OraTable:TOraTable; BlodField,Command:String);
var fname,ftype:string;
blob:TStream;
fn:OleVariant;
f:TextFile;
begin
with Form1 do
 begin
  OleContainer1.DestroyObject;
  fname:=OraTable.FieldByName('FILENAME').AsString;
  ftype:=OraTable.FieldByName('FILETYPE').AsString;
  if DownReg(ftype)='txt' then
   begin
    blob := OraTable.CreateBlobStream(OraTable.FieldByName(BlodField), bmRead);
     try
      blob.Seek(0, soFromBeginning);
      Memo1.Lines.LoadFromStream(blob);
      DBRichEdit1.Visible:=true;
      OleContainer1.Visible:=false;
     finally
      blob.Free
     end;
   end;
  if (DownReg(ftype)='doc')or(DownReg(ftype)='rtf') then
   begin
    blob := OraTable.CreateBlobStream(OraTable.FieldByName(BlodField), bmRead);
     try
      blob.Seek(0, soFromBeginning);
      with TFileStream.Create(GetCurrentDir+'\'+fname, fmCreate) do
       try
        CopyFrom(blob, blob.Size);
       finally
        DBRichEdit1.Visible:=false;
        OleContainer1.Visible:=true;
        Free;
        fn:=GetCurrentDir+'\'+fname; //OraTable.FieldByName('FILENAME').AsString;
        WordApplication1.Application.Documents.Open(fn,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);
        WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
        Memo1.Lines.Add('Кількість слів: '+inttostr(WordDocument1.Words.Count));

        WordDocument1.Close;
        OleContainer1.CreateObjectFromFile(fn,false);
        Olecontainer1.DoVerb(ovShow);
        Olecontainer1.Enabled := false;
        OleContainer1.Enabled:=true;

        if Command='LookOut' then DeleteFile(fn);

       end;
     finally
      blob.Free
     end;
   end;
 end;
end;


Вот кусок кода который я использовал для выгрузки из блоба файла и в зависимости от типа показывал либо в мемо либо формировал док-файл и грузил в олеконтейнер. Посмотри, иожет пригодиться. Правда база данных Oracle, но не думаю что это имеет принципиальное значение.

Это сообщение отредактировал(а) AlexLogos - 5.11.2010, 11:02
PM MAIL   Вверх
superVad
Дата 5.11.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



А разве RichEdit понимает doc?
PM MAIL   Вверх
former
Дата 11.11.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


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

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



Когда-то тоже заморачивался с редактором blob. Тоже хранил doc/rtf.
Сначала хотел использовать OLE, но в результате сделал следующее:
- из базы грузим во временный файл;
- запоминаем дату и время последнего редактирования файла;
- открываем его с помощью CreateProcess с ожиданием завершения редактирования в редакторе по умалчанию (M$ Offi$e, OpenOffice и т.д.);
- сравниваем даты и время последнего редактирования файла;
- в случае изменения, заливаем новый файл в blob.

Можно, конечно, изучать исходники OpenOffice, писать свой редактор (кстати, тема уже поднималась в "Основном"), но овчинка выделки не стоит. ИМХО.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
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.0490 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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