C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Blob InterBase, Вставить картинку
jon
Отправлено: 11.04.2005, 09:56


Не зарегистрирован







Не могу понять как вставлять картинки в базу данных (IB) при помощи такой записи:

Table1->FieldValues["BMP"]=.....

Возможно ли это?
AVC
Отправлено: 11.04.2005, 10:12


Ветеран

Группа: Модератор
Сообщений: 1583



Картинка это не более чем "двоичные данные".
Обычно соответствующими методами оснащены Memo (Blob) поля.

Отредактировано AVC — 11/04/2005, 09:42
jon
Отправлено: 11.04.2005, 10:26


Не зарегистрирован







Так при помощи данной записи я не смогу записать?
Нужно идти другим путем?
AVC
Отправлено: 11.04.2005, 10:42


Ветеран

Группа: Модератор
Сообщений: 1583



Может и сможете. А если поробовать?
jon
Отправлено: 11.04.2005, 10:45


Не зарегистрирован







Я бы попробовал но не знаю как?
Как будет выглядеть в коде листинга?
avc*
Отправлено: 11.04.2005, 10:58


Не зарегистрирован







Сейчас прикину. А вам действительно нужно только так, через FieldValues или можно иначе?
jon
Отправлено: 11.04.2005, 11:26


Не зарегистрирован







Если возможно иначе можно тогда иначе.
Мне хоть как-нибудь мучаюсь который день никак не могу.
У меня билдер 5 версия.
AVC
Отправлено: 11.04.2005, 11:53


Ветеран

Группа: Модератор
Сообщений: 1583



Каким компонентом работаете?
Вот рабочий код для Access — Ado поле Memo
CODE

TDataSet *ds = ADOTable2;
if (!ds || !ds->Active || ds->IsEmpty())  return;

TBlobField *bfld = dynamic_cast<TBlobField*>(ds->FindField("FPict"));

if (!bfld)  return;
bool needPost = false;
if (!(ds->State == dsEdit || ds->State == dsInsert))
{  ds->Edit();
   needPost = true;
}

bfld->LoadFromFile("GStone.bmp");
if (needPost) ds->Post();

Этот код для FireBird поле типа Blob в строке Post вываливает ошибку. Пока не разобрался из за чего, но, все равно, сам код останется прежним.
jon
Отправлено: 11.04.2005, 12:00


Не зарегистрирован







Я пользуюсь компонентами InterBase.
AVC
Отправлено: 11.04.2005, 12:42


Ветеран

Группа: Модератор
Сообщений: 1583



Настроил связь и заменил в первой строке
CODE

TDataSet *ds = IBTable1;        // IB   — Ok
//TDataSet *ds = Table1;        // BDE — Ok
//TDataSet *ds = ADOTable2; // ADO — ошибки

Все работает
jon
Отправлено: 11.04.2005, 14:11


Не зарегистрирован







Спасибо! Все работает.
Как масштабировать любую загружаемую картинку автоматом под фиксированный размер в BDImage?
AVC
Отправлено: 11.04.2005, 14:19


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

Determines whether bitmaps and metafiles assume the size and shape of the database image.

__property bool Stretch = {read=FStretch, write=SetStretch, default
=0};

Description

Set Stretch to true to cause the picture to assume the size and shape of the image control. When the image control resizes, the picture resizes also. Stretch resizes the height and width of the image independently. Thus, unlike a simple change in magnification, stretch can distort the image if the image control is not the same shape as the image.
olegenty
Отправлено: 11.04.2005, 15:50


Ветеран

Группа: Модератор
Сообщений: 2412



поздно пришёл smile.gif

одно НО!

получается, ты работаешь с набором данных, куда докачиваешь картинки, как поле. это не есть хорошо. для точности — это плохо. прикинь размер приложения в оперативке, при загруженной тысяче записей с картинками размером 1024х762 даже в формате JPG. грустно, да? smile.gif

картинки надо докачивать отдельно, AfterScroll, да ещё с завязкой на таймер. чтобы, когда пользователь быстро скроллируется, не портить ему этот кайф...
AVC
Отправлено: 11.04.2005, 16:58


Ветеран

Группа: Модератор
Сообщений: 1583



А началть нужно переходом с Table на Query smile.gif

Вернуться в Работа с базами данных в C++Builder