![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Здравствуйте все)
Вопрос возник такой. Есть база данных в 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 забыл.
Цитата:
|