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


Автор: spawn1984 29.3.2005, 15:24
Народ помогите, очень нужно
Мне нужно сохранить в базу данных рисунок
вот код из моей программы..

Код

var
  bs: TStream;
  jpg:TJPegImage;
  begin
  if OpenPictureDialog1.Execute then
  begin
    suiDBImage1.Picture.Graphic.LoadFromFile(OpenPictureDialog1.FileName);
      if suiDBImage1.Picture.Graphic is TJPegImage then
      begin
      form4.ADOQuery1.Edit;
      bs:=form4.ADOQuery1.CreateBlobStream(form4.ADOQuery1.FieldByName('фото'),bmWrite);
      suiDBImage1.Picture.Graphic.SaveToStream(bs);
      bs.Free;
      form4.ADOQuery1.Post;
      end
    else
      if suiDBImage1.Picture.Graphic is TBitmap then
      begin
      jpg:=TJPegImage.Create;
      jpg.CompressionQuality:=100;
      {jpg.PixelFormat:=;}
      jpg.Assign(suiDBImage1.Picture.Graphic);
      jpg.JPEGNeeded;
      form4.ADOQuery1.Edit;
      bs:=form4.ADOQuery1.CreateBlobStream(form4.ADOQuery1.FieldByName('фото'),bmWrite);
      jpg.SaveToStream(bs);
      bs.Free;
      jpg.Free;
      end
    else
     form4.ADOQuery1.FieldByName('фото').Clear;
  end;

Вроде ошибок нет...но при добавлении рисунка выдает сообщение Bitmap Image is no valid
посмотрите пожалуйста код...если найдете какие-то ошибки..пришлите
или если у кого-то есть свой код пришлите для сравнения...
заранее спасибо

Автор: Vit 29.3.2005, 16:01
Цитата(spawn1984 @ 29.3.2005, 06:24)
  bs:=form4.ADOQuery1.CreateBlobStream(form4.ADOQuery1.FieldByName('фото'),bmWrite);
      suiDBImage1.Picture.Graphic.SaveToStream(bs);
      bs.Free;


Что ты тут делаешь?

1) Создаёшь поток
2) Загружаешь данные в поток
3) Разрушаешь поток
...

Итого данные берутся и выбрасываются...

Надо:
1. Создаёшь поток
2. Загружаешь в него данные
3. Копируешь данные в поле
4. Сохраняешь изменения таблицы
5. Разрушаешь поток

Добавлено @ 16:03
Примерно так пишется загрузка данных из поля. (Код писал на вскидку...)
Код

bs:=TMemoryStream.create;
TBlobField(form4.ADOQuery1.FieldByName('фото')).saveToStream(bs);
bs.position:=0;
suiDBImage1.Picture.Graphic.LoadFromStream(bs);
bs.Free;

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