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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2009, 22:51   #1
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию Paradox и TImage

Есть таблица в которой хранится ИД картинки и сама картинка. Нужно по нажатию на кнопку вставить эту картинку в TImage.
Вопрос как присвоить Image картинку из базы?
И как потом из этого же Image добавить в базу картинку?
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 13.11.2009, 09:19   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Вопрос как присвоить Image картинку из базы?
Как-то примерно так (пишу на работе, Delphi нет под рукой, проверить не могу):
Код:
 Image1.Bitmap.LoadFromFile(Table1.FieldByName('Картинка'));
Цитата:
И как потом из этого же Image добавить в базу картинку?
Чтобы это сделать, нужно, чтобы поле в таблице БД объявлено как BLOB. Ну, а как загружать картинку из/в БД уже много раз обсуждалось на форму. Наберите в поиске "BLOB" или "BLOB Paradox" и курите
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 13.11.2009, 22:00   #3
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Тогда еще вопрос, можно ведь только BMP добавлять? А возможно ли добавить PNG?
И Ваш вариант, кстати, не работает из-за несовместимости данных String и TFild.
Шипулин А. В.

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

Здесь всё как и в статье с сайта Borland.

Чтение из БД в TImage выглядит так:

Код:
uses ..., JPEG, RxGIF;
...
procedure TfmMain.ShowPicture;
var
  S: TStream;
  Code: Word;
begin
  //Процедура показывает изображение, а если его нет в базе, стирает TImage
  if Assigned(Image1.Picture.Graphic) then
    Image1.Picture := nil;
  if not ADODataSet1.FieldByName('GRAPHIC').IsNull then
  begin
    S := ADODataSet1.CreateBlobStream(ADODataSet1.FieldByName('GRAPHIC'), bmRead);
    try
      S.Read(Code, SizeOf(Code));
      S.Seek(0, 0);
      case Code of
      $4D42:
      begin
        Image1.Picture.Graphic := TBitmap.Create;
        Image1.Picture.Graphic.LoadFromStream(S);
      end;
      $D8FF:
      begin
        Image1.Picture.Graphic := TJPEGImage.Create;
        Image1.Picture.Graphic.LoadFromStream(S);
      end;
      $4947:
      begin
        Image1.Picture.Graphic := TGIFImage.Create;
        Image1.Picture.Graphic.LoadFromStream(S);
      end;
      end;
    finally
      S.Free;
    end;
  end;
end;
А вот сохранение из БД в файл:

Код:
procedure TfmMain.btnSaveClick(Sender: TObject);
var
  S: TStream;
  FileS: TFileStream;
  Code: Word;
begin
  //Процедура сохраняет изображение в файл в зависимости от его формата
  if not ADODataSet1.FieldByName('GRAPHIC').IsNull then
  begin
    S := pFIBDataSet1.CreateBlobStream(ADODataSet1.FieldByName('GRAPHIC'), bmRead);
    try
      S.Read(Code, SizeOf(Code));
      S.Seek(0, 0);
      case Code of
      $4D42:
      begin
        SaveDialog1.Filter := 'Bitmap (*.bmp)|*.bmp';
        SaveDialog1.DefaultExt := 'bmp';
      end;
      $D8FF:
      begin
        SaveDialog1.Filter := 'Файл изображений JPEG (*.jpg)|*.jpg';
        SaveDialog1.DefaultExt := 'jpg';
      end;
      $4947:
      begin
        SaveDialog1.Filter := 'Изображение CompuServe GIF (*.gif)|*.gif';
        SaveDialog1.DefaultExt := 'gif';
      end;
      end;
      if SaveDialog1.Execute then
        if FileExists(SaveDialog1.FileName) then
          FileS := TFileStream.Create(SaveDialog1.FileName, fmOpenWrite)
        else
          FileS := TFileStream.Create(SaveDialog1.FileName, fmCreate);
        try
          FileS.CopyFrom(S, S.Size);
        finally
          FileS.Free;
        end;
    finally
      S.Free;
    end;
  end;
end;
Здесь для поддержки формата jpg использован стандартный модуль Delphi Jpeg, а для поддержки формата gif пришлось использовать библиотеку компонентов Rx (модуль RxGIF).

Используя такой подход, можно вообще-то преобразовывать изображения в bmp и хранить их в БД в едином формате. Тогда надо определять формат изображения при загрузке его из файла, преобразовывать в bmp и потом сохранять в БД.

Преобразовывать так:

Код:
var
  J: TJPEGImage;
...
Image1.Picture.Bitmap.Assign(J);
З.Ы. Все это есть в DFaq...
Немного модернизируете под себя и все.
mihali4 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Paradox thourie БД в Delphi 1 07.12.2008 02:24
Delphi+Paradox Any БД в Delphi 8 22.07.2008 07:46
Портативность Paradox DB Veiron БД в Delphi 2 12.05.2008 19:21
Таблицы Paradox Help User77 Помощь студентам 2 12.02.2008 17:15
Работа с БД Paradox Алёна БД в Delphi 1 11.03.2007 15:54