![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемма с извлечением картинки из базы данныз Paradox [D7, Paradox]
Rule © (2003-10-05 21:41:00)
Задача: необходимо в базу данных Парадокс поместить jpeg овский рисунок, и при скроллинке в программе должен этот рисунок отображаться в определенном месте (не важно в каком)
Способ решения: для хранения рисунков создано поле двоичный блоб, и в событии таблицы (для работы используется обычный компонент ттейбл и бде)афтерскролл читается содержимое поля и помещается в стандартный компонент типа TImage, так как стандартный ДБИмаге не понимает джпегов, ну так вот а для помещения картинки просто в это пле записывается из выбранного файла содержимое.
возникшие трудности: вопервых, для записи из файла в поле использовал команду такую
DM.FirmBlock.loadfromfile(opendialog.filename);
где
dm - форма, сдержащаю все компоненты базы данных
Firm - название таблицы
Block - название вот этого самого поля
я не ощибся между фирм и блок нет точки этот объект как поле инициализируется.
так вот при записи содержимое файла записывается в первую запист и только, может я не так использую этот объект, если нет то что мне делать
и вторая трудность это я не могу с мемори стрим загрузить в компонкнту Image картинку, объясняю почему
использую такую запись
var
ms: TMemoryStream
begin
ms:=TMemoryStrem.create;
DM.FirmBlock.SaveToStream(ms);
MainForm.Image1.Picture.Graphic.LoadFromStrem(ms);
ms.free;
вот так но оно не работате а выдает ошибку так как надо загружать не из графика а из пикчер допустим вот так работает
MainForm.Image1.Picture.LoadFromFile("название там какогонибудь файла");
но в свойстве Пикчер нет метода загрузки из потока, как мне быть?????????????????????????????????????????????????????????
TuZ (2003-10-07 09:29:00) [1]
Какие-то сложности непонятные...
У меня работало (и еще работает)все с стандартными компонентами... И кода там немного...
Мой совет (т.к. исхдоники на работе): TDBImage, DataSet - и немного кода (строчек 10-15). Все...
Term (2003-10-07 09:04:00) [2]
> да не забыл конечно, только я использую команду едит ...
> пост потомучто картинкка добавляется к уже существующим
> записям, логично ведь, сначала создается запись а потом
> добавляется ккартинка, а не наоборот, картинка без записи
> это немного старнновато-недопустимо в отличии от записи
> без картинки (по логике вещей моей БД)
приведи код а то я чтото не пойму что ты там замутил
Shurik (2003-10-07 00:32:00) [3]
Вот ни чего не понял (опять), что есть "первое значение" :)
Возможно ты имеешь ввиду то, что, image не обновляется при прогоне строк? Поставь UpDate на AfterScroll Tabla. И еще, если у тебя TBlobField то не хрена не выйдет (нужен TGraphicField). И что такое поток...
Rule (2003-10-07 00:13:00) [4]
да вопрос не в том а вопрос в другом, почему при обращении к записи таким образом берется только первое значение и почему
нельзя из потока закрузить прямо в компоненту имейдж как из файла (в конце концов это же тоже поток) ...
Shurik (2003-10-06 23:42:00) [5]
Вот ни чего не понял :)
Если нужно сохранить, то (поле as TBlobField).LoadFromStream(...), есть пример в хелпах. И далее по тексту. И наоборот если нужно сохранить. Есть кульная библия FastLib (или FastDib, но абсолютно бесплатная (работает и с пресловутыми jpg) в разделе DelphiGFX), которая позволит и загрузить и сохранить в поток, и перекинуть на канву Image, ... устал одним пальцем набирать:)
Rule (2003-10-06 22:26:00) [6]
да не забыл конечно, только я использую команду едит ... пост потомучто картинкка добавляется к уже существующим записям, логично ведь, сначала создается запись а потом добавляется ккартинка, а не наоборот, картинка без записи это немного старнновато-недопустимо в отличии от записи без картинки (по логике вещей моей БД)
Term (2003-10-06 11:00:00) [7]
а ты там
append...postне забыл, может она у тебя каждый раз текущую запись редактирует, а нужно добавлять
Rule (2003-10-06 10:46:00) [8]
ДА дело то не в потоках, а в том что при обращении к полю как к отдельному объекту, тоесть к полю как к полю TBLOB, FORMNAME.TABLEFIELDBLOCK.value - выдает только первое значение таблицы, вот в чем вопрос ...
Term (2003-10-06 10:34:00) [9]
в Image изображение кажется в любом случае приводиться к bmp, хотя могу и ошибаться
Term (2003-10-06 10:31:00) [10]
попробуй так:
var
Btm:TBitmap;
begin
Btm:=TBitmap.Create;
Btn.Assign(TableBitmap);
Image.Picture.Bitmap.Assign(Btn);
Btn.Free;
end;
и потоки не нужны
Rulee (2003-10-06 09:47:00) [11]
Неужели никто не знает, помогите мне пожалуйста