Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

Работа с картинками *.jpg в Delphi/MS SQL   Найти похожие ветки 

 
Jony ©   (2002-06-18 16:03) [0]

Установил компоненту для работы с Jpeg-файлами DBJPEGImage. Пытаюсь загрузить картинки в БД (MS SQL 7.0), но ничего не получается. Метод LoadFromFile достает их из файла, но сохранить их не удается (поле типа Image). А DBLoadFromFile, хотя он и писан в ReadMe компоненты, даже картинок не грузит.
Мастера, помогите разобраться в проблеме. Или посоветуйте, где можна об этом почитать.


 
Lola ©   (2002-06-18 19:56) [1]

Это я тоже в каком-то форуме нашла, привожу без изменений. Должно работать.

var Bm: TMemoryStream;
Jp: TJpegImage;
begin
Table1.Edit;
Jp:=TJpegImage.Create;
Jp.Assign(Image1.Picture.Bitmap); //Помещаешь изображение в класс TJpegImage;
Bm:=TMemoryStream.Create;
Jp.SaveToStream(Bm); // Сохраняешь Jpeg в потоке
Bm.Seek(0,0);
Dm.Table1PHOTO.LoadFromStream(Bm); //Загружаешь Jpeg в поле через поток
Bm.Free;
Jp.Free;
Table1.Post;
end;


 
vuk ©   (2002-06-18 20:57) [2]

Каким образом загружаете? Какой движок БД используется (в BDE имеются некоторые проблемы с извлечением картинок из базы)?

У меня все сделано через хранимые процедуры. Т.е. имеется, например такая процедура:

create PROCEDURE dbo.spIMG_Add
@img_Data image,
@img_id int output
AS
begin
insert into dbo.Images (img_Data)
values(@img_Data)
select @img_id = @@identity
end


Следующая процедура "запихивает" картинку в базу. Здесь для доступа к данным использовался SDAC. Думаю переписать это на другой движок проблем не составит.


procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog.Execute then
begin
with spIMG_Add do
begin
ParamByName( "img_Data" ).LoadFromFile(OpenPictureDialog.FileName, ftBlob );
Connection.StartTransaction;
try
ExecProc;
connection.Commit;
except
connection.Rollback;
end;
end;
end;
end;


 
Jony ©   (2002-06-19 11:08) [3]

Спасибо, друзья!
Похоже, вызревает другая проблема: как отобразить картинку из базы. Проверил таблицу - что-то в поле сохраняется (делал по методу, предложенному Lola, до ХП vuk просто не добрался, но попробую позже обязательно), и даже в том, что нужно. А вот на компоненте в форме ничего нет. Пробовал ТDBJPEGImage.LoadImage, тоже предложенный в ReadMe компоненты - на нем программа ввобще затыкается. Объясните несведущему, почему так, и как сделать правильно?


 
Lola ©   (2002-06-19 11:14) [4]

А ты смотрел, точно ли в поле нормальная картинка?


 
Jony ©   (2002-06-19 11:38) [5]

Если и можно посмотреть картинку в поле таблицы в MS SQL, то я к сожалению не знаю как. Я просто определил, что туда что-то записывается по длине поля.


 
Jony ©   (2002-06-19 15:26) [6]

Я не думал, что это такой сложный вопрос для Мастеров, или все мастера уже в отпуску, отдыхают от таких, как я.
Итак, в поле таблицы что-то(?) сохраняется (видно по длине поля). Но как это вытащить в экранную форму?


 
Случайный прохожий   (2002-06-19 20:41) [7]

Возьми в кладовке DBMultiFmtImage и не забудь добавить в uses JPEG.


 
Jony ©   (2002-06-20 10:21) [8]

to Случайный прохожий
После установки DBMultiFmtImage на форму у меня Delphi с моим проектом при запуске сразу же вылетает без всяких сообщений. Пришлось снять.


 
Lola ©   (2002-06-20 11:12) [9]

Извини, была занята. Попробуй так.

Bm:=Table1.CreateBlobStream(Table1.FieldByName("Photo"),bmRead);
Jp := TJpegimage.Create;
Jp.LoadFromStream(Bm);
Image1.Picture.Assign(Jp);
Bm.Free;
Jp.Free;

Если не получится, поищи в "Королевстве Delphi". Они подобное в свое время много обсуждали.


 
Jony ©   (2002-06-20 15:39) [10]

Lola, огромное спасибо!
В общем заработало, правда с каким-то глюком - после загрузки картинки на форму набор блокируется и навигация по нему невозможна, пока не сделаешь Cancel. Надеюсь, со временем и с этим разберусь.
Теперь буду копать, чтобы все это можно было отправить на печать. (До Report я еще не добрался в своем проекте).
А вообще то, неплохо было бы организовать где нибудь на сайте, наверное в кладовке, раздел, куда складывались бы готовые, конкретные, работающие решения каких-то относительно сложных вопросов (таких, как этот). В FAQ -просто выдернутые вопросы с такими же ответами, зачастую далеко не конкретными. Тогда и новичкам проще было бы осваивать предмет, и повторяющихся, иногда не совсем корректных вопросов с еще более некорректными ответами в конференции стало бы меньше.
Еще раз всем большое спасибо!


 
Huc ©   (2002-06-24 22:27) [11]

Всем привет. Собственно, где раздобыть DBJPEGImage ?



Страницы: 1 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-47244
Locked
2002-06-27 07:26
2002.07.15
Timer


14-47752
Skier
2002-06-13 12:22
2002.07.15
КАК РАЗВЛЕЧЬ СЕБЯ НА ЭКЗАМЕНАХ


1-47544
tsarevep
2002-06-25 20:42
2002.07.15
PageControl


1-47242
Ulikoff
2002-06-27 11:15
2002.07.15
Тип данных Word и Integer


1-47490
Sergey_
2002-07-01 14:07
2002.07.15
Дабрый день. Имеется StringGrid Как прочитать поле в