Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вставка файла в поле LOB Oracle [D6]


RealGanj ©   (2006-03-18 18:03:00) 

На сервере есть таблица с полем BLOB. Нужно с рабочей станции в столбец  BLOB вставить текст файла, например C:\Temp\Temp.rft.  Как его потом считать?


Sergey13   (2006-03-20 14:24:00) [1]

StoredProc1->ParamByName("p_Value")->ParamType = ptInput;


ANB   (2006-03-20 14:20:00) [2]

Как считать :
1) select Value from BlobTable where ID = :ID.
Потом вытащить блоб из поля стримом.
Для конкретного совета нужно знать, какими компонентами стучишься к ораклу.


ANB   (2006-03-20 14:18:00) [3]


> RealGanj   (20.03.06 14:13) [6]

Официальный язык русский. Переведи и запости еще раз, так как этот пост сейчас удалят.


RealGanj   (2006-03-20 14:13:00) [4]

Робочий код (працює з файлами будь-яких розмірів):
На сервері Oracle прописується така процедура:
CREATE OR REPLACE PROCEDURE BlobTableUpdate (p_Id NUMBER, p_Name VARCHAR2,
                          p_Value out  BLOB)
is
begin
 UPDATE BlobTable
 SET
   Name = p_Name,
   Value = EMPTY_BLOB()
 WHERE
   Id = p_Id
 RETURNING
   Value
 INTO
   p_Value;
end;
В Delphi або С++Builder:
StoredProc1->StoredProcName = "BlobTableUpdate";
StoredProc1->Prepare();
StoredProc1->ParamByName("p_Id")->AsInteger = 0;
StoredProc1->ParamByName("p_Name")->AsString = Name;
StoredProc1->ParamByName("p_Value")->ParamType = ptInput;
StoredProc1->ParamByName("p_Value")->AsBLOBLocator->LoadFromFile("c:\\D02_747.RTF");
StoredProc1->Execute();


Desdechado   (2006-03-18 22:09:00) [5]

маленькие-большие - граница "нерабочести" какая?
если БДЕ, смотри настройки драйвера


RealGanj   (2006-03-18 21:21:00) [6]


> Query1.Sql.Text :=
>   'INSERT INTO testblob ' +
>   ' ( ' +
>   '  fBlob' +
>   ' )' +
>   ' VALUES' +
>   ' (' +
>   ' :ParamBlobField' +
>   ')';
> Query1.ParamByName('ParamBlobField').DataType := ftBlob;
>
> Query1.ParamByName('ParamBlobField').ParamType := ptInput;
>
> Query1.ParamByName('ParamBlobField').LoadFromFile('MyFile',
> ftBlob);
> Query1.ExecSql;


Код работает только для маленьких файлов. Мне нужно большие.


Desdechado   (2006-03-18 20:38:00) [7]

> Не все так просто.
мы не ищем легких путей?


Reindeer Moss Eater   (2006-03-18 19:47:00) [8]

Не все так просто.


Desdechado   (2006-03-18 19:42:00) [9]

Query1.Sql.Text :=
  'INSERT INTO testblob ' +
  ' ( ' +
  '  fBlob' +
  ' )' +
  ' VALUES' +
  ' (' +
  ' :ParamBlobField' +
  ')';
Query1.ParamByName('ParamBlobField').DataType := ftBlob;
Query1.ParamByName('ParamBlobField').ParamType := ptInput;
Query1.ParamByName('ParamBlobField').LoadFromFile('MyFile',ftBlob);
Query1.ExecSql;

Считать - наоборот


Наверх

Титульная страница Поиск, карта сайта Написать письмо