Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2015, 20:56   #1
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
Вопрос Как добавить рисунок в формате jpeg в БД Paradox

Всем привет. Нужно добавить картинку в БД. Я написал вот такой код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
    Table1.Edit;
    Table1.FieldByName('Photo').Assign(DBImage1.Picture);
    Table1.Post;
end;
Этот код работает нормально, но он добавляет в БД только те рисунки у которых формат ВМР. А мне необходима добавить там рисунки в формате jpeg. Может кто нибудь скажет как исправить код. Заранее спасибо!!!


Код нужно оформлять правильно
Моя родина там, где мой компьютер

Последний раз редактировалось Аватар; 15.04.2015 в 21:20.
SASFM вне форума Ответить с цитированием
Старый 15.04.2015, 21:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Обычно uses jpeg эту проблему решает. Всмысле достаточно прописать jpeg, чтоб перекрывал стандартный Picture. Я вот только не помню где именно, по-моему в самом начале рекомендуется, чтоб другие модули шли после него по списку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.04.2015, 08:48   #3
SASFM
Форумчанин
 
Аватар для SASFM
 
Регистрация: 26.03.2015
Сообщений: 191
По умолчанию

Картинка не сохраняется!!!!
Моя родина там, где мой компьютер
SASFM вне форума Ответить с цитированием
Старый 16.04.2015, 08:53   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А как картинка в DBImage попадает?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.04.2015, 15:41   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
    Table1.Edit;
    //ЭТА СТРОКА ЛИШНЯЯ!  Table1.FieldByName('Photo').Assign(DBImage1.Picture); 
    Table1.Post;
end;
DBImage1 привязана к полю 'Photo'?
Значит как только в DBImage1 появится какое-то изображение - оно уже есть в базе (в поле Table1.FieldByName('Photo')) и его остаётся только зафиксировать -
Код:
Table1.Post;
И строка
Код:
Table1.Edit;
тоже по большому счёту не нужна.
Ведь как только вы измените картинку в DBImage1, Table1 сама перейдёт в режим редактирования...

Ферштейн?

На всякий случай - пара способов поместить картинку в DBImage:
Код:
DBImage1.PasteFromClipboard;
или
DBImage1.Picture.Assign(Image999.Picture);

Последний раз редактировалось kropotkina-alice; 16.04.2015 в 15:43.
kropotkina-alice вне форума Ответить с цитированием
Старый 16.04.2015, 16:06   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А как картинка в DBImage попадает?
Не как DBImage не почитает ..... Надо Image
Код:
procedure TForm11.ADOQuery1AfterScroll(DataSet: TDataSet);
var
  Stream: TMemoryStream;
  Jpg: TJpegImage;
  GraphType: TGraphType;
begin
  Jpg := nil;
  Stream := nil;
  try
    Stream := TMemoryStream.Create;
    TBlobField(ADOQuery1.FieldByName('Solution')).SaveToStream(Stream);
    if Stream.Size > 0 then
    begin
      Stream.Position := 0;
      Stream.Read(GraphType, 1);
      case GraphType of
        gtBitmap:   Image1.Picture.Bitmap.LoadFromStream(Stream);
        gtIcon:     Image1.Picture.Icon.LoadFromStream(Stream);
        gtMetafile: Image1.Picture.Metafile.LoadFromStream(Stream);
        gtJpeg:
        begin
          Jpg := TJpegImage.Create;
          Jpg.LoadFromStream(Stream);
          Image1.Picture.Assign(Jpg);
        end
        else
          Image1.Picture.Assign(nil);  // Clear the image
      end;
    end
    else
      Image1.Picture.Assign(nil);
  except
    Image1.Picture.Assign(nil);
  end;
  jpg.Free;
  Stream.Free;

end;

procedure TForm11.Edit1Change(Sender: TObject);
begin
ADOQuery1.Locate('Модель', Edit1.Text, [loPartialKey]);
end;

procedure TForm11.FormCreate(Sender: TObject);
begin
  ADOConnection1.Connected := True;
  ADOQuery1.Open;
end;
 // Добавить
