|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Тип Image в MS SQL
Доброго времени суток!
Дали задание автоматизировать библиотеку института. При выполнении задания столкнулся с проблемой. Я создал в MS SQL 2008 таблицу посетителей библиотеки, одному из полей таблицы присвоил тип Image (для хранения фотографии). Подскажите, как теперь туда закидывать изображения? И как (уже при использовании программы), выбирая одну из строк в Grid'e, у меня (например, используя компонент Image) выводилась фотография читателя? Заранее благодрен! |
#2
|
|||
|
|||
я использовал тип BLOB для хранения картинок.
Загрузка выполняется путем вызова методов LoadFromFile/LoadFromStream у поля. В TImage потом загружается "руками" опять же через SaveToStream. Почему использовал BLOB - что бы хранить в БД картинки в виде JPEG, т.к. если пользоваться стандартным компонентом TImage, то дельфи норовит хранить их как Bitmap. |
#3
|
|||
|
|||
Цитата:
lmikle, если Вас не затруднит, не могли бы Вы написать код, как это надо реализовать...так как с потоками не работал! Буду очень признателен! |
#4
|
||||
|
||||
Ну вот так я писал как-то в блоб на MSSQL:
Код:
TBlobField(AdoQuery1.FieldByName('Photo')).LoadFromFile(OpenDialog1.Files.Strings[i]); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Код:
var Stream: TFileStream; begin Stream := TFileStream.Create('Temp.jpg', fmCreate); TBlobField(Table.FieldByName('Photo')).SaveToStream(Stream); Stream.Free; Image1.Picture.LoadFromFile('Temp.jpg'); DeleteFile('Temp.jpg'); end; |
#6
|
|||
|
|||
А класс TBlobField в коде необходимо определять (TBlobField = class(TField))?
|
#7
|
||||
|
||||
Нет, это уже предопределенный класс со своими методами в DB.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
Ни один из предложенных методов решения этой проблемы не помогает!
Если я использую то, что предложил Страдалецъ, то вылетает ошибка "List index out of bounds..." Если использую то, что предложил Kapitoshka438, то ошибка не вылетает, но в то же время записи изображения в таблицу не происходит! Даже не знаю, что и делать... |
#9
|
|||
|
|||
дык ты измени то что предложил Страдалецъ, например вот так:
Код:
TBlobField(AdoQuery1.FieldByName('Photo')).LoadFromFile(OpenDialog1.FileName); P.S. в его способе записывается несколько выбранных файлов в цикле i Последний раз редактировалось Assistant, 06.03.2011 в 14:54. |
#10
|
|||
|
|||
Цитата:
Кстати, попробовал немного иначе сделать: Код:
var MS : TFileStream; i: Integer; begin MS := TFileStream.Create('D:\1\1.bmp',fmOpenReadWrite); with ADOQuery1 do try SQL.Text := 'Insert Into temptable (photo) Values (:pmphoto)'; Parameters.ParamByName('pmphoto').LoadFromStream(MS, ftBlob); ExecSQL; finally MS.Free; end; end; Проверяю в MS SQL - файл записывается...но почему-то Grid в программе очищается. |
#11
|
|||
|
|||
а грид привязан к ADOQuery1?
|
#12
|
|||
|
|||
Цитата:
Я добавляю изображение в таблицу при нажатии кнопки...так что изначально все данные в Grid'e есть..но после нажатия исчезают! |
#13
|
|||
|
|||
Код:
with ADOQuery1 do try SQL.Text := 'Insert Into temptable (photo) Values (:pmphoto)'; Последний раз редактировалось Assistant, 06.03.2011 в 16:03. |
#14
|
|||
|
|||
Цитата:
Вот ответ на первый вопрос: Код:
var Stream: TMemoryStream; begin Stream := TMemoryStream.Create; Image1.Picture.Graphic.SaveToStream(Stream); TBlobField(Table.FieldByName('Photo')).LoadFromStream(Stream); Stream.Free; end; Последний раз редактировалось Kapitoshka438, 06.03.2011 в 16:52. |
#15
|
|||
|
|||
Цитата:
При работе с событием AfterScroll почему-то вообще ничего не происходит! Также попытался вывести изображение (но уже в другой Image) с помощью Код:
Image2.Picture.Graphic.LoadFromStream(Stream); |