Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / -1 / 0
Регистрация: 19.02.2015
Сообщений: 60
MS Access

Выгрузка изображений из бд access 2003 (delphi)

16.02.2016, 18:20. Показов 1827. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, много времени пыхтел, так и не смог разобраться, проблема в следующем:

Добавлено через 9 минут
Здравствуйте, много времени пыхтел, так и не смог разобраться, проблема в следующем:
Пытаюсь выгрузить изображение из бд Access 2003( пробовал jpg, jpeg, bmp картинки). Выгружаю в dbimage или image не имеет значение.
Не могу понять как именно работает Adoquery. Смотрел кучу примеров, и нигде не запрашивают при помощи sql запросов, а просто обращаются к полю. Код
компилируется. Ошибка выходит на блоке Try он тупо проскакивает его. То есть проблема в загрузке потока... а как решить не знаю:C прошу помощи!
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
procedure TForm2.Button3Click(Sender: TObject);
var
  Stream: TMemoryStream;
  Jpg: TJpegImage;
  GraphType: TGraphType;
  i:integer;
  s1:string;
begin
settings:=tinifile.Create(ExtractFilePath(Application.ExeName)+'settings.ini');
  Jpg := nil;
  Stream := nil;
  s1:=settings.readstring('index','id_selected_user','');
showmessage('i= '+s1);
i:=strtoint(s1)  ;
  try
  adoquery1.SQL.Clear;
  adoquery1.sql.Add('SELECT photo FROM tabl2 WHERE id='+inttostr(i));
    Stream := TMemoryStream.Create;
    TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(Stream);
    if Stream.Size > 0 then
    begin
      Stream.Position := 0;
      Stream.Read(GraphType, 1);
      case GraphType of
        gtBitmap: begin  image1.Picture.Bitmap.LoadFromStream(Stream); dbimage1.Picture.bitmap.LoadFromStream(stream); showmessage('Поздравляем, у вас BMP') end;
        gtIcon:   begin   image1.Picture.Icon.LoadFromStream(Stream); dbimage1.Picture.icon.LoadFromStream(stream);showmessage('Поздравляем, у вас Icon') end;
        gtMetafile: BEGIN image1.Picture.Metafile.LoadFromStream(Stream); dbimage1.Picture.Metafile.LoadFromStream(stream); showmessage('Поздравляем, у вас Метафайл'); end;
        gtJpeg:
        begin
          Jpg := TJpegImage.Create;
          Jpg.LoadFromStream(Stream);
          image1.Picture.Assign(Jpg);
          dbimage1.Assign(Jpg);
          showmessage('Поздравляем, у вас JPEG');
        end
        else
          begin
          IMAGE1.Picture.Assign(nil);  // очистить фото
          dbIMAGE1.Picture.Assign(nil);
          showmessage('Короче формата картинки такого не существует, Йода завещал!!!');
          end;
      end;
    end
    else
      begin
      showmessage('размер потока равен 0, ищи где ошибка! Ошибка из блока Try' );
      IMAGE1.Picture.Assign(nil);
      dbIMAGE1.Picture.Assign(nil);
      end;
  except
    showmessage('Всё тлен, сразу перекинуло на конец блока try');
    IMAGE1.Picture.Assign(nil);
    dbIMAGE1.Picture.Assign(nil);
  end;
  jpg.Free;
  Stream.Free;
  settings.Free;
end;
Нужно делать данный запрос?
Delphi
1
2
adoquery1.SQL.Clear;
  adoquery1.sql.Add('SELECT photo FROM tabl2 WHERE id='+inttostr(i));
И откуда здесь adoquery берет нужную именно мне строку? или он пытается выгрузить все изображения из колонки?
Delphi
1
2
Stream := TMemoryStream.Create;
    TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(Stream);
Добавлено через 4 минуты
забыл

Delphi
1
2
3
4
5
6
7
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB,inifiles, Data.Win.ADODB, Vcl.Grids,
  Vcl.DBGrids, Vcl.StdCtrls, Vcl.DBCtrls, jpeg, Vcl.ExtCtrls,Clipbrd, Vcl.ExtDlgs;
type
TGraphType = (gtBitmap, gtIcon, gtMetafile, gtJpeg);
  TForm2 = class(TForm)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2016, 18:20
Ответы с готовыми решениями:

Нужно ли устанавливать Access 2003, если в Access 2016 итак возможно разрабатывать БД в формате Access 2003?
Здравствуйте! Подскажите пожалуйста, нужно ли устанавливать Access 2003, если в Access 2016 итак возможно разрабатывать БД в формате...