procedure TForm11.SpeedButton1Click(Sender: TObject);
var
  Jpg: TJpegImage;
  Stream: TMemoryStream;
  FileExt: string;
  GraphType: TGraphType;
begin
  if dlgOpenPicture.Execute then
  begin
    Jpg := nil;
    Stream := nil;
    try
    Stream := TMemoryStream.Create;
    FileExt := LowerCase(ExtractFileExt(dlgOpenPicture.FileName));
    if (FileExt = '.bmp') or (FileExt = '.dib') then
    begin
      GraphType := gtBitmap;
      Stream.Write(GraphType, 1);
      with Image1.Picture.Bitmap do
      begin
        LoadFromFile(dlgOpenPicture.FileName);
        Image1.Picture.Bitmap.SaveToStream(Stream);
      end;
    end
    else
    if (FileExt = '.ico') then
    begin
      GraphType := gtIcon;
      Stream.Write(GraphType, 1);
      with Image1.Picture.Icon do
      begin
        LoadFromFile(dlgOpenPicture.FileName);
        Image1.Picture.Bitmap.SaveToStream(Stream);
      end;
    end
    else
    if (FileExt = '.emf') or (FileExt = '.wmf') then
    begin
      GraphType := gtMetafile;
      Stream.Write(GraphType, 1);
      with Image1.Picture.Metafile do
      begin
        LoadFromFile(dlgOpenPicture.FileName);
        Image1.Picture.Bitmap.SaveToStream(Stream);
      end;
    end
    else
    if (FileExt = '.jpg') or (FileExt = '.jpeg') or (FileExt = '.jpe') then
    begin
      Jpg := TJpegImage.Create;
      Jpg.LoadFromFile(dlgOpenPicture.FileName);
      Image1.Picture.Assign(Jpg);
      GraphType := gtJpeg;
      Stream.Write(GraphType, 1);
      Jpg.SaveToStream(Stream);
    end;
    if (ADOQuery1.State <> dsEdit) and (ADOQuery1.State <> dsInsert) then
    ADOQuery1.Insert;
    ADOQuery1.FieldByName('Модель').AsString := ExtractFileName(dlgOpenPicture.FileName);
    Stream.Position := 0;
    TBlobField(ADOQuery1.FieldByName('Solution')).LoadFromStream(Stream);
    ADOQuery1.Post;
  except
    jpg.Free;
    Stream.Free;
    raise;
  end;
    jpg.Free;
    Stream.Free;
    ADOQuery1.AfterScroll(ADOQuery1);
  end;

end;

Последний раз редактировалось xxbesoxx; 16.04.2015 в 16:12.
xxbesoxx вне форума Ответить с цитированием
Старый 16.04.2015, 16:13   #7
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Код:
// Изменить
procedure TForm11.SpeedButton2Click(Sender: TObject);
var
  Jpg: TJpegImage;
  Stream: TMemoryStream;
  FileExt: string;
  GraphType: TGraphType;
