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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 07:14   #1
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка Image form Access to DBImage

Здравствуите
подскажите пожалуста как загрузить картинку из базы access в DBImage,
картинки у меня как такавои нет, она где то в нутри базы, в ячеике таблич,
есть только ее название, например DSCI1317.JPG
смотрю примеры из интернета, но на практике применить как то не выходит

Код:
    ADOQuery1.Active:=False;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('SELECT * FROM ОФ_ГП Where (№Пропуска Like "'+IDstr+'");');
    ADOQuery1.Active:=True;
    if DataSource1.DataSet.FieldByName('№Пропуска').AsString <> '' then
    begin
      DBEdit1.DataField := 'ФИО';
      DBEdit2.DataField := 'Место_службы';
      DBImage1.DataField := 'Фото';
Stream read error
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 14.04.2011, 12:08   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Посмотрите ссылку на английском
http://delphi.about.com/od/database/l/aa030601a.htm
До свидания
P.S. Думаю google -> "language tools" пользоваться умеете?
P.P.S. Здесь как раз и объясняется почему из Access нельзя "в лоб" прочитать картинку.

Последний раз редактировалось OlegVE; 14.04.2011 в 13:15.
OlegVE вне форума Ответить с цитированием
Старый 14.04.2011, 13:10   #3
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Насколько я помню DBImage работает только с bmp форматом. С jpg нужно работать ручками. А это уже не раз обсуждалось на форуме. Например здесь

Последний раз редактировалось Баламут; 14.04.2011 в 13:15.
Баламут вне форума Ответить с цитированием
Старый 15.04.2011, 17:07   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

все что не пробую не выходит, хочу либо загрузить изображение в базу либо наоборот, но увы
кто нибудь может показать пример создания столбца в таблице в которыи можно загрузить и загрузить картинку, лучше бмп
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 15.04.2011, 17:21   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Открываю Access (2003) - читаю, что допускаются только текстовые BLOB-поля до 65535 символов. О какой записи jpg идет речь? Разве что закодированое в BASE64. А может более поздние версии уже поддерживают двоичные BLOB-поля?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.04.2011, 17:29   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

у меня есть аксес база в которои загружены жпг изображения, в 2007 версие
*.accdb
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 15.04.2011, 20:51   #7
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Код:
procedure TFormMMM.ShowImage(aDataSet: TDataSet; aField: TField);
var
 aG: TGraphic;
begin
  aG :=  StreamToCraphic(aDataSet.CreateBlobStream(aField,  bmRead));
  if AG <> nil then
    try
      //Делаем всё, что нам заблагорассудится, например
      Canvas.FillRect(FMemoSQLExecute.ClientRect);
      Canvas.Draw(0,0, aG);
    finally
      aG.Free;
    end;
end;
ReportCube вне форума Ответить с цитированием
Старый 15.04.2011, 21:29   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

решил таким способом
Код:
  ADOQuery1.SQL.Add('CREATE TABLE ClientList(ID_ INT, Photo_ IMAGE);'); // создание таблицы и столбца для хранения изображения
  ADOQuery1.Edit; // редактируем ADO
  if OpenPictureDialog1.Execute then
  begin
    // для работы с НЕ БМП, нужно конвертировать
    TBlobField(ADOQuery1.FieldByName('Photo_')).LoadFromFile(OpenPictureDialog1.FileName); // загружаем в ADO
  end;
  ADOQuery1.Post; // сохраняем
...
  DBImage1.DataField := 'Photo_'; // загружаем в DBImage
а вот конвертер, может кому пригодица,
переводит в BMP и загружает в Stream все форматы которые можно здагрузить в TImage
Цитата:
*.png;*.gif;*.png;*.jpg;*.jpeg;*.bm p;*.tif;*.tiff;*.ico;*.emf;*.wmf
Код:
procedure TForm4.Button1Click(Sender: TObject);
var
  ConverterLoad: TImage;
  ConverterSave: TBitmap;
  ConverterStream: TMemoryStream;
