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


Автор: НурболКазбеков 27.10.2005, 06:57
У меня одна проблема . Мне надо было загружать вордовский документ с базы (это у меня получилось), но когда я редактирую и закрываю документ, запрашивает о сохранении (ну поидее так и должно быть). Нажимаю Ок, но изменение нигде не сохраняется, ни в базе, ни в оригинале (в самом документе).
Код проги таков:
procedure TForm2.Button2Click(Sender: TObject);
var
ptkwrd:Tmemorystream;
begin
try
ptkwrd:= Tmemorystream.Create;
tblobfield(ADO1ww).SaveToStream(ptkwrd);
ptkwrd.Position:=0;
ptkwrd.SaveToFile(''D:/Прога/W.doc'');
shellexecute(Handle, ''open'',''D:/Прога/W.doc'',nil,nil,SW_SHOWNORMAL);
finally
ptkwrd.Free;
end;
Кто сможет помочь smile , спасибо заранее. smile

Автор: offline 27.10.2005, 11:24
http://forum.vingrad.ru/index.php?showtopic=67193&st=15

там я дал подсказку ;)

Автор: offline 27.10.2005, 11:57
А если не секрет, что ты с Вордом возишься? Можно же работать с Rich редактором и там создавать фотрмтированный текст как в Ворде, а про Ворд забыть.

Автор: НурболКазбеков 31.10.2005, 09:50
kirillliusА ведь в RICH редакторе нельзя же сохранить рисунки или графики как ворде, ведь так или нет? smile

Автор: offline 31.10.2005, 20:50
Смотри бесплатную библиотеку RXLib

Автор: lotax 1.11.2005, 09:56
Попробуй использовать TOleContainer:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  OleContainer1.InsertObjectDialog;
end;

const
  Signature:integer=-525465623;

procedure TForm1.Table1BeforeScroll(DataSet: TDataSet);
var
  Stream:TMemoryStream;
begin
  if OleContainer1.Modified then begin
    Stream:=nil;
    try
      Stream:=TMemoryStream.Create;
      Stream.Write(Signature,sizeof(Signature));
      if Assigned(OleContainer1.OleObjectInterface) then OleContainer1.SaveToStream(Stream);
      Stream.Seek(0,soFromBeginning);
      try
        Table1.Edit;
       TBLOBField(Table1.FieldByName('Graphic')).LoadFromStream(Stream);
        Table1.Post;
        OleContainer1.Modified:=False;
      except
        Table1.Cancel;
      end;
    finally
      if Assigned(Stream) then Stream.Free;
    end;
  end;
end;

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
var
  Stream:TMemoryStream;
  N:integer;
begin
  OleContainer1.DestroyObject;
  Stream:=nil;
  try
    Stream:=TMemoryStream.Create;
    TBLOBField(Table1.FieldByName('Graphic')).SaveToStream(Stream);
    Stream.Seek(0,soFromBeginning);
    if Stream.Size>4 then begin
      Stream.Read(N,sizeof(N));
      if N=Signature then OleContainer1.LoadFromStream(Stream);
    end;
    OleContainer1.Modified:=False;
  finally
    if Assigned(Stream) then Stream.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Table1.Open;
end;



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