How to write file to blob field using fixed transfer buffer.

Klestov

Member
How to write file to blob field using fixed transfer buffer?

My Source code (DOA Version 3.4.6.4):

.............

TOracleDataSet * m_OracleDataSet;

........... // LogOn and e.t.c.

m_OracleDataSet->ReadOnly = false;
m_OracleDataSet->ReadBuffer = 1;

/*
I want write content file 'my_file_name' to blob field 'my_blob' of first row from result set.
*/
m_OracleDataSet->SQL->Text = "select rowid , my_blob from my_table";
m_OracleDataSet->Open();

if (m_OracleDataSet->FieldCount == 1)
{
m_OracleDataSet->First();

if ((m_OracleDataSet->Eof == false) && (m_OracleDataSet->Bof == true))
{
if (m_OracleDataSet->Fields->Fields[0]->IsBlob() == true)
{
if ((m_OracleDataSet->CanModify == true) && (m_OracleDataSet->ReadOnly == false))
{
TBlobField * BlobField = dynamic_cast(m_OracleDataSet->Fields->Fields[0]);

if (BlobField != NULL)
{
// Size file 'my_file_name' is N bytes.
// WARNING !! : This operation allocate memory > 2N.
// if N = 50Mb - allocate > 100Mb !!!!!!

m_OracleDataSet->Edit(); // Start edit.
BlobField->LoadFromFile("my_file_name");
m_OracleDataSet->Post(); // Post data to DB.

// How to write file 'my_file_name' to blob field using fixed transfer buffer size of M.
// M ~ 10Kb.
// Memory in client PC is small ~ 64Mb. Using swap file is very very slow.
}
}
}
}
}

m_OracleDataSet->CloseAll();

...........
 
Use a TOracleQuery and a TLOBLocator instead. This allow you to control exactly how the data is read and written, and is most suitable when resources are limited.

------------------
Marco Kalter
Allround Automations
 
No, in that case you need to use the TOracleQuery->SetLongVariable and GetLongField functions.

------------------
Marco Kalter
Allround Automations
 
Back
Top