Як мені в БД Оракл записати bmp-файл, в BLOB поле
Підкажіть як записати зображення в БД Оракл, у мене для цього виділено поле типу BLOB, тобто в поле повинна зберігається сама картинка, але як її засобами Делфі туди запхати я не зрозумів !!
Підкажіть!
Легко! Картинку - в потік, потік - в BLOB
А використовувана тобою бібліотека доступу підтримує взагалі оракловий тип BLOB?
я використовую ODAC, а як мені перетворити картинку в потік, можна трохи докладніше?
Людина не здогадується, що є папка Demos, в якій є папка BlobPictures.
Все одно я повністю не наздогнав, в демке робиться через процедуру, тобто в Оракл створюється процедура, а мені вона не потрібна. я хочу зробити просто запитом, я зробив так
# XA0; # XA0; # XA0; SqlQ.Close;
# XA0; # XA0; # XA0; SqlQ.SQL.Clear;
# XA0; # XA0; # XA0; SqlQ.SQL.Add ( "UPDATE MONEY.HHHH SET # XA0; RAB_PHOTO =: Pic WHERE key_pole = 631 ");
# XA0; # XA0; # XA0; SqlQ.ParamByName ( "Pic"). ParamType: = ptInput;
# XA0; # XA0; # XA0; SqlQ.ParamByName ( "Pic"). AsOraBlob.LoadFromFile (FileName);
# XA0; # XA0; # XA0; SqlQ.Execute;
Але мені пише помилку: ORA-01403 даних не знайдено.
У демке не робиться через процедуру.
Key_pole таке є 100процентов, а нащет демки так там зроблено через ось таку процедуру
CREATE OR REPLACE
PROCEDURE ODAC_BLOB_Insert (
# XA0; p_ID NUMBER,
# XA0; p_Title VARCHAR2,
# XA0; p_Pic OUT BLOB
)
is
begin
# XA0; INSERT INTO ODAC_BLOB (ID, Title, Pic)
# XA0; VALUES (p_ID, p_Title, EMPTY_BLOB ())
# XA0; RETURNING Pic
# XA0; INTO p_Pic;
end;
/
Навіть демка яка йде місці з ОДАК пише майже те ж саме:
OCI_NO_DATA
Дивна річ, у мене або OCI загнувся або я незнаю, якщо я використовую Net в ODAC все працює без проблем.
У демке екземпляр TSmartQuery (ім'я у нього Query).
Точила на таблицю (нема на процедуру) ODAC_BLOB
Завантаження картинки йде через нього (в тому числі через нього)
Чого ще треба?
Що ще не зрозуміло?
У мене навіть демка не працює, вірніше працює тільки коли включена опція NET, а так пише OCI_NO_DATA, чому?
Тому що клієнт Оракл не встановлено / зіпсований
Врятли, всі програми працюють без проблем, а от це немає
Врятли, всі програми працюють без проблем, а от це немає
Гаразд, я так зрозумів з БЛОБ тут проблеми, і так швидко і просто не розібратися. Тоді може підкажіть (бажано шматочком коду) як в поле LONG RAW?
SQL.TEXT: = "insert into mytable (mylongrawfield) values (: blob_body)";
ParamByName ( "blob_body"). LoadFromFile (.)
Спасибі, все працює, але коли я намагаюся зробити апдейт
SqlQ.SQL.Add ( "UPDATE MONEY.MMM SET PHOTO =: Pic");
SqlQ.ParamByName ( "Pic"). LoadFromFile ( "c: \ 1.bmp", ftBlob);
чомусь вискакує помилка AccesViolation в модулі ORA805.dll
запит незахотел працювати відразу для всіх записів