![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в базу данных поместить картинку? [D7, MSSQL]
pavel_guzhanov © (2005-05-04 17:03:00)Имеется база данных MS SQL Server. В ней имеется таблица, в которую надо помещать изображения (фото). В таблице имеется поле типа Image . Раньше мне такого делать не приходилось, поэтому прошу помощи. Как поместить картинку в это поле, можно ли это сделать с помощью ADOQuery? Если можно, то как это сделать? Всмысле как картинку поместить в запрос? Прошу, не ругайте за стиль вопроса, не знаю, как это сформулировать более грамотно:-))
pavel_guzhanov (2005-05-05 11:27:00) [1]Сделал вот так:
Image1.picture.Bitmap.SaveToStream(MemoryStream);
Работает:-))
Всем спасибо!
Johnmen (2005-05-05 11:11:00) [2]JPEGImage.SaveToStream
pavel_guzhanov (2005-05-05 11:06:00) [3]>SaveToStream, есть такой метод :)
Так именно на этом методе и появляется ошибка
> Просто запихни в поле где должен храниться рисунок путь к этому файлу.
А когда будеш считывать будеш считывать путь к файлу и запускаит его.
> У него нет файла...:)))
Файл есть на одной машине, с которой его помещают в базу. Но просматривать из базы могут с разных машин, так что путь здесь не прокатит.
Val (2005-05-05 10:41:00) [4]>[15] Mr.F (05.05.05 10:22)
у кого?
>pavel_guzhanov © (05.05.05 10:02)
фигню вы написали, извините. почитайте-таки о блоб-полях.
Mr.F (2005-05-05 10:22:00) [5]Даа тогда тяжолый случай
Johnmen (2005-05-05 10:18:00) [6]У него нет файла...:)))
Mr.F (2005-05-05 10:14:00) [7]Зачекм так сложно.
Просто запихни в поле где должен храниться рисунок путь к этому файлу.
А когда будеш считывать будеш считывать путь к файлу и запускаит его.
Johnmen (2005-05-05 10:12:00) [8]SaveToStream, есть такой метод :)
pavel_guzhanov (2005-05-05 10:02:00) [9]
var JPEGImage:TJPEGImage;
MemoryStream:TMemoryStream;
Image:TBlobField;
begin
MemoryStream:=TMemoryStream.Create;
JPEGImage:=TJPEGImage.Create;
// создание переменной типа TBLOBField
Image:=TBlobField(Image1.Picture);
// копирование картинки в поток
Image.SaveToStream(MemoryStream);
на этой строке выдается ошибка "Access violation at address 00000000. Read of address 00000000...."
А как тогда запихнуть картинку в Stream?
sniknik (2005-05-04 20:11:00) [10]при "весе" рисунка скажем в пару мегабайт два байта в расчет можно не принимать, а вот еще дополнительные пару мег. по моему надо, особенно при массовых "посылках"/вставках.
> 2) Иногда надо.
дело хозяйское. но я бы не советовал много данных так отправлять (против небольшого количества ничего против не имею ;).
Anatoly Podgoretsky (2005-05-04 18:40:00) [11]sniknik © (04.05.05 18:12) [7]
Это в мненонике СИ, поэтому еще расходы на 0x
Fay (2005-05-04 18:39:00) [12]2 sniknik © (04.05.05 18:12) [7]
1) Это ответ на вопрос "Всмысле как картинку поместить в запрос?"
2) Иногда надо.
sniknik (2005-05-04 18:12:00) [13]> Шестнадцатиричное представление данных.
по сетке будем вдвое больше посылать чем картинка "весит", зачем?
Fay (2005-05-04 18:01:00) [14]pavel_guzhanov © (04.05.05 17:17) [4]
Шестнадцатиричное представление данных.
pavel_guzhanov (2005-05-04 17:21:00) [15]>Johnmen © (04.05.05 17:14) [3]//
попробую. Только уже завтра, а то рабочий день заканчивается:-)
pavel_guzhanov (2005-05-04 17:17:00) [16]>insert into TEST(PICT) values(0x123123)
А что такое 0x123123?
Johnmen (2005-05-04 17:14:00) [17]Параметрический запрос. Потом
...ParamByName('MyImageField').LoadFromStream(MyMemoryStream,ftBlob);в стриме - твоя картинка.
Ключевые слова для F1:TStream(TMemoryStream), TBlobField, TParameters
Fay (2005-05-04 17:11:00) [18]if object_id('TEST') is not null drop table TEST
go
create table TEST(
ID int not null identity(1, 1),
PICT image null,
constraint PK_TEST primary key clustered(ID)
)
go
insert into TEST(PICT) values(0x123123)
select * from TEST
LineSoft (2005-05-04 17:10:00) [19]Почитайте о BLOB