powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / В поле ВЛОВ вставляю картинку.
13 сообщений из 13, страница 1 из 1
В поле ВЛОВ вставляю картинку.
    #32315447
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею: Простая таблица с БЛОБ полем.
На форме DBImage.
В поле ВЛОВ вставляю картинку.

Проблема: Не могу записать все картинки кроме *.bmp
Например *.jpg в базе не записывается? Помогите.
Использую Delphi7 с Interbase7.
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32315511
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jpg в базу пишется, только компонент тупой и не опознает ее...
я это обошел обычным TImage и некоторым кол-вом кода. Поищи, тут даже был код с анализом bmp это или jpg...
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32315708
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаем поток BlobStream и пишеи туда .bmp, .jpg, .gif, .avi, .mp3, .kgbcccp ...
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32315990
Alex_Guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проще воспользоваться методом LoadFromFile соответсвующего блоб-поля
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32318460
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to StarWind
to Малиновский Владимир

Не могли бы вы мне дать примеры ваших реализаций?
Сам я уже запутался, к сожалению.
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32318478
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это будет выгрузка с БД в TImage....
если бы не ленился, то нашел бы на этом форуме и более универсальную функцию....

Код: plaintext
1.
2.
3.
 BLOB := DataSet.CreateBlobStream(Dataset.FieldByName('Photo'),bmRead);
 try if BLOB.Size <>  0  then Photo.Picture.Graphic.LoadFromStream(BLOB)
     else Photo.Picture.Graphic.LoadFromFile(GrphcPath+'DefPhoto.jpg');
 finally BLOB.Free; end;


думаю как загрузить обратно догадаешься? или хотябы догадаешься что можно просто поискать на форуме?
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32326866
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to StarWind

Я этот и др. форумы все обшарил. Ни один пример не работает!
Ты то сам то пробовал?
У меня стоит Delphi7, Interbase7, ibx708del

to All

Неужели вот у всех оно работает? Ну дайте нормальный,
т.е. вами откомпилированный пример пожалуйста.
Мне кажется проблема в том, что Interbase7 глючит.
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32326918
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1
а может у тебя руки кривые??? Если что, я это выдернул из моего же работающего проекта. Именно на этот кусок возложены обязанности по демонстрации фотографий из базы данных... А что хоть за ошибка? Поди AV?
тогда хочется спросить, у тебя объект Photo.Picture.Graphic создан? Или голова у тебя исключительно для того чтобы шапку носить?
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32327431
_DmG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спокойнее, господа! Даю полный работающий код для IBX Delphi 7. (spMain_Add - IBStoredProc)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
  
procedure TfAddEdit.BitBtn1Click(Sender: TObject);
var
//  FileS: TFileStream;     // Для загрузки изображения из файла в параметр хранимой процедуры
  S: TMemoryStream;
begin
  with fdm.spMain_Add do
  begin
    try
      ParamByName('FIO').AsString:=Edit1.Text;
      ParamByName('Date_R').AsDateTime:=DateTimePicker1.Date;
      ParamByName('Time_R').AsDateTime:=DateTimePicker2.Time;
      if Image1.Picture.Height<> 0  then
      begin
        S:=TMemoryStream.Create;
        Image1.Picture.Bitmap.SaveToStream(S);
        ParamByName('Foto').LoadFromStream(S, ftBlob);
        S.Free;
      end
      else
        ParamByName('Foto').AsString:='';
{      FileS:=TFileStream.Create('E:\WINNT\Soap Bubbles.bmp', fmOpenRead);  // Для загрузки изображения из файла в параметр хранимой процедуры
      ParamByName('Foto').LoadFromStream(FileS, ftBlob);
      FileS.Free;}
      ParamByName('Oklad').AsFloat:=StrToFloat(Edit2.Text);
      ParamByName('Otdel').AsSmallInt:=StrToInt(DBLookupComboBox1.KeyValue);
      ParamByName('Remark').AsString:=Memo1.Text;
      ExecProc;
      fMain.mKod:=ParamByName('Kod_New').AsInteger;
      fdm.trWrite.Commit;
    except
      fdm.trWrite.Rollback;
    end;
  end
