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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2009, 02:53   #1
IceExecutioner
Пользователь
 
Аватар для IceExecutioner
 
Регистрация: 04.06.2009
Сообщений: 26
Восклицание по поводу изображений в БД

Всем доброго времени суток. У меня есть БД на Access в нём имеется поле ('Картинка') в котором загружено изображение формата bmp. Требуется вытащить его от туда и поместить в Image1. Я пробовал разными способами на всегда вылазиет ошибка
Bitmap image is not valid
помогите разобраться в чём дело.
Способы которым я пытался сделать это:
1)
Код:
Image1.Picture.Assign(frDM.ADOQuery1.FieldByName('Картинка'))
2)
Код:
var
ImgStream:TMemoryStream;
begin
frDM.ADOQuery1.Close;
frDM.ADOQuery1.SQL.Text:='SELECT * FROM Table1';
frDM.ADOQuery1.Open;
frDM.ADOQuery1.First;
ImgStream:=TMemoryStream.Create;
(frDM.ADOQuery1.FieldByName('Картинка') as TBlobField).SaveToStream(ImgStream);
ImgStream.Position:=0;
Image1.Visible:=True;
ImgStream.Free;
3)прикрутить dbimage к полю
Вот бд которую я использую http://slil.ru/27755503
IceExecutioner вне форума Ответить с цитированием
Старый 15.06.2009, 05:57   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Так пишем картинку в БД
Код:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
  jpg: TJPegImage;
  ms: TMemoryStream;
begin
   ADOTable1.Edit;
   ADOTable1.Append;
   jpg := TJpegImage.Create;
   jpg.Assign(Image1.Picture.Graphic);
   jpg.CompressionQuality := 20;
   jpg.Compress;
   ms := TMemoryStream.Create;
   jpg.SaveToStream(ms);
   (ADOTable1.FieldByName('aPic') as tBlobField).LoadFromStream(ms);
   ADOTable1.Post;
end;
Так читаем оттуда
Код:
procedure TForm1.BtnInsertImageClick(Sender: TObject);
var
  jpg: TJpegImage;
  ms: TStream;
begin
  jpg := TJpegImage.Create;
  ms := (ADOTable1.CreateBlobStream(TBlobField(ADOTable1aPic), bmRead));
  jpg.LoadFromStream(ms);
  Image1.Picture.Bitmap.Assign(jpg);
  jpg.Free;
  ms.Free;
end;
Здесь я привожу пример для случая с jpg. Думаю переделать это для bmp не составит большого труда. Хотя я бы не стал, ибо база начнет пухнуть с бешенной скоростью.
Баламут вне форума Ответить с цитированием
Старый 27.01.2010, 18:37   #3
ViNcHeStEr
Delphi
Форумчанин
 
Регистрация: 12.06.2008
Сообщений: 137
По умолчанию

Запись картинки в базу
В Access поле Image имеет тип "Поле объекта OLE".
ADOTable1Image -> BlobType=ftBlob
Делаю всё как написано, но ругается на эту строчку:
Код:
(dm.ADOTable1.FieldByName('Image') as tBlobField).LoadFromStream(ms);
а конкретно на tBlobField.
=================
Ещё пытался сделать так, но в базу ничего не записывает:
Код:
dm.ADOTable1Image.LoadFromStream(ms);
Подскажите как сделать правильно.
ViNcHeStEr вне форума Ответить с цитированием
Старый 27.01.2010, 19:38   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте для сохранения мой способ:
Код:
procedure TFMain.BitBtn1Click(Sender: TObject);
begin
Clipboard.Assign(Image1.Picture);
FDM1.TKartFoto.BlobType:=ftBlob;
FDM1.TKart.Edit;
DBImage1.PasteFromClipboard;
FDM1.TKart.Post;
FDM1.TKart.Refresh;
DBImage1.Repaint;
end;
и почитайте на форуме про работу с блобами (поиск вам поможет).
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По-поводу Static volnixx PHP 3 11.03.2009 12:04
Не пойму по поводу Windows Jantar Windows 19 24.02.2009 08:20
Вопросы по поводу edit`ов Lemo Общие вопросы Delphi 15 04.02.2009 16:29
по поводу привода Nixtone Помощь студентам 1 14.12.2007 22:08
по поводу wap чата Simply-Art PHP 2 15.07.2007 15:58