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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2010, 22:09   #1
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию Созранение и загрузка изображения

Всем здрасте.

Пытаюсь сохранить картинку в бд, а потом загрузить её оттуда, но ничего не выходит, что не так?

Вот код:

Код:
procedure TfrmMain.btnAddImgClick(Sender: TObject);
var
  Img: TImage;
  MemStream: TMemoryStream;
begin
  if OpenPictureDialog.Execute then
  begin
  IBDataSet.Edit;
  Img := TImage.Create(nil);
  try
    Img.Picture.LoadFromFile(OpenPictureDialog.FileName);
    if Assigned(Img.Picture.Graphic) and (not Img.Picture.Graphic.Empty) then
    begin
      MemStream := TMemoryStream.Create;
      try
        Img.Picture.Graphic.SaveToStream(MemStream);
        MemStream.Position := 0;
        TBlobField(IBDataSet.FieldByName('PICTURE')).LoadFromStream(MemStream);
      finally
        MemStream.Free;
      end;
    end;
  finally
    Img.Free;
  end;
  IBDataSet.Post;
  end;
end;
Код:
procedure TfrmMain.btnLoadImgClick(Sender: TObject);
var
  Img: TImage;
  MemStream: TMemoryStream;
begin
  if Not IBDataSet.FieldByName('PICTURE').IsNull then
  begin
    Img := TImage.Create(nil);
    try
      MemStream := TMemoryStream.Create;
      try
        TBlobField(IBDataSet.FieldByName('PICTURE')).SaveToStream(MemStream);
        Img.Picture.Graphic.LoadFromStream(MemStream);
      finally
        MemStream.Free;
      end;
    finally
      Img.Free;
    end;
  end else
    Application.MessageBox(PChar('Current field is null'), PChar('Information'),
      MB_OK + MB_ICONINFORMATION);
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 02.10.2010, 12:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
TBlobField(IBDataSet.FieldByName('P ICTURE')).LoadFromStream(MemStream) ;
А банально?
Код:
procedure TfrmMain.btnAddImgClick(Sender: TObject);
var
  Img: TImage;
  MemStream: TMemoryStream;
begin
  if OpenPictureDialog.Execute then
  begin
  IBDataSet.Edit;
TBlobField(IBDataSet.FieldByName('PICTURE')).LoadFromFile(OpenPictureDialog.FileName);
  IBDataSet.Post;
  end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2010, 15:31   #3
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Stilet, сделал как ты предложил, но при загрузке всё равно это поле оказывается пустым
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 02.10.2010, 16:13   #4
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
По умолчанию

Как вариант - не хранить изображения напрямую в базе,а хранить ссылки на изображение. Image загружать по ссылке из базы и хранить "рядом" с базой.
P.S.
И всё-таки какой вариант более оптимальный - хранить Images в базе или нет?
Темы для WordPress. Русские WordPress шаблоны

Последний раз редактировалось Alexei91; 02.10.2010 в 16:23.
Alexei91 вне форума Ответить с цитированием
Старый 02.10.2010, 17:06   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Тогда как вариант можно вообще не использовать БД, а всё делать через текстовые файлы, папки с картинками и т.д.

Имхо, конечно лучше всё хранить в одном месте в одной бд, тем более что именно для этого и нужны поля blob
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 02.10.2010, 17:18   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но при загрузке
Даже если использовать DBImage?
У меня большие подозрения что классы Stream-ов косячат здорово. Сам я ими стараюсь не пользоваться.
Цитата:
И всё-таки какой вариант более оптимальный - хранить Images в базе или нет?
Смотря для чего нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2010, 18:25   #7
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
По умолчанию

http://www.delphisources.ru/pages/so...e-paradox.html
- создание Paradox базы в Run-Time. СУБД,ИМХО,не суть важна - общий принцип один фиг 1. В смысле как пример BLOB в БД.
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 03.10.2010, 00:50   #8
palevg
Пользователь
 
Аватар для palevg
 
Регистрация: 03.10.2010
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Alexei91 Посмотреть сообщение
Как вариант - не хранить изображения напрямую в базе,а хранить ссылки на изображение. Image загружать по ссылке из базы и хранить "рядом" с базой.
P.S.
И всё-таки какой вариант более оптимальный - хранить Images в базе или нет?
Вы подсказали топикстартеру чудесный вариант, и тут же сомневаетесь в нём?
Лично я так и делаю: в таблице БД текстовое поле (ссылка на файл-изображение), а рядом с папкой Data (где лежат файлы БД) есть папка Images (с файлами изображений).

Цитата:
Сообщение от Marsel737 Посмотреть сообщение
Имхо, конечно лучше всё хранить в одном месте в одной бд, тем более что именно для этого и нужны поля blob
Это всё хорошо, когда изображений немного (ну, скажем, до 1000). А если счёт пошёл на десятки тысяч? Вы представляете размер одного файла *.MB ?? Да и "поиск" изображения по такому файлу будет затратным по времени. Проверено лично мной, после чего перешёл на способ, описанный выше.
По соотношению цена-качество, халявное пиво не имеет конкурентов.
palevg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузка растрового изображения Serg16361898 Помощь студентам 0 01.06.2010 20:15
Загрузка изображения _-Re@l-_ Общие вопросы Delphi 7 31.05.2010 14:54
Загрузка поврежденного изображения Linel PHP 1 30.05.2010 17:25
Загрузка изображения на сайт KiDoki Работа с сетью в Delphi 3 22.06.2009 21:27
Загрузка изображения JRcoker Мультимедиа в Delphi 15 04.11.2008 18:32