ФОТО из БД Mysql в Delphi

  • Автор темы chekanoff
  • Дата начала
C

chekanoff

#1
вся проблема в том, что я не могу отобразить это фото на форме!
компонента DbImage не подходит, матерится!!!
при подключении к этому полю компоненты DbMemo, данные отображаются в виде сплошных спец символов, как и должно быть!!!
запрос в SQLQeri типа "select FOTO from TABL where ID=1" работает без ошибок, т.е. соединение есть!!!
что делать??? помогите!!!
 
S

Silver Wind

#2
Фото в каком формате сохранено?

Если в JPG (скорее всего так и есть), то стандартный DbImage отобразить его не сможет. В таком случае можно воспользоваться сторонними компонентами, или же самому читать блоб-поле, загружать его в TJPEGImage (модуль Jpeg) и отображать.
 
C

chekanoff

#3
Я использую процедуру

Код:
var
stm: TBlobStream;
jpg: TJPEGImage;
begin
stm := TBlobStream.Create( Table1_BlobFld, bmRead ); // создаем поток blob-данных для чтения поля BlobFld из НД Table1
try // finally
jpg := jpeg.TJPEGImage.Create; // JPG-картинка
try // finally
jpg.LoadFromStream( stm );
Image1.Picture.BitMap.Assign( jpg );
finally
FreeAndNil(jpg)
end; // finally
finally
stm.Free;
end;
Проблема в этом коде
Код:
 stm := TBlobStream.Create( Table1_BlobFld, bmRead );
т.к. я не использую компоненту Table1, у меня соединеие к БД MySQL, через SQLConnection!

Прошу совета, что туда поместить?????
:blink:
 
T

TaviskaroN

#4
такой же пачти трабл. у мну есть таблица в азе даных аксеса. в ней 2 поля : числа и поле обьектов OLE, в ячейках которых битмапы. и от када я пытаюсь открыть этот рисунок через DBImage - он матюкается и нехочет. пишет что рисунок неправильный. шо делать падскажите плиз)
 
R

root

#5
Для: chekanoff
Помойму самое неправильное решение это хранить рисунки в базе
лучше храните ссылки типа дата + префикс as имя файла а сам файл в каталоге так как дата будет уникальна в момент времени.
 
T

TaviskaroN

#6
ну для открытия картинки из базы ис пользую такой код:
Код:
procedure TForm2.RadioButton2Click(Sender: TObject);
begin
DBImage1.DataSource:=DataSource2;
DBImage2.DataSource:=DataSource2;
DBImage1.DataField:='bmp';
DBImage2.DataField:='bmp';
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * from text.db where nom = 2');
Query1.Open;
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add('Select * from images.dbf where nomi = 1');
Query2.Open;
end;
причем заметил такую вещ: картинки из таблицы, которая идет вместе с делфой как пример открывает без проблем, а любые другие извне нехочит((
может вся проюлема в неправильном хранении картинки? подскажите как лутше создавать базу и какую лутше? мож аксес для этого не самый лутший вариант?))
 
C

chekanoff

#7
Для: TaviskaroN Я работал с мускулом, в аксесе с картинками не пробовал!!!
В мускуле раздуплился как делать! Если интересно, то пришли свое мыло на schekanoff@mail.ru Без проблем отвечу исходником в котром реализовано только добавление и отображение фоток!!!!
Потребуется только установить апач и создать БД!!!!


Помойму самое неправильное решение это хранить рисунки в базе
лучше храните ссылки типа дата + префикс as имя файла а сам файл в каталоге так как дата будет уникальна в момент времени
Это отлично работает на локальных БД!!!! А вопрос с удаленной БД, что б к каждой фотки имел доступ каждый пользователь!!!! Если знаешь как, то пришли алгоритмик)))) Очень интересно!!!!
 
R

root

#8
Для: chekanoff
в .htaccess внести
order allow,deny
allow from 127.0.0.0/8
или
<Files "\.(inc|sql|...другие расширения...)$">
order allow,deny
deny from all
</Files>
на файлы
 
T

TaviskaroN

#9
вобщем у меня получилось) а делал я так: создал таблицу Visual dBase в Database Desktop, шо есть даже в 7 делфе. поле дня картинки обязательно блоб а не график. и патом наполнять эту табличку надо програмно. я написал для этого прожку маленькую. картинка дабавляется по методу опендиалог-ячейка таблицы:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var bmp:TBitmap;
begin
OpenPictureDialog1.Execute;
if OpenPictureDialog1.Execute then ;
begin
bmp:=TBitmap.Create;
bmp.LoadFromFile(OpenPictureDialog1.FileName);
Table1.Append;
Table1.FieldByName('img').Assign(bmp);
Table1.Post;
bmp.free;
end;
каждая новая картинка сохраняется в новую ячейку и потом прекрасно открывается)) проблема была в создании и записии картинки в таблицу) аксесом пользоватся нестоит)