begin
  if dlgOpenPicture.Execute then
  begin
    Jpg := nil;
    Stream := nil;
    try
    Stream := TMemoryStream.Create;
    FileExt := LowerCase(ExtractFileExt(dlgOpenPicture.FileName));
    if (FileExt = '.bmp') or (FileExt = '.dib') then
    begin
      GraphType := gtBitmap;
      Stream.Write(GraphType, 1);
      with Image1.Picture.Bitmap do
      begin
        LoadFromFile(dlgOpenPicture.FileName);
        Image1.Picture.Bitmap.SaveToStream(Stream);
      end;
    end
    else
    if (FileExt = '.ico') then
    begin
      GraphType := gtIcon;
      Stream.Write(GraphType, 1);
      with Image1.Picture.Icon do
      begin
        LoadFromFile(dlgOpenPicture.FileName);
        Image1.Picture.Bitmap.SaveToStream(Stream);
      end;
    end
    else
    if (FileExt = '.emf') or (FileExt = '.wmf') then
    begin
      GraphType := gtMetafile;
      Stream.Write(GraphType, 1);
      with Image1.Picture.Metafile do
      begin
        LoadFromFile(dlgOpenPicture.FileName);
        Image1.Picture.Bitmap.SaveToStream(Stream);
      end;
    end
    else
    if (FileExt = '.jpg') or (FileExt = '.jpeg') or (FileExt = '.jpe') then
    begin
      Jpg := TJpegImage.Create;
      Jpg.LoadFromFile(dlgOpenPicture.FileName);
      Image1.Picture.Assign(Jpg);
      GraphType := gtJpeg;
      Stream.Write(GraphType, 1);
      Jpg.SaveToStream(Stream);
    end;
    if (ADOQuery1.State <> dsEdit) and (ADOQuery1.State <> dsInsert) then
    ADOQuery1.Edit;
    ADOQuery1.FieldByName('Модель').AsString := ExtractFileName(dlgOpenPicture.FileName);
    Stream.Position := 0;
    TBlobField(ADOQuery1.FieldByName('Solution')).LoadFromStream(Stream);
    ADOQuery1.Post;
  except
    jpg.Free;
    Stream.Free;
    raise;
  end;
    jpg.Free;
    Stream.Free;
    ADOQuery1.AfterScroll(ADOQuery1);
  end;

end;

procedure TForm11.SpeedButton3Click(Sender: TObject);
begin
  Image1.Picture.Assign(nil);
  if (ADOQuery1.State <> dsEdit) and (ADOQuery1.State <> dsInsert) then
  ADOQuery1.Edit;
  ADOQuery1.FieldByName('Solution').Assign(nil);  // Clear the field
  ADOQuery1.Delete;
end;

end.
Где то 2 года назад писал ...... А сейчас только .pas открыл , думаю понятно
xxbesoxx вне форума Ответить с цитированием
Старый 16.04.2015, 16:19   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
    Table1.Edit;
    //ЭТА СТРОКА ЛИШНЯЯ!  Table1.FieldByName('Photo').Assign(DBImage1.Picture); 
    Table1.Post;
end;
DBImage1 привязана к полю 'Photo'?
Значит как только в DBImage1 появится какое-то изображение - оно уже есть в базе (в поле Table1.FieldByName('Photo')) и его остаётся только зафиксировать -
Код:
Table1.Post;
И строка
Код:
Table1.Edit;
тоже по большому счёту не нужна.
Ведь как только вы измените картинку в DBImage1, Table1 сама перейдёт в режим редактирования...

Ферштейн?

На всякий случай - пара способов поместить картинку в DBImage:
Код:
DBImage1.PasteFromClipboard;
или
DBImage1.Picture.Assign(Image999.Picture);
Красотуля...! разговор про JPEG и не BMP
xxbesoxx вне форума Ответить с цитированием
Старый 16.04.2015, 16:22   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Не как DBImage не почитает
И чего это? DBImage может отображать картинку из поля датасета. В него же можно из буфера обмена картинку засунуть. А свойство Picture чего стоит, со всеми своими свойствами и методами
Цитата:
разговор про JPEG и не BMP
TJpegImage совсем не обязателен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 16.04.2015 в 16:24.
Аватар вне форума Ответить с цитированием
Старый 16.04.2015, 16:26   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
И чего это? DBImage может отображать картинку из поля датасета.
Может я ошибаюсь, Но формат JPEG не будет отображать компонент DBImage он только BMP читает
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КАК НА АВТОМАТЕ ДОБАВИТЬ ПОЛЕ В ФАЙЛ DB (Paradox) grenles БД в Delphi 7 07.05.2012 07:56
Как сделать скриншот в формате jpeg egorzenit Мультимедиа в Delphi 22 12.02.2012 21:39
как обрезать изоображение в формате jpeg KWN, lnc Мультимедиа в Delphi 5 08.03.2010 13:52
не получается загрузить рисунок с расширением jpeg в компонент Image s2dentishe Помощь студентам 2 09.01.2010 02:04
Как мне в ListBox Добавить/Изменить рисунок (иконку)? Рустам Компоненты Delphi 12 10.06.2008 18:54