![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение изображения в базе Access [D7, MS Access]
Lex_! © (2005-05-09 08:23:00)+ чтение изображения из файла и показ на форме.
Никто примерчик не подкинет?...
AlexTregubov (2005-05-12 09:31:00) [1]Из БД:
//Вывод фото
try
Bitmap:=TBitmap.Create;
BS:=CreateBlobStream(FieldByName('Foto'), bmRead);
if BS.Size>82 then begin
BS.Seek(82, soFromBeginning);
Bitmap.LoadFromStream(BS);
imgFoto.Picture.Assign(Bitmap);
end else imgFoto.Picture:=nil;
finally
Bitmap.Free;
BS.Free;
end;
Здесь 82 байта служебной информации - чтобы картинки можно было смотреть и через Access
В базу:
//Сохранение картинки в БД
procedure TfrmImageImport.spbSaveClick(Sender: TObject);
const
//Сигнатура точечного рисунка для вставки через OLE
//В начале
sgntB=#21#28#51#0#2#0#0#0#17#0#14#0#20#0#37#0#255#255#255#255#210#238#247#229+
#247#237#251#233#32#240#232#241#243#237#238#234#0#80#97#105#110#116#46#80+
#105#99#116#117#114#101#0#1#5#0#0#2#0#0#0#7#0#0#0#80#66#114#117#115#104+
#0#0#0#0#0#0#0#0#0#64#245#0#0;
//В конце
sgntE=#0#0#0#0#0#0#0#0#0#0#1#5#0#0#0#0#0#0#192#173#5#154;
var
str: string;
bmpSave: TBitmap;
BS: TStream;
begin
with Data.QueryMain do begin
str:='Добавить изображние к записи о "'#13+
FieldByName('Fam').AsString+' '+
FieldByName('Imy').AsString+' '+
FieldByName('Otchest').AsString+'" ?';
if MessageBox(Handle, @str[1],'Внимание!', MB_YESNO or MB_ICONWARNING) = IDYES then begin
Edit;
try
bmpSave:=TBitmap.Create;
bmpSave.Width:=wR; bmpSave.Height:=hR; bmpSave.PixelFormat:=pf24bit;
bmpSave.Canvas.CopyRect(Rect(0,0,wR,hR),bmp.Canvas,Ramka);
BS:=CreateBlobStream(FieldByName('Foto'), bmWrite);
BS.Write(sgntB,82);
bmpSave.SaveToStream(BS);
BS.Write(sgntE,22);
finally
bmpSave.Free;
BS.Free;
end;
Post;
end;
end;
end;
AlexTregubov (2005-05-12 09:30:00) [2]Из БД:
//Вывод фото
try
Bitmap:=TBitmap.Create;
BS:=CreateBlobStream(FieldByName('Foto'), bmRead);
if BS.Size>82 then begin
BS.Seek(82, soFromBeginning);
Bitmap.LoadFromStream(BS);
imgFoto.Picture.Assign(Bitmap);
end else imgFoto.Picture:=nil;
finally
Bitmap.Free;
BS.Free;
end;
Здесь 82 байта служебной информации - чтобы картинки можно было смотреть и через Access
В базу:
//Сохранение картинки в БД
procedure TfrmImageImport.spbSaveClick(Sender: TObject);
const
//Сигнатура точечного рисунка для вставки через OLE
//В начале
sgntB=#21#28#51#0#2#0#0#0#17#0#14#0#20#0#37#0#255#255#255#255#210#238#247#229+
#247#237#251#233#32#240#232#241#243#237#238#234#0#80#97#105#110#116#46#80+
#105#99#116#117#114#101#0#1#5#0#0#2#0#0#0#7#0#0#0#80#66#114#117#115#104+
#0#0#0#0#0#0#0#0#0#64#245#0#0;
//В конце
sgntE=#0#0#0#0#0#0#0#0#0#0#1#5#0#0#0#0#0#0#192#173#5#154;
var
str: string;
bmpSave: TBitmap;
BS: TStream;
begin
with Data.QueryMain do begin
str:='Добавить изображние к записи о "'#13+
FieldByName('Fam').AsString+' '+
FieldByName('Imy').AsString+' '+
FieldByName('Otchest').AsString+'" ?';
if MessageBox(Handle, @str[1],'Внимание!', MB_YESNO or MB_ICONWARNING) = IDYES then begin
Edit;
try
bmpSave:=TBitmap.Create;
bmpSave.Width:=wR; bmpSave.Height:=hR; bmpSave.PixelFormat:=pf24bit;
bmpSave.Canvas.CopyRect(Rect(0,0,wR,hR),bmp.Canvas,Ramka);
BS:=CreateBlobStream(FieldByName('Foto'), bmWrite);
BS.Write(sgntB,82);
bmpSave.SaveToStream(BS);
BS.Write(sgntE,22);
finally
bmpSave.Free;
BS.Free;
end;
Post;
end;
end;
end;
Lex_! (2005-05-11 04:01:00) [3]Картинки в базе хранить нужно а не путь к картинке.
Спасибо всем. :)
Mr.F (2005-05-10 14:43:00) [4]Падождите шо так сложно.
Усё очень просто запихиваеш в ето поле путь к картинки в виде текста, потом считываеш когда тебе надобно и загружеш картинку находящейся по данному пути
sniknik (2005-05-10 12:01:00) [5]> Но какой там должен быть тип у поля чтобы туда сохранить картинку?
в самом аксессе в конструкторе это "поле OLE обьекта"
если же поле делать запросом (к примеру из дельфи-ado-jet, или тогоже аксесса) то тип OLEOBJECT или синоним один из - LONGBINARY, GENERAL или IMAGE.
Lex_! (2005-05-10 07:13:00) [6]Всмысле на форме показать ... из базы..
Lex_! (2005-05-10 07:12:00) [7]Но какой там должен быть тип у поля чтобы туда сохранить картинку??....
И еще всетки как его потом оттуда прочитать то?....
aus (2005-05-09 12:06:00) [8]Lex_! © (09.05.05 9:03) [2]
вроде как принцип
Как раз принцип одинаков для любой БД.
Lex_! (2005-05-09 09:03:00) [9]Ms SQL Server это я бы сказал не Access и вроде как принцип немнога не такой должен быть?...
aus (2005-05-09 08:42:00) [10]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1115511543&n=1