|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Вопрос по поводу DBImage
Здравствуйте все)
Вопрос возник такой. Есть база данных в Access. Она подключена к программе через ADO. На форме стоит DBLookupComboBox и он связан с таблицей. Так же стоит DBMemo который связан с той же таблицей. Когда я выбираю в комбобоксе (1 столбец в таблице) значение, то автоматически в дбмемо появляется то что написано во втором столбце этой же строки (у них один и тот же DataSourse, только поля разные). А теперь хочу поставить на форму DBImage и связать его с третьим столбцом в тойже таблице. По задумке, выбираешь в DBLookupComboBox строчку, рядом появляется описание и картинка. Но когда связываю то выскакивает ошибка: bitmap image is not valid. Изображение точно bitmap и 24 бита (вроде такое должно быть). Поле в таблице в Ацессе - ОLE. Помогите пожалуста. |
#2
|
||||
|
||||
Так надо:
Код:
var Bmp: TBitmap; BS: TADOBlobStream; begin BS:= TADOBlobStream.Create(FIELВ_NAME, bmRead); Bmp:= TBitmap.Create; Bmp.LoadFromStream(BS); DBImage1.Picture.Graphic:= Bmp; Bmp.Free; BS.Free; |
#3
|
||||
|
||||
Цитата:
А в какую процедуру вставлять этот код? у меня ведь нет отдельной процедуры для DBImage Вот весь код моей программы. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, TabNotBk, Grids, DBGrids, DB, ADODB, DBCtrls, StdCtrls, ExtCtrls, Buttons, Mask; type TForm1 = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; File2: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; ADOConnection1: TADOConnection; ADOTable1: TADOTable; DataSource1: TDataSource; DataSource2: TDataSource; ADOTable2: TADOTable; ADOTable3: TADOTable; DataSource3: TDataSource; ADOTable4: TADOTable; DataSource4: TDataSource; ADOTable5: TADOTable; DataSource5: TDataSource; ADOQuery1: TADOQuery; PageControl1: TPageControl; TabSheet1: TTabSheet; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; DBLookupComboBox1: TDBLookupComboBox; DBMemo1: TDBMemo; DBLookupComboBox2: TDBLookupComboBox; DBLookupComboBox3: TDBLookupComboBox; DBLookupComboBox4: TDBLookupComboBox; BitBtn1: TBitBtn; Edit1: TEdit; Panel1: TPanel; Edit2: TEdit; TabSheet2: TTabSheet; DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; TabSheet3: TTabSheet; TabSheet4: TTabSheet; DBLookupComboBox5: TDBLookupComboBox; DBLookupComboBox6: TDBLookupComboBox; ADOTable6: TADOTable; ADOTable7: TADOTable; DataSource6: TDataSource; DataSource7: TDataSource; Label8: TLabel; Label9: TLabel; ComboBox1: TComboBox; Label10: TLabel; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Label11: TLabel; DBLookupComboBox7: TDBLookupComboBox; Label12: TLabel; Button1: TButton; Button2: TButton; Edit3: TEdit; ADOTable8: TADOTable; DataSource8: TDataSource; DBGrid2: TDBGrid; DBNavigator2: TDBNavigator; GroupBox3: TGroupBox; Edit4: TEdit; Label13: TLabel; Button3: TButton; Label14: TLabel; Edit5: TEdit; Button4: TButton; ComboBox2: TComboBox; Label15: TLabel; DBGrid3: TDBGrid; DBGrid4: TDBGrid; ComboBox3: TComboBox; ComboBox4: TComboBox; DBImage1: TDBImage; procedure Exit1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ComboBox2Select(Sender: TObject); procedure ComboBox3Select(Sender: TObject); procedure ComboBox4Select(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Exit1Click(Sender: TObject); begin Close end; procedure TForm1.BitBtn1Click(Sender: TObject); var str:string; begin ADOQuery1.SQL.Clear; str:='insert into [Таблица заказов] ([Код],[Платформа],[Процессор],[Память],[Жесткий диск],[Контроллеры],[ОС],[ФИО],[Дополнительная гарантия]) values('''+Edit1.Text+''','''+ DBLookupComboBox1.Text+''', '''+ DBLookupComboBox2.Text+''','''+ DBLookupComboBox3.Text+''','''+ DBLookupComboBox4.Text+''','''+ DBLookupComboBox5.Text+''','''+ DBLookupComboBox6.Text+''','''+ Edit2.Text+''','''+ ComboBox1.Text+''')'; ADOQuery1.SQL.Add(str); ADOQuery1.ExecSQL; ADOTable5.close; ADOTable5.open; application.MessageBox('Заказ внесен в базу данных','Заказ',MB_OK); end; procedure TForm1.Button1Click(Sender: TObject); begin with ADOQuery1 do begin ADOQuery1.Close; SQL.Clear; ADOQuery1.SQL.Add('SELECT *'); ADOQuery1.SQL.Add('FROM [Таблица заказов]'); ADOQuery1.SQL.Add('WHERE [Код]='+Edit3.Text); ADOQuery1.Open; end; end; procedure TForm1.Button2Click(Sender: TObject); var str:string; begin ADOQuery1.SQL.Clear; str:='delete from [Таблица заказов] Where Код='''+DBLookupComboBox7.Text+''''; ADOQuery1.SQL.Add(str); ADOQuery1.ExecSQL; ADOTable5.close; ADOTable5.open; end; end. |
#4
|
||||
|
||||
Предлагаю вам все- таки создать отдельную процедуру. OnDataChnge от DataSource, думаю, подойдет.
|
#5
|
||||
|
||||
Цитата:
Получилось вот так: Код:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); var Bmp: TBitmap; BS: TADOBlobStream; begin BS:= TADOBlobStream.Create(ADOTable1.FieldByName('Картинка'), bmRead); Bmp:= TBitmap.Create; Bmp.LoadFromStream(BS); DBImage1.Picture.Graphic:= Bmp; Bmp.Free; BS.Free; end; Поискала ещё варианты нашла похожий на тот, который Вы прделожили. Попробовала так: Код:
var Bmp: TBitmap; BS: TADOBlobStream; begin try BS:= TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName('Картинка')), bmRead); BS.Seek(82, soFromBeginning); Bmp:= TBitmap.Create; Bmp.LoadFromStream(BS); DBImage1.Picture.Graphic:= Bmp; finally Bmp.Free; BS.Free; end; end; 'BS' might not have initialized |
#6
|
||||
|
||||
Попробуй етот компонент : http://ifolder.ru/16712736
|
#7
|
||||
|
||||
Этот компонент устанавливается как-то криво. Я попробовала с MyDBImage - тоже самое.
Кстати, если код выглядит так: Код:
var Bitmap: TBitmap; BS: TADOBlobStream; begin BS := nil; Bitmap:= nil; try BS:= TADOBlobStream.Create(TBlobField(ADOTable1.FieldByName('Картинка')), bmRead); BS.Seek(82, soFromBeginning); Bitmap:= TBitmap.Create; Bitmap.LoadFromStream(BS); MyDBImage1.Picture.Graphic:= Bitmap; finally Bitmap.Free; BS.Free; end; end; |
#8
|
||||
|
||||
Ага, точно про TBlobField забыл.
Цитата:
|