Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.03.2015, 14:09
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию Загрузка и отображение в бд Access

Таблица отображается в dbgrid. Вот код 2 кнопок. Не грузит изображения. Уже по всякому пробывал надоело мучиться с ним. Может поможет кто?

Код:
procedure TForm10.sButton4Click(Sender: TObject);
var
Blob:TMemoryStream;
begin
try
if OpenPictureDialog1.Execute then
begin
ADOQuery1.Edit;
TBLOBField(ADOQuery1.FieldByName('Фото')).LoadFromFile(OpenPictureDialog1.FileName);
ADOQuery1.Post;
ADOQuery1.Refresh;
end;
except
on e:Exception do
end;
end;


procedure TForm10.sButton5Click(Sender: TObject);
var
jpg:TJPEGImage;
Blob:TMemoryStream;
bmp:TBitmap;
begin
try
bmp:=TBitmap.Create;
jpg:=TJPEGImage.Create;
ADOQuery1.First;
Blob:=TADOBlobStream.Create(TBlobField(ADOQuery1.FieldByName('Фото')),bmRead);
jpg.LoadFromStream(Blob);
DBImage1.Picture.Assign(jpg);
 ADOQuery1.Post;
ADOQuery1.Refresh;
jpg.Free;
Blob.Free;
bmp.Free;
except
on e:Exception do
begin
jpg.Free;
Blob.Free;
bmp.Free;
end;
end;
end;
Ответить с цитированием
  #2  
Старый 11.03.2015, 22:53
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Не уверен, что вообще у вас получится отобразить jpg через DBImage1. Методы для отображения JPG есть только у TImage. Вот в него и отображайте из базы текущее значение поля примерно так:
Код:
procedure TForm32.ADOTable1AfterPost(DataSet: TDataSet);
var
  Jpg: TJPEGImage;
begin
 if DataSet['Picture'] = null then Exit;
 Jpg  := TJpegImage.Create;
 Jpg.LoadFromStream(TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName('Picture')), bmRead));
 Image1.Picture.Bitmap.Assign(Jpg);
 Jpg.Free;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Вовайн (12.03.2015)
  #3  
Старый 12.03.2015, 11:18
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Не уверен, что вообще у вас получится отобразить jpg через DBImage1. Методы для отображения JPG есть только у TImage. Вот в него и отображайте из базы текущее значение поля примерно так:
Код:
procedure TForm32.ADOTable1AfterPost(DataSet: TDataSet);
var
  Jpg: TJPEGImage;
begin
 if DataSet['Picture'] = null then Exit;
 Jpg  := TJpegImage.Create;
 Jpg.LoadFromStream(TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName('Picture')), bmRead));
 Image1.Picture.Bitmap.Assign(Jpg);
 Jpg.Free;
end;
ADODataSet1: filed фото not found
Ответить с цитированием
  #4  
Старый 12.03.2015, 18:58
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вот пример из DRKB для загрузки\выгрузки блобом *.jpg, только предварительно напихайте в табличку несколько картинок и потом пощёлкайте мышой по записям
Вложения
Тип файла: zip ImgBlob.zip (8.9 Кбайт, 5 просмотров)
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Вовайн (12.03.2015)
  #5  
Старый 12.03.2015, 19:13
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Вот пример из DRKB для загрузки\выгрузки блобом *.jpg, только предварительно напихайте в табличку несколько картинок и потом пощёлкайте мышой по записям
Не работает. Даже если настроить все компоненты.

А не работает, спасибо)

Последний раз редактировалось Вовайн, 12.03.2015 в 19:21.
Ответить с цитированием
  #6  
Старый 12.03.2015, 19:23
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Тогда вот образец компилянта под D7, у меня оно работает, а у вас?
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Вовайн (13.03.2015)
  #7  
Старый 12.03.2015, 19:56
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Тогда вот образец компилянта под D7, у меня оно работает, а у вас?
Так работает, разобрался но вот у меня по другому немного. Не хочет работать.

Тут изменял. Что то не так может?

Код:
 ADOTable1.ConnectionString:= 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' +
  ExtractFileDir(ParamSTR(0)) + '\База.accdb;' +
  'Mode=ReadWrite;Persist Security Info=false';
 ADOTable1.Active:= true;
Ответить с цитированием
  #8  
Старый 12.03.2015, 19:59
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Могу свой проект скинуть, но у меня в xe7 и с alpha skin.
Ответить с цитированием
  #9  
Старый 12.03.2015, 20:19
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да у вас похоже неправильно текущий акцессовский провайдер задан - посмотрите что система использует, его и вписывайте
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Вовайн (13.03.2015)
  #10  
Старый 13.03.2015, 09:31
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Да у вас похоже неправильно текущий акцессовский провайдер задан - посмотрите что система использует, его и вписывайте
Ну у меня база в .accdb провайдер правильно выбран, все таблицы связанные работают же. Только там я не кодом писал, в datasourse настраивал.
Ответить с цитированием
  #11  
Старый 13.03.2015, 15:59
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Здесь простая система - берётся коннектстрока от datasourse и вместо статического пути к базе задаётся динамический с помощью ParamSTR(0), это чтоб папку таскать можно было в разные места на машинке без ошибок при запуске, проверьте ещё раз путь к accdb-файлу
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Вовайн (13.03.2015)
  #12  
Старый 13.03.2015, 19:21
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Здесь простая система - берётся коннектстрока от datasourse и вместо статического пути к базе задаётся динамический с помощью ParamSTR(0), это чтоб папку таскать можно было в разные места на машинке без ошибок при запуске, проверьте ещё раз путь к accdb-файлу
Путь стоит просто название базы с расширением, без пути. База в той же папке, где и проект

Последний раз редактировалось Вовайн, 13.03.2015 в 19:49.
Ответить с цитированием
  #13  
Старый 15.03.2015, 14:17
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Совсем другим способом получилось)
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025