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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.06.2009, 16:29
Аватар для IceExecutioner
IceExecutioner IceExecutioner вне форума
Прохожий
 
Регистрация: 04.06.2009
Сообщения: 10
Репутация: 10
По умолчанию по поводу изображений в БД

Всем доброго времени суток. У меня есть БД на Access в нём имеется поле ('Картинка') в котором загружено изображение формата bmp. Требуется вытащить его от туда и поместить в Image1. Я пробовал разными способами на всегда вылазиет ошибка
Bitmap image is not valid
помогите разобраться в чём дело.
Способы которым я пытался сделать это:
1)
Код:
Image1.Picture.Assign(frDM.ADOQuery1.FieldByName('Картинка'))
2)
Код:
var
ImgStream:TMemoryStream;
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;
Ответить с цитированием
Этот пользователь сказал Спасибо IceExecutioner за это полезное сообщение:
Admin (01.10.2013)
  #2  
Старый 13.06.2009, 16:36
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Все намного проще. Для отображения картинок из базы данных используйте компонент DBImage. Укажите для него DataSource и DataField и все.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.06.2009, 02:48
Аватар для IceExecutioner
IceExecutioner IceExecutioner вне форума
Прохожий
 
Регистрация: 04.06.2009
Сообщения: 10
Репутация: 10
По умолчанию

та же херня Bitmap image is not valid я приложу бд свою
http://slil.ru/27755503
на всякий случай
Ответить с цитированием
  #4  
Старый 14.06.2009, 04:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Где-то я читал, что акцесс при записи картинки добавляет несколько байт от себя и это мешает нормально картинки читать в TDBImage.
И наоборот, картинка вставленная извне нехочет отображается акцесом. Здесь наблюдается очень похожая картина. Так-что видимо вам придется заново обновить данные, но уже из под Дельфи.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 19.06.2009, 11:36
Tania Tania вне форума
Прохожий
 
Регистрация: 19.06.2009
Сообщения: 1
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
вам придется заново обновить данные, но уже из под Дельфи.

А можно поподробнее, как вставить картинку из под Делфи в Access?
Ответить с цитированием
  #6  
Старый 19.06.2009, 13:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

вот вам примерчик, как это можно сделать:
Код:
unit Unit8;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtDlgs, ExtCtrls, DBCtrls, StdCtrls, DB, Grids, DBGrids, DBClient;

type
  TForm8 = class(TForm)
    DataSource1: TDataSource;
    DBImage1: TDBImage;
    DBGrid1: TDBGrid;
    Button1: TButton;
    DBNavigator1: TDBNavigator;
    OpenPictureDialog1: TOpenPictureDialog;
    ClientDataSet1: TClientDataSet;
    ClientDataSet1ID: TAutoIncField;
    ClientDataSet1Photo: TBlobField;
    ClientDataSet1FileName: TStringField;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form8: TForm8;

implementation

{$R *.dfm}

procedure TForm8.Button1Click(Sender: TObject);
begin
 if not OpenPictureDialog1.Execute then Exit;
 ClientDataSet1.Append;
 ClientDataSet1.FieldValues['FileName'] := OpenPictureDialog1.FileName;
 DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
 ClientDataSet1.Post;
end;

end.

DFM-файл
Код:
object Form8: TForm8
  Left = 0
  Top = 0
  Caption = 'Form8'
  ClientHeight = 289
  ClientWidth = 537
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBImage1: TDBImage
    Left = 368
    Top = 8
    Width = 161
    Height = 161
    DataField = 'Photo'
    DataSource = DataSource1
    TabOrder = 0
  end
  object DBGrid1: TDBGrid
    Left = 8
    Top = 8
    Width = 354
    Height = 257
    DataSource = DataSource1
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
    Columns = <
      item
        Expanded = False
        FieldName = 'ID'
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'Photo'
        Visible = False
      end
      item
        Expanded = False
        FieldName = 'FileName'
        Width = 272
        Visible = True
      end>
  end
  object Button1: TButton
    Left = 416
    Top = 175
    Width = 75
    Height = 25
    Caption = 'Load'
    TabOrder = 2
    OnClick = Button1Click
  end
  object DBNavigator1: TDBNavigator
    Left = 8
    Top = 269
    Width = 200
    Height = 18
    DataSource = DataSource1
    TabOrder = 3
  end
  object DataSource1: TDataSource
    DataSet = ClientDataSet1
    Left = 152
    Top = 80
  end
  object OpenPictureDialog1: TOpenPictureDialog
    Left = 432
    Top = 72
  end
  object ClientDataSet1: TClientDataSet
    Active = True
    Aggregates = <>
    Params = <>
    Left = 96
    Top = 80
    Data = {
      900000009619E0BD010000001800000003000000000003000000900002494404
      0001000000010007535542545950450200490008004175746F696E6300055068
      6F746F04004B0000000100075355425459504502004900070042696E61727900
      0846696C654E616D65010049000000010005574944544802000200640001000C
      4155544F494E4356414C55450400010001000000}
    object ClientDataSet1ID: TAutoIncField
      FieldName = 'ID'
    end
    object ClientDataSet1Photo: TBlobField
      FieldName = 'Photo'
    end
    object ClientDataSet1FileName: TStringField
      FieldName = 'FileName'
      Size = 100
    end
  end
end
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter