Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-47584
AFROLOV
2002-06-28 11:43
2002.07.15
Ошибка при работе с DLL


1-47483
yakshe
2002-07-03 18:05
2002.07.15
подключить необходимый фрейм к Panel


14-47674
Kozerog
2002-06-13 13:46
2002.07.15
Parent:=(Self); ???


1-47418
VS2001
2002-07-01 11:51
2002.07.15
Алгоритм генерации социально-индивидуального кода (СИК).


1-47407
Бен
2002-07-01 17:12
2002.07.15
Как в фастрепорте определить расход бумаги при печати?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский