![]()
Давайте посмотрим, как нужно сохранить файлы в СУБД Oracle с помощью типа данных Binary Large Object... Саму программу делать будем на C++Builder6 с использованием компонентов ODAC версии 3.90. Хотя при работе с данными компонентами мы столкнемся с проблемкой – не поддерживается Oracle 10g, Но эту проблемку достаточно легко решить с помощью клиента от Oracle 9i.
Нам необходима будет приблизительно такая форма:
Нужны 2 кнопки, компоненты OraStoredProc1, OraSession1 из ODAC.
Делаем табличку для возможности тестирования и вставляем одну строку:
CREATE TABLE blobTable (
Id NUMBER,
Name VARCHAR2(30),
Value bLOB
);
insert into blobtable(id,name) values(1,'test')
Еще нам нужно будет сделать две несложных процедуры на сервере.
Первая:
CREATE OR REPLACE
PROCEDURE ClobTableUpdate (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;
Вторая:
CREATE OR REPLACE
PROCEDURE ClobTableGet (p_Id NUMBER, p_Value OUT bLOB)
is
begin
select value
into p_value
from blobtable
where id = p_id;
end;
В коде обработки самой первой кнопки (Write) прописываем нужный код, который будет записывать в табличку файл test.rtf, находящийся в том же каталоге что и программа.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString FileName = ExtractFilePath(ParamStr(0))+"\test.rtf";
OraStoredProc1->StoredProcName = "clobTableUpdate"; //назва процедури
OraStoredProc1->Prepare();
OraStoredProc1->ParamByName("p_Id")->AsInteger = 1; //id рядка
OraStoredProc1->ParamByName("p_Name")->AsString ="test";
OraStoredProc1->ParamByName("p_Value")->ParamType = ptInput; //Якщо ptInput - записуємо на сервер
OraStoredProc1->ParamByName("p_Value")->AsBLOBLocator->LoadFromFile(FileName);
OraStoredProc1->Execute();
OraSession1->Commit();
}
Считывания файла с сервера:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
AnsiString FileName = ExtractFilePath(ParamStr(0))+"\savevvv.rtf";
OraStoredProc1->StoredProcName = "clobTableget";
OraStoredProc1->Prepare();
OraStoredProc1->ParamByName("p_Id")->AsInteger = 1;
OraStoredProc1->ParamByName("p_Value")->ParamType = ptOutput;
OraStoredProc1->Execute();
OraStoredProc1->ParamByName("p_Value")->AsBLOBLocator->SaveToFile(FileName);
OraSession1->Commit();
}
И вот теперь уже мы записываем файл с Базы Данных именно в файл под названием savevvv.rtf.
Спонсор поста: хотите разговаривать со своими друзьями по всему миру не платя при этом ни копейки? Для этого вам надо всего лишь бесплатно скачать скайп на русском языке, посетив веб-сайт skypesoft.net. Программа Skype даст вам возможность качественного общения как в телефонном режиме, так и в чате!