end;


Удачи!
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32328046
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to StarWind

Твой пример говорит: "это будет выгрузка с БД в TImage.... "
-Я говорю что это не проблема для меня.

Мой вопрос говорит:
"В поле ВЛОВ вставляю картинку. Проблема: Не могу записать все картинки кроме *.bmp"

Ты говориш: "jpg в базу пишется..."

Я спрашиваю " КАК???"!!!!!!! Все варианты перепробовал.


Повторяю!!!! "демонстрации фотографий " - НЕ НАДО!!!
А надо: Записать картинку в БЛОБ поле.

PS. голова у меня для того чтобы носить шапку! А мозги, чтобы вдалбить тебе это.
PS2. Без обид! Ты сам начал оскарблять.


to _DmG_

Спасибо за пример, не сомневаюсь в том что он у вас работает.
Но у меня проблема именно в том, где идет непосредственное присвоение значения в базу.
т.е. не могли бы вы дать тот кусок примера хранимой процедуры, где значение
блоб поля записывается в поле базы Interbase.
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32328084
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтоб мне это вдалбить? ну что ты... мне не нужно этого вдалбливать... я просто буду игнорировать этот топик...

PS Знаешь какая между нами разница, то что у меня работает все... а ты паришься.... А в моем ответе содержался явный намек на ответ на вопрос как рашить загрузку... надо было лишь открыть хелп... Тоесть подумать головой Так что все таки у тебя голова у тебя только для шапки...
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32328097
somebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Ты говориш: "jpg в базу пишется..."
>
>Я спрашиваю " КАК???"!!!!!!! Все варианты перепробовал.

Я сразу оговорюсь, что Дельфина использую крайне редко. Ниже приведенная процедура как раз записывает в формате jpeg в БД картинку из TImage. По крайней мере у меня работало Написано на пятом Дельфине и больше года назад.

procedure SavePhoto(Query:TIBCustomDataSet;fieldname:string;Image1:TImage);
var
bmp:TBitmap;
jpg:TJpegImage;
blob:TIBBlobStream;

Begin
bmp:=TBitMap.create;
jpg:=TJpegImage.Create;

try
blob:=TIBBlobStream(Query.CreateBlobStream(Query.FieldByName(fieldname),
bmReadWrite));
blob.Truncate;
if Image1.picture.graphic<>nil then
if not Image1.picture.graphic.Empty then begin
bmp.width:=Image1.picture.Graphic.width;
bmp.height:=Image1.picture.Graphic.height;
bmp.Canvas.Draw(0,0,Image1.picture.Graphic);
jpg.Assign(bmp);
jpg.SaveToStream(blob);
end;
finally
bmp.free;
jpg.free;
blob.free;
end

End;
...
Рейтинг: 0 / 0
В поле ВЛОВ вставляю картинку.
    #32332270
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил!

Основная проблема в том, что я подключая
uses windows...;
даже не думал о том что, важна очередность юнита windows:
в нем есть запись TBitmap = tagBITMAP;

поэтому так: uses windows, ...; - работает
a так: uses ..., windows; - не работает.

Ну а дальше все так:
В окне просмотра:

при DataSource1DataChange:

...
var Mo_Blob: TStream;
...
if DataSource.State=dsBrowse then
begin
try
Mo_Blob:= DataSet.CreateBlobStream(DataSet.FieldByName('B5'), bmRead);
if Mo_Blob.Size <> 0 then
begin
try
with DataSet do
begin
case FieldByName('B1').AsInteger of
1: E_B5.Picture.Bitmap.LoadFromStream(Mo_Blob);
2: E_B5.Picture.Icon.LoadFromStream(Mo_Blob);
3: E_B5.Picture.Metafile.LoadFromStream(Mo_Blob);
else
begin
E_B5.Picture.Graphic:=TJPEGImage.Create;
E_B5.Picture.Graphic.LoadFromStream(Mo_Blob);
end;
end;
end;
finally
Mo_Blob.Free;
end;
E_B5.Visible:= true;
end;
except
end;
end;

В окне редактирования:

