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

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

Не могли бы вы мне дать примеры ваших реализаций?
Сам я уже запутался, к сожалению.
...
Рейтинг: 0 / 0
10.11.2003, 03:26
    #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
17.11.2003, 23:38
    #32326866
1
1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле ВЛОВ вставляю картинку.
to StarWind

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

to All

Неужели вот у всех оно работает? Ну дайте нормальный,
т.е. вами откомпилированный пример пожалуйста.
Мне кажется проблема в том, что Interbase7 глючит.
...
Рейтинг: 0 / 0
18.11.2003, 03:04
    #32326918
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле ВЛОВ вставляю картинку.
1
а может у тебя руки кривые??? Если что, я это выдернул из моего же работающего проекта. Именно на этот кусок возложены обязанности по демонстрации фотографий из базы данных... А что хоть за ошибка? Поди AV?
тогда хочется спросить, у тебя объект Photo.Picture.Graphic создан? Или голова у тебя исключительно для того чтобы шапку носить?
...
Рейтинг: 0 / 0
18.11.2003, 13:45
    #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
18.11.2003, 22:51
    #32328046
1
1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В поле ВЛОВ вставляю картинку.
to StarWind

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

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

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

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


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

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


to _DmG_

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

PS Знаешь какая между нами разница, то что у меня работает все... а ты паришься.... А в моем ответе содержался явный намек на ответ на вопрос как рашить загрузку... надо было лишь открыть хелп... Тоесть подумать головой Так что все таки у тебя голова у тебя только для шапки...
...
Рейтинг: 0 / 0
19.11.2003, 06:15
    #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
23.11.2003, 02:39
    #32332270
1
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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / В поле ВЛОВ вставляю картинку. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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