Форум: "Базы";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
ВнизРабота с картинками *.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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c