procedure TFE_ListIn1.Mp_LoadImage;
var Mo_Blob: TStream;
begin
Mo_Blob:= DataSet.CreateBlobStream(DataSet.FieldByName('B5'), bmRead);
try
with DataSet do
begin
case FieldByName('B1').AsInteger of
1: E_B5.Picture.Bitmap.LoadFromStream(Mo_Blob);
2: E_B5.Picture.Icon.LoadFromStream(Mo_Blob);
3: E_B5.Picture.Metafile.LoadFromStream(Mo_Blob);
else
E_B5.Picture.Graphic.LoadFromStream(Mo_Blob);
end;
end;
finally
Mo_Blob.Free;
end;
end;

procedure TFE_ListIn1.Mp_SaveImage;
var Mo_Blob: TStream;
begin
Mo_Blob:= DataSet.CreateBlobStream(DataSet.FieldByName('B5'), bmWrite);
try
try
with DataSet do
if E_B5.Picture.Graphic is TBitmap then
begin
E_B5.Picture.Bitmap.SaveToStream(Mo_Blob);
FieldByName('B1').AsInteger:= 1;
end
else
if E_B5.Picture.Graphic is TIcon then
begin
E_B5.Picture.Icon.SaveToStream(Mo_Blob);
FieldByName('B1').AsInteger:= 2;
end
else
if E_B5.Picture.Graphic is TMetafile then
begin
E_B5.Picture.Metafile.SaveToStream(Mo_Blob);
FieldByName('B1').AsInteger:= 3;
end
else
begin
E_B5.Picture.Graphic.SaveToStream(Mo_Blob);
FieldByName('B1').AsInteger:= 4;
end;
except
with DataSet do
FieldByName('B1').AsInteger:= 0;
end;
finally
Mo_Blob.Free;
end;
end;

И еще проблема:
Я в обеих окнах в Image1 загрузил в десигн режиме картинки *.jpg
Они все равно перезаписываются, т.е. не показываются.
Но если мне этого не делать, то программа перестает работать в jpegами.

Хотя уже все у меня работает, т.е. уже не критично

Вот еще код, кому надо, чтение и запись в файл:

procedure TFE_ListIn1.Button_Picture1Click(Sender: TObject); begin
if OpenDialog_Picture.Execute then
begin
E_B5.Picture.LoadFromFile(OpenDialog_Picture.FileName);
Mp_SaveImage;
end;
end;

procedure TFE_ListIn1.Button_Picture2Click(Sender: TObject);
begin
E_B5.Refresh;
SaveDialog_Picture.DefaultExt:= '';
SaveDialog_Picture.FilterIndex:= 1;
SaveDialog_Picture.FileName:= '';
if E_B5.Picture.Graphic is TBitmap then
begin
SaveDialog_Picture.DefaultExt:= '*.bmp';
SaveDialog_Picture.FilterIndex:= 4;
end
else
if E_B5.Picture.Graphic is TIcon then
begin
SaveDialog_Picture.DefaultExt:= '*.ico';
SaveDialog_Picture.FilterIndex:= 5;
end
else
if E_B5.Picture.Graphic is TMetafile then
begin
SaveDialog_Picture.DefaultExt:= '*.wmf';
SaveDialog_Picture.FilterIndex:= 7;
end
else
begin
SaveDialog_Picture.DefaultExt:= '*.jpeg';
SaveDialog_Picture.FilterIndex:= 3;
end;
if SaveDialog_Picture.Execute then
begin
if FileExists(SaveDialog_Picture.FileName) then
if MessageDlg(Format(Mf_GetLangStr('zMyFilterG18',true), [SaveDialog_Picture.FileName]),
mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit;
E_B5.Picture.SaveToFile(SaveDialog_Picture.FileName);
end;
end;

где фильтры SaveDialog_Picture и OpenDialog_Picture были такими:
All (*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)|*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf|JPEG Image File (*.jpg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp|Icons (*.ico)|*.ico|Enhanced Metafiles (*.emf)|*.emf|Metafiles (*.wmf)|*.wmf
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / В поле ВЛОВ вставляю картинку.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]