ФОТО из БД Mysql в Delphi

Тема в разделе "Delphi - Базы данных", создана пользователем chekanoff, 26 ноя 2007.

  1. chekanoff

    chekanoff Гость

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

    Silver Wind Гость

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

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

    chekanoff Гость

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

    Код (Text):
    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;
    Проблема в этом коде
    Код (Text):
     stm := TBlobStream.Create( Table1_BlobFld, bmRead );
    т.к. я не использую компоненту Table1, у меня соединеие к БД MySQL, через SQLConnection!

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

    TaviskaroN Гость

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

    root Гость

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

    TaviskaroN Гость

    ну для открытия картинки из базы ис пользую такой код:
    Код (Text):
    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;
    причем заметил такую вещ: картинки из таблицы, которая идет вместе с делфой как пример открывает без проблем, а любые другие извне нехочит((
    может вся проюлема в неправильном хранении картинки? подскажите как лутше создавать базу и какую лутше? мож аксес для этого не самый лутший вариант?))
     
  7. chekanoff

    chekanoff Гость

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


    Это отлично работает на локальных БД!!!! А вопрос с удаленной БД, что б к каждой фотки имел доступ каждый пользователь!!!! Если знаешь как, то пришли алгоритмик)))) Очень интересно!!!!
     
  8. root

    root Гость

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

    TaviskaroN Гость

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

    Код (Text):
    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;
    каждая новая картинка сохраняется в новую ячейку и потом прекрасно открывается)) проблема была в создании и записии картинки в таблицу) аксесом пользоватся нестоит)
     
Загрузка...

Поделиться этой страницей