Выгрузка данных из Delphi 7 в БД Access
У меня есть программа тестировки в Delphi 7, я бы хотел сделать так ,что бы в мою БД в определённую таблицу записывались только...

delphi 7+access 2003
Всем доброго времени суток. Проблемы собственно как таковой нет, просто хочу спросить, кто работал с базами в access 2003 с оболочкой в...

7
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,151
Записей в блоге: 3
16.02.2016, 20:27
а в какой строке ты запрос выполняешь?

ты забываешь сделать query.active:=true;
0
0 / -1 / 0
Регистрация: 19.02.2015
Сообщений: 60
17.02.2016, 07:58  [ТС]
рука-лицо.... спасибо!
Проблема с тем что изображения не совпадают с типами данных указанных у меня в коде, сохранилось. Если кто-нибудь знает, подскажите в какую сторону копать

Добавлено через 1 час 56 минут
И еще вопрос, как работает adoquery? я выполняю sql запрос, и данные из поля запроса присваиваются в него, а вытащить их можно только так "adoquery1.fieldbyname(photo) "?
Delphi
1
2
3
adoquery1.SQL.Clear;
  adoquery1.sql.Add('SELECT photo FROM tabl2 WHERE id='+inttostr(i));
 adoquery1.active:=true;
мне почему-то кажется, что вся проблема упирается в то, что когда я заношу данные в поток, то они типа blob становятся, или я что-то не догоняю?
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,151
Записей в блоге: 3
17.02.2016, 08:55
Цитата Сообщение от georgy544 Посмотреть сообщение
как работает adoquery?
http://delphicomponent.ru/81-1... elphi.html

Цитата Сообщение от georgy544 Посмотреть сообщение
когда я заношу данные в поток, то они типа blob становятся, или я что-то не догоняю?
они не становятся, они так хранятся
0
0 / -1 / 0
Регистрация: 19.02.2015
Сообщений: 60
18.02.2016, 06:26  [ТС]
Спасибо, разобрался.
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,151
Записей в блоге: 3
18.02.2016, 08:56
georgy544,
напишите ваш код, для тех кто ищет
0
0 / -1 / 0
Регистрация: 19.02.2015
Сообщений: 60
20.02.2016, 07:24  [ТС]
Проблема в том что я решил её, не совсем так, как надо...) короче, я всё организовал так:
1)Картинка может быть занесена программным способом в БД, только после этого она у меня открывается, она загружается как двоичные данные, такая штука работает к сожалению только с BMP изображениями. Вот код добавления :
Delphi
1
2
3
4
5
                        
 if not OpenPictureDialog1.Execute then exit;
 ADOTable1.Edit;
 TBlobField(ADOTable1.FieldByName('photo')).LoadFromFile(OpenPictureDialog1.FileName);
  ADOTable1.Post;
2) ну а дальше осталось просто связать dbimage с dataset.
Знаю что проблему не решил полностью, но времени нет разбираться. Надеюсь кому-нибудь будет полезно.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
24.02.2016, 13:19
Стандартным форматом отображения картинок в Акцес2003 является битмап, но вы можете сторонним компонентом запихать любой формат данных на чтение и запись данных это никак не влияет, но вот для отображения этих данных вы должны использовать сторонний компонент. Вроде начиная с Акцес 2007 он уже научился показывать Jpg.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2016, 13:19
Помогаю со студенческими работами здесь

delphi + access 2003
кто подскажет хорошую книжку или сайт с понятными картинками для новичков "как сделать,соединить, БД с помощью delphi + access...

Выгрузка данных из полей формы Access 2007 в Word 2007 шаблон dot 1997-2003 гг
Прошу помощи с примером из protokol10. Он завязан на генерацию doc-документа со вставкой содержимого из полей БД в doc-файл при помощи...

Выгрузка данных из БД Access в Word средствами Delphi
Здравствуйте, ребята. У меня возникла следующая проблема. Есть MS Access. Средствами Delphi нужно выгрузить данные из одной из таблиц в...

Формы Access 2003 и Delphi 7
Всем доброго времени суток! У меня вопрос: можно ли открыть в Delphi формы Access'а? Если да, то приведите пример, пожалуйста. Заранее...

Delphi 7, Access 2003, ADO отчеты, запросы
Ребят, нужна помощь по БД Access в Delphi 7, а именно: как сделать отчет в Delphi? Перерыл много форумов, сайтов, но все без толку. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru