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();
...........
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();
...........