begin
  if OpenPictureDialog1.Execute then
  begin
    ConverterSave := TBitmap.Create;
    ConverterSave.Height := 300; // от размера зависит качество
    ConverterSave.Width := 300;
    ConverterLoad := TImage.Create(Self);
    ConverterLoad.Name := 'ImageConverter';
    ConverterLoad.Picture.LoadFromFile(OpenPictureDialog1.FileName);
    ConverterSave.Canvas.StretchDraw(ConverterSave.Canvas.ClipRect,ConverterLoad.Picture.Graphic); // BMP готов
    DBImage1.Picture.Bitmap := ConverterSave;
    ConverterStream := TMemoryStream.Create;
    ConverterSave.SaveToStream(ConverterStream); // изображение в Stream
    TBlobField(Form3.ADOQuery1.FieldByName('Photo_')).LoadFromStream(ConverterStream);
    ConverterLoad.Free;
    ConverterSave.Free;
  end;
end;
VirusN13

Последний раз редактировалось ArtGrek; 16.04.2011 в 04:55.
ArtGrek вне форума Ответить с цитированием
Старый 16.04.2011, 05:01   #9
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

но остался такои вопрос,
если програмно загрузить картинку(бмп) в базу а потом прочесть, все нормально,
но если она уже туда загружена через сам аксес, то не загружаеца, как и не открываеца в аксесе если загрузить програмно
базы изучаю ток недели 2, так что по возможности простыми словами, поясните, что делать что б не возникало проблем
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 24.01.2012, 19:44   #10
myg
 
Регистрация: 22.12.2011
Сообщений: 7
Печаль

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
но остался такои вопрос,
если програмно загрузить картинку(бмп) в базу а потом прочесть, все нормально,
но если она уже туда загружена через сам аксес, то не загружаеца, как и не открываеца в аксесе если загрузить програмно
базы изучаю ток недели 2, так что по возможности простыми словами, поясните, что делать что б не возникало проблем
Вы, наверное, за это время уже со всем разобрались, может мне кто поможет? Научилсо загружать JPG из поля Attachment базы .accdb в Image.

Цитата:
Цитата:
procedure TForm1.PictureShow();
var
Stream : TStream;
JPG :TJpegImage;
s: string;
begin

if ADODataSet2.FieldByName('Foto.FileN ame').AsString = '' then
begin
DBIMage1.Picture.Assign(Image1.Pict ure);
end else
begin
if ADODataSet2.FieldByName('Foto.FileT ype').AsString <> 'jpg' then
begin
ShowMessage('Поддерживаетсо только JPG формат');
Exit;
end;
Stream:=ADODataSet2.CreateBlobStrea m(ADODataSet2.FieldByName('Foto.Fil eData'), bmRead);
if Stream.Size > 0 then
begin
Stream.Seek(JpegStartsInBlob(ADODat aSet2.FieldByName('Foto.FileData') as TBlobField),soFromBeginning);
JPG:=TJPEGImage.Create;
JPG.LoadFromStream(Stream);
Stream.Free;
try
DBIMage1.Picture.Assign(JPG);
finally
JPG.Free;
end;
end;
end;
end;
Предварительно вычислив смещение изображения в потоке.

Кто подскажет обратную операцию, те добавить (сохранить) Image в поле Attachment базы .accdb?
И пока не могу удалить одну фоту из поля не удалив всей записи. Может у кого есть ссылка на работу с .accdb из Delphi ? Ничего не могу найти.
myg вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли подключить к web form windows form? Manonia Windows Forms 0 20.10.2010 05:28
image из Access в делфи. TheForever БД в Delphi 0 27.03.2010 18:06
Form.Show в Form.Create UnD)eaD)Snake Общие вопросы Delphi 6 07.09.2